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-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
Configured MCU 'mcu' (1024 moves)
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-396-gb7233d119 / 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-396-gb7233d119-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/ratos.py, klippy/extras/ratos_homing.py, klippy/extras/resonance_generator.py, klippy/extras/z_offset_probe.py, klippy/kinematics/ratos_hybrid_corexy.py
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Mar 20 2025, 22:21:41) \n[GCC 10.2.1 20210110]'
webhooks client 4102846160: {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
=============== Log rollover at Fri Jun 27 18:03:29 2025 ===============
Stats 39.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3673 bytes_read=8263 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=180000153 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=864 bytes_read=4796 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=49999596 adj=50002134 toolboard_t0: mcu_awake=0.006 mcu_task_avg=0.000018 mcu_task_stddev=0.000028 bytes_write=1476 bytes_read=5722 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=63999192 adj=63998614 Octopus_V1.1_F446: temp=21.3 EBB42_v1.2_T0: temp=25.6 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=4443 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=31999797 adj=31999794 coil_temp=21.5 refs=0 mcu_temp=20.65 supply_voltage=2.977 sysload=1.13 cputime=6.850 memavail=3388072 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 40.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3679 bytes_read=8388 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=180000215 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=870 bytes_read=4812 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=49999619 adj=49998583 toolboard_t0: mcu_awake=0.006 mcu_task_avg=0.000018 mcu_task_stddev=0.000028 bytes_write=1482 bytes_read=5822 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=63999155 adj=63999980 Octopus_V1.1_F446: temp=21.5 EBB42_v1.2_T0: temp=25.7 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=4781 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=31999761 adj=31999224 coil_temp=21.5 refs=0 mcu_temp=20.68 supply_voltage=2.977 sysload=1.12 cputime=6.876 memavail=3386484 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 41.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3685 bytes_read=8486 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=180000287 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=876 bytes_read=4828 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=50000307 adj=49998860 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1488 bytes_read=5936 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=63999174 adj=63999565 Octopus_V1.1_F446: temp=21.5 EBB42_v1.2_T0: temp=25.5 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=5155 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=31999763 adj=31999205 coil_temp=21.5 refs=0 mcu_temp=20.71 supply_voltage=2.977 sysload=1.12 cputime=6.893 memavail=3387252 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 42.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3691 bytes_read=8589 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=180000338 rpi: mcu_awake=0.000 mcu_task_avg=0.000009 mcu_task_stddev=0.000008 bytes_write=882 bytes_read=4844 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=50000218 adj=50001557 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1494 bytes_read=6064 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=63999201 adj=63999409 Octopus_V1.1_F446: temp=21.5 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=5511 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=31999796 adj=31999294 coil_temp=21.5 refs=0 mcu_temp=20.74 supply_voltage=2.977 sysload=1.12 cputime=6.922 memavail=3387252 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 43.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3697 bytes_read=8735 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=180000358 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 bytes_write=888 bytes_read=4873 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=50000097 adj=50000807 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=6164 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=63999186 adj=63999355 Octopus_V1.1_F446: temp=21.5 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=33.6 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=5867 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=31999766 adj=31999480 coil_temp=21.5 refs=0 mcu_temp=20.77 supply_voltage=2.977 sysload=1.12 cputime=6.949 memavail=3384296 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000
Stats 44.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3703 bytes_read=8838 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=180000308 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 bytes_write=894 bytes_read=4889 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=50000002 adj=50000100 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=6264 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=63999178 adj=63999196 Octopus_V1.1_F446: temp=21.5 EBB42_v1.2_T0: temp=25.6 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=6223 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=31999741 adj=31999411 coil_temp=21.5 refs=0 mcu_temp=20.80 supply_voltage=2.977 sysload=1.12 cputime=6.964 memavail=3384552 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 45.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3709 bytes_read=8941 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=180000260 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 bytes_write=900 bytes_read=4905 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=49999939 adj=49999771 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=6392 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=63999279 adj=63999206 Octopus_V1.1_F446: temp=21.7 EBB42_v1.2_T0: temp=25.7 raspberry_pi: temp=33.6 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=6579 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=31999724 adj=31999422 coil_temp=21.5 refs=0 mcu_temp=20.83 supply_voltage=2.977 sysload=1.03 cputime=6.978 memavail=3384552 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 46.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3715 bytes_read=9073 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=180000411 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 bytes_write=906 bytes_read=4921 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=49999918 adj=49999573 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6492 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=63999252 adj=63999708 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.6 raspberry_pi: temp=33.1 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=6935 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=31999717 adj=31999494 coil_temp=21.5 refs=0 mcu_temp=20.85 supply_voltage=2.977 sysload=1.03 cputime=6.992 memavail=3384832 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 47.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3721 bytes_read=9176 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=180000362 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 bytes_write=912 bytes_read=4937 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=49999882 adj=49999338 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6606 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=63999250 adj=63999182 Octopus_V1.1_F446: temp=21.7 EBB42_v1.2_T0: temp=25.6 raspberry_pi: temp=33.6 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=7291 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=31999708 adj=31999376 coil_temp=21.5 refs=0 mcu_temp=20.88 supply_voltage=2.977 sysload=1.03 cputime=7.006 memavail=3384836 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 48.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3727 bytes_read=9293 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=180000372 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=918 bytes_read=4966 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=49999897 adj=49999422 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=6734 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=63999257 adj=63999245 Octopus_V1.1_F446: temp=21.7 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=7647 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=31999712 adj=31999442 coil_temp=21.5 refs=0 mcu_temp=20.91 supply_voltage=2.977 sysload=1.03 cputime=7.034 memavail=3384836 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 49.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3733 bytes_read=9425 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=180000352 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=924 bytes_read=4982 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=49999900 adj=49999577 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=6834 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=63999246 adj=63999232 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=33.1 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=8003 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=31999709 adj=31999502 coil_temp=21.5 refs=0 mcu_temp=20.94 supply_voltage=2.977 sysload=1.03 cputime=7.059 memavail=3385848 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 50.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3739 bytes_read=9528 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=180000322 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=930 bytes_read=4998 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=49999875 adj=49999680 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=6934 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=63999243 adj=63999188 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=8359 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=31999703 adj=31999542 coil_temp=21.6 refs=0 mcu_temp=20.97 supply_voltage=2.977 sysload=0.95 cputime=7.075 memavail=3384736 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 51.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3745 bytes_read=9631 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=180000297 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=936 bytes_read=5014 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=49999866 adj=49999617 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=7062 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=63999241 adj=63999272 Octopus_V1.1_F446: temp=21.7 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=8715 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=31999700 adj=31999572 coil_temp=21.6 refs=0 mcu_temp=20.99 supply_voltage=2.977 sysload=0.95 cputime=7.089 memavail=3384860 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 52.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3751 bytes_read=9763 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=180000358 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=942 bytes_read=5030 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=49999852 adj=49999648 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1554 bytes_read=7176 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=63999237 adj=63999274 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=9071 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=31999704 adj=31999623 coil_temp=21.6 refs=0 mcu_temp=21.02 supply_voltage=2.977 sysload=0.95 cputime=7.103 memavail=3384860 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 53.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3757 bytes_read=9880 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=180000329 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000022 bytes_write=948 bytes_read=5059 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=49999847 adj=49999494 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1560 bytes_read=7276 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=63999232 adj=63999083 Octopus_V1.1_F446: temp=21.7 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=9427 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=31999705 adj=31999585 coil_temp=21.6 refs=0 mcu_temp=21.04 supply_voltage=2.977 sysload=0.95 cputime=7.117 memavail=3384860 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 54.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3763 bytes_read=9983 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=180000334 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000022 bytes_write=954 bytes_read=5075 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=49999864 adj=49999576 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1566 bytes_read=7404 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=63999243 adj=63999128 Octopus_V1.1_F446: temp=21.7 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=9783 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=31999708 adj=31999640 coil_temp=21.6 refs=0 mcu_temp=21.06 supply_voltage=2.977 sysload=0.95 cputime=7.141 memavail=3384860 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 55.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3769 bytes_read=10115 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=180000330 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000022 bytes_write=960 bytes_read=5091 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=49999881 adj=49999720 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1572 bytes_read=7504 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=63999240 adj=63999178 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=33.1 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=10139 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=31999707 adj=31999652 coil_temp=21.6 refs=0 mcu_temp=21.07 supply_voltage=2.977 sysload=0.87 cputime=7.169 memavail=3382320 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 56.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3775 bytes_read=10218 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=180000359 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000022 bytes_write=966 bytes_read=5107 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=49999872 adj=49999858 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1578 bytes_read=7604 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=63999237 adj=63999158 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=10495 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=31999708 adj=31999655 coil_temp=21.6 refs=0 mcu_temp=21.09 supply_voltage=2.977 sysload=0.87 cputime=7.187 memavail=3383620 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 57.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3781 bytes_read=10321 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=180000369 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000022 bytes_write=972 bytes_read=5123 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=49999871 adj=49999723 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1584 bytes_read=7742 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=63999236 adj=63999055 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=10851 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=31999709 adj=31999623 coil_temp=21.6 refs=0 mcu_temp=21.12 supply_voltage=2.977 sysload=0.87 cputime=7.201 memavail=3383700 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 58.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3787 bytes_read=10467 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=180000343 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=978 bytes_read=5152 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=49999864 adj=49999703 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1590 bytes_read=7835 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=63999239 adj=63999072 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=11207 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=31999707 adj=31999618 coil_temp=21.6 refs=0 mcu_temp=21.15 supply_voltage=2.977 sysload=0.87 cputime=7.215 memavail=3383456 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 59.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3793 bytes_read=10570 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=180000329 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=984 bytes_read=5168 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=49999863 adj=49999729 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1596 bytes_read=7928 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=63999240 adj=63999172 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=11563 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=31999709 adj=31999644 coil_temp=21.6 refs=0 mcu_temp=21.17 supply_voltage=2.977 sysload=0.87 cputime=7.229 memavail=3383456 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 60.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3799 bytes_read=10673 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=180000330 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=990 bytes_read=5184 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=49999882 adj=49999762 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1602 bytes_read=8047 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=63999256 adj=63999201 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=11919 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=31999716 adj=31999680 coil_temp=21.6 refs=0 mcu_temp=21.19 supply_voltage=2.977 sysload=0.88 cputime=7.248 memavail=3384572 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 61.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3805 bytes_read=10805 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=180000313 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=996 bytes_read=5200 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=49999913 adj=49999897 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1608 bytes_read=8142 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=63999254 adj=63999297 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=12275 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=31999713 adj=31999719 coil_temp=21.6 refs=0 mcu_temp=21.21 supply_voltage=2.977 sysload=0.88 cputime=7.265 memavail=3383460 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 62.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3811 bytes_read=10908 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=180000326 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=1002 bytes_read=5216 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=49999978 adj=50000150 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1614 bytes_read=8256 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=63999257 adj=63999291 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=12631 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=31999715 adj=31999710 coil_temp=21.6 refs=0 mcu_temp=21.23 supply_voltage=2.977 sysload=0.88 cputime=7.285 memavail=3383432 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 63.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3817 bytes_read=11025 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=180000314 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=1008 bytes_read=5245 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=49999965 adj=50000546 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1620 bytes_read=8384 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=63999258 adj=63999243 Octopus_V1.1_F446: temp=21.9 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=12971 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=31999715 adj=31999691 coil_temp=21.6 refs=0 mcu_temp=21.26 supply_voltage=2.977 sysload=0.88 cputime=7.300 memavail=3384172 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 64.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3823 bytes_read=11150 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=180000305 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=1014 bytes_read=5261 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=49999955 adj=50000305 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1626 bytes_read=8484 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=63999257 adj=63999255 Octopus_V1.1_F446: temp=21.9 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=13327 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=31999715 adj=31999700 coil_temp=21.6 refs=0 mcu_temp=21.28 supply_voltage=2.977 sysload=0.88 cputime=7.313 memavail=3385196 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 65.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3829 bytes_read=11248 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=180000297 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=1020 bytes_read=5277 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=49999945 adj=50000137 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1632 bytes_read=8584 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=63999256 adj=63999248 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=13683 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=31999715 adj=31999707 coil_temp=21.6 refs=0 mcu_temp=21.31 supply_voltage=2.977 sysload=0.81 cputime=7.328 memavail=3385196 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 66.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3835 bytes_read=11351 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=180000311 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=1026 bytes_read=5293 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=49999996 adj=50000009 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1638 bytes_read=8712 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=63999261 adj=63999320 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.2 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=14039 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=31999722 adj=31999705 coil_temp=21.6 refs=0 mcu_temp=21.32 supply_voltage=2.977 sysload=0.81 cputime=7.359 memavail=3385964 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 67.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3841 bytes_read=11483 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=180000316 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=1032 bytes_read=5309 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=50000062 adj=50000367 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1644 bytes_read=8826 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=63999269 adj=63999281 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=14395 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=31999724 adj=31999727 coil_temp=21.6 refs=0 mcu_temp=21.34 supply_voltage=2.977 sysload=0.81 cputime=7.390 memavail=3385964 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 68.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3847 bytes_read=11600 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=180000316 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=1038 bytes_read=5338 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=50000047 adj=50000808 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1650 bytes_read=8926 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=63999275 adj=63999296 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=14751 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=31999722 adj=31999722 coil_temp=21.7 refs=0 mcu_temp=21.35 supply_voltage=2.977 sysload=0.81 cputime=7.444 memavail=3382976 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 69.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3853 bytes_read=11703 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=180000305 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=1044 bytes_read=5354 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=50000042 adj=50000466 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1656 bytes_read=9054 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=63999275 adj=63999312 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=15107 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=31999720 adj=31999691 coil_temp=21.7 refs=0 mcu_temp=21.37 supply_voltage=2.977 sysload=0.81 cputime=7.461 memavail=3384508 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 70.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3859 bytes_read=11835 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=180000295 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=1050 bytes_read=5370 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=50000022 adj=50000327 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1662 bytes_read=9154 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=63999275 adj=63999314 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=15463 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=31999718 adj=31999687 coil_temp=21.7 refs=0 mcu_temp=21.39 supply_voltage=2.977 sysload=0.75 cputime=7.475 memavail=3384508 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 71.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3865 bytes_read=11938 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=180000294 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=1056 bytes_read=5386 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=49999988 adj=50000075 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1668 bytes_read=9254 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=63999280 adj=63999308 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=15819 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=31999719 adj=31999685 coil_temp=21.7 refs=0 mcu_temp=21.40 supply_voltage=2.977 sysload=0.75 cputime=7.490 memavail=3384508 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 72.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3871 bytes_read=12041 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=180000287 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=1062 bytes_read=5402 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=49999736 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1674 bytes_read=9396 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=63999280 adj=63999329 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=16175 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=31999717 adj=31999688 coil_temp=21.7 refs=0 mcu_temp=21.42 supply_voltage=2.977 sysload=0.75 cputime=7.504 memavail=3384508 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 73.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3877 bytes_read=12187 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=180000297 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=1068 bytes_read=5431 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=49999921 adj=49999502 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1680 bytes_read=9496 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=63999298 adj=63999292 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=16531 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=31999723 adj=31999672 coil_temp=21.7 refs=0 mcu_temp=21.44 supply_voltage=2.977 sysload=0.75 cputime=7.532 memavail=3384508 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 74.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3883 bytes_read=12290 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=180000298 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=1074 bytes_read=5447 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=49999884 adj=49999226 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1686 bytes_read=9596 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=63999296 adj=63999400 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=16887 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=31999725 adj=31999704 coil_temp=21.7 refs=0 mcu_temp=21.46 supply_voltage=2.977 sysload=0.75 cputime=7.557 memavail=3384840 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 75.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3889 bytes_read=12393 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=180000294 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=1080 bytes_read=5463 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=49999825 adj=49999014 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1692 bytes_read=9724 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=63999294 adj=63999323 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.5 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=17243 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=31999727 adj=31999718 coil_temp=21.7 refs=0 mcu_temp=21.47 supply_voltage=2.977 sysload=0.69 cputime=7.575 memavail=3385400 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 76.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3895 bytes_read=12525 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=180000290 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=1086 bytes_read=5479 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=49999762 adj=49998650 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1698 bytes_read=9824 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=63999293 adj=63999288 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=17599 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=31999727 adj=31999730 coil_temp=21.7 refs=0 mcu_temp=21.48 supply_voltage=2.977 sysload=0.69 cputime=7.589 memavail=3384908 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 77.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3901 bytes_read=12628 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=180000286 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 bytes_write=1092 bytes_read=5495 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=49999709 adj=49998313 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1704 bytes_read=9952 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=63999291 adj=63999270 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=17955 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=31999725 adj=31999721 coil_temp=21.7 refs=0 mcu_temp=21.50 supply_voltage=2.977 sysload=0.69 cputime=7.607 memavail=3379764 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 78.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3907 bytes_read=12731 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=180000286 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000011 bytes_write=1098 bytes_read=5524 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=49999647 adj=49998140 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1710 bytes_read=10066 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=63999290 adj=63999244 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=18311 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=31999724 adj=31999696 coil_temp=21.7 refs=0 mcu_temp=21.51 supply_voltage=2.977 sysload=0.69 cputime=7.621 memavail=3386816 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 79.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3913 bytes_read=12877 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=180000307 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000011 bytes_write=1104 bytes_read=5540 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=49999593 adj=49997887 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1716 bytes_read=10166 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=63999293 adj=63999216 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=26.2 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=18667 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=31999730 adj=31999685 coil_temp=21.7 refs=0 mcu_temp=21.52 supply_voltage=2.977 sysload=0.69 cputime=7.645 memavail=3386816 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 80.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3919 bytes_read=12980 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=180000347 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000011 bytes_write=1110 bytes_read=5556 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=49999544 adj=49997698 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1722 bytes_read=10280 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=63999295 adj=63999160 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=19023 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=31999730 adj=31999699 coil_temp=21.7 refs=0 mcu_temp=21.53 supply_voltage=2.977 sysload=0.63 cputime=7.673 memavail=3386324 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 81.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3925 bytes_read=13083 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=180000341 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000011 bytes_write=1116 bytes_read=5572 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=49999491 adj=49997526 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1728 bytes_read=10394 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=63999298 adj=63999045 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=19379 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=31999729 adj=31999623 coil_temp=21.7 refs=0 mcu_temp=21.54 supply_voltage=2.977 sysload=0.63 cputime=7.692 memavail=3386820 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 82.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3931 bytes_read=13215 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=180000333 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000011 bytes_write=1122 bytes_read=5588 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=49999432 adj=49997472 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1734 bytes_read=10508 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=63999298 adj=63999135 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=19735 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=31999727 adj=31999638 coil_temp=21.7 refs=0 mcu_temp=21.55 supply_voltage=2.977 sysload=0.63 cputime=7.705 memavail=3386820 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 83.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3937 bytes_read=13318 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=180000325 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000011 bytes_write=1128 bytes_read=5604 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=49999379 adj=49997349 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1740 bytes_read=10622 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=63999297 adj=63999166 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=26.2 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=20091 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=31999726 adj=31999641 coil_temp=21.7 refs=0 mcu_temp=21.56 supply_voltage=2.977 sysload=0.63 cputime=7.719 memavail=3386820 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 84.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3943 bytes_read=13435 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000320 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1134 bytes_read=5633 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=49999326 adj=49997297 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1746 bytes_read=10736 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=63999295 adj=63999187 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=20447 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=31999725 adj=31999645 coil_temp=21.7 refs=0 mcu_temp=21.56 supply_voltage=2.977 sysload=0.63 cputime=7.733 memavail=3386820 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 85.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3949 bytes_read=13567 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000342 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1140 bytes_read=5649 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=49999277 adj=49997238 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1752 bytes_read=10836 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=63999295 adj=63999193 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=20803 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=31999724 adj=31999662 coil_temp=21.7 refs=0 mcu_temp=21.56 supply_voltage=2.977 sysload=0.58 cputime=7.752 memavail=3386820 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 86.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3955 bytes_read=13670 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000352 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1146 bytes_read=5665 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=49999238 adj=49997142 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1758 bytes_read=10950 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=63999296 adj=63999099 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=26.2 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=21159 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=31999724 adj=31999615 coil_temp=21.7 refs=0 mcu_temp=21.58 supply_voltage=2.977 sysload=0.58 cputime=7.781 memavail=3386612 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 87.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3961 bytes_read=13773 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000363 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1152 bytes_read=5681 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=49999203 adj=49997193 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1764 bytes_read=11078 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=63999300 adj=63999095 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=21515 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=31999725 adj=31999611 coil_temp=21.8 refs=0 mcu_temp=21.60 supply_voltage=2.977 sysload=0.58 cputime=7.811 memavail=3386612 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 88.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3967 bytes_read=13897 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000367 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1158 bytes_read=5697 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=49999170 adj=49997257 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1770 bytes_read=11178 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=63999303 adj=63999106 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=21871 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=31999726 adj=31999614 coil_temp=21.8 refs=0 mcu_temp=21.61 supply_voltage=2.977 sysload=0.58 cputime=7.841 memavail=3386612 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 89.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3973 bytes_read=14011 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000371 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000017 bytes_write=1164 bytes_read=5726 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=49999139 adj=49997331 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1776 bytes_read=11292 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=63999308 adj=63999143 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=22227 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=31999727 adj=31999623 coil_temp=21.8 refs=0 mcu_temp=21.62 supply_voltage=2.977 sysload=0.58 cputime=7.871 memavail=3386612 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 90.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3979 bytes_read=14114 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000378 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000017 bytes_write=1170 bytes_read=5742 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=49999110 adj=49997400 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1782 bytes_read=11406 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=63999311 adj=63999188 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=22583 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=31999733 adj=31999634 coil_temp=21.8 refs=0 mcu_temp=21.63 supply_voltage=2.977 sysload=1.01 cputime=7.895 memavail=3389572 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 91.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3985 bytes_read=14246 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000375 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000017 bytes_write=1176 bytes_read=5758 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=49999076 adj=49997454 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1788 bytes_read=11506 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=63999313 adj=63999194 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=22939 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=31999733 adj=31999699 coil_temp=21.8 refs=0 mcu_temp=21.66 supply_voltage=2.977 sysload=1.01 cputime=7.909 memavail=3389648 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 92.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3991 bytes_read=14349 bytes_retransmit=9 bytes_invalid=0 send_seq=359 receive_seq=359 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000367 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000017 bytes_write=1182 bytes_read=5774 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=49999042 adj=49997461 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1794 bytes_read=11634 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=63999321 adj=63999219 Octopus_V1.1_F446: temp=22.1 EBB42_v1.2_T0: temp=26.6 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=23295 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=31999732 adj=31999693 coil_temp=21.8 refs=0 mcu_temp=21.68 supply_voltage=2.977 sysload=1.01 cputime=7.923 memavail=3389648 print_time=40.208 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 376.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5725 bytes_read=47081 bytes_retransmit=9 bytes_invalid=0 send_seq=648 receive_seq=648 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000521 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=2916 bytes_read=11117 bytes_retransmit=0 bytes_invalid=0 send_seq=460 receive_seq=460 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999419 adj=49999371 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3528 bytes_read=43443 bytes_retransmit=9 bytes_invalid=0 send_seq=501 receive_seq=501 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999412 adj=63999243 Octopus_V1.1_F446: temp=24.4 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2436 bytes_read=124229 bytes_retransmit=0 bytes_invalid=0 send_seq=406 receive_seq=406 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999755 adj=31999647 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.28 cputime=15.203 memavail=3401896 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 377.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5731 bytes_read=47198 bytes_retransmit=9 bytes_invalid=0 send_seq=649 receive_seq=649 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000522 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=2922 bytes_read=11133 bytes_retransmit=0 bytes_invalid=0 send_seq=461 receive_seq=461 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999422 adj=49999373 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3534 bytes_read=43543 bytes_retransmit=9 bytes_invalid=0 send_seq=502 receive_seq=502 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999413 adj=63999237 Octopus_V1.1_F446: temp=24.3 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2442 bytes_read=124585 bytes_retransmit=0 bytes_invalid=0 send_seq=407 receive_seq=407 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999755 adj=31999640 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.28 cputime=15.251 memavail=3401908 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 378.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5737 bytes_read=47330 bytes_retransmit=9 bytes_invalid=0 send_seq=650 receive_seq=650 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000524 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=2928 bytes_read=11149 bytes_retransmit=0 bytes_invalid=0 send_seq=462 receive_seq=462 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999426 adj=49999386 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3540 bytes_read=43643 bytes_retransmit=9 bytes_invalid=0 send_seq=503 receive_seq=503 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999419 adj=63999243 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2448 bytes_read=124941 bytes_retransmit=0 bytes_invalid=0 send_seq=408 receive_seq=408 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999755 adj=31999650 coil_temp=22.5 refs=0 mcu_temp=22.89 supply_voltage=2.977 sysload=0.28 cputime=15.300 memavail=3401908 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 379.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5743 bytes_read=47433 bytes_retransmit=9 bytes_invalid=0 send_seq=651 receive_seq=651 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000526 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=2934 bytes_read=11165 bytes_retransmit=0 bytes_invalid=0 send_seq=463 receive_seq=463 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999428 adj=49999409 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3546 bytes_read=43771 bytes_retransmit=9 bytes_invalid=0 send_seq=504 receive_seq=504 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999420 adj=63999327 Octopus_V1.1_F446: temp=24.3 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2454 bytes_read=125297 bytes_retransmit=0 bytes_invalid=0 send_seq=409 receive_seq=409 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999755 adj=31999643 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.28 cputime=15.349 memavail=3401908 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 380.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5749 bytes_read=47565 bytes_retransmit=9 bytes_invalid=0 send_seq=652 receive_seq=652 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000531 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=2940 bytes_read=11181 bytes_retransmit=0 bytes_invalid=0 send_seq=464 receive_seq=464 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999432 adj=49999397 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3552 bytes_read=43871 bytes_retransmit=9 bytes_invalid=0 send_seq=505 receive_seq=505 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999421 adj=63999301 Octopus_V1.1_F446: temp=24.4 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2460 bytes_read=125653 bytes_retransmit=0 bytes_invalid=0 send_seq=410 receive_seq=410 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999755 adj=31999645 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.26 cputime=15.400 memavail=3401908 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 381.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5755 bytes_read=47668 bytes_retransmit=9 bytes_invalid=0 send_seq=653 receive_seq=653 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000533 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=2946 bytes_read=11210 bytes_retransmit=0 bytes_invalid=0 send_seq=465 receive_seq=465 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999436 adj=49999408 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3558 bytes_read=43985 bytes_retransmit=9 bytes_invalid=0 send_seq=506 receive_seq=506 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999422 adj=63999278 Octopus_V1.1_F446: temp=24.3 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2466 bytes_read=126009 bytes_retransmit=0 bytes_invalid=0 send_seq=411 receive_seq=411 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999755 adj=31999636 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.26 cputime=15.449 memavail=3401908 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 382.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5761 bytes_read=47771 bytes_retransmit=9 bytes_invalid=0 send_seq=654 receive_seq=654 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000540 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=2952 bytes_read=11226 bytes_retransmit=0 bytes_invalid=0 send_seq=466 receive_seq=466 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999443 adj=49999436 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3564 bytes_read=44113 bytes_retransmit=9 bytes_invalid=0 send_seq=507 receive_seq=507 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999423 adj=63999267 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2472 bytes_read=126365 bytes_retransmit=0 bytes_invalid=0 send_seq=412 receive_seq=412 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999756 adj=31999637 coil_temp=22.5 refs=0 mcu_temp=22.89 supply_voltage=2.977 sysload=0.26 cputime=15.498 memavail=3401684 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 383.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5767 bytes_read=47917 bytes_retransmit=9 bytes_invalid=0 send_seq=655 receive_seq=655 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000541 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=2958 bytes_read=11242 bytes_retransmit=0 bytes_invalid=0 send_seq=467 receive_seq=467 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999450 adj=49999484 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3570 bytes_read=44213 bytes_retransmit=9 bytes_invalid=0 send_seq=508 receive_seq=508 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999424 adj=63999237 Octopus_V1.1_F446: temp=24.4 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2478 bytes_read=126721 bytes_retransmit=0 bytes_invalid=0 send_seq=413 receive_seq=413 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999757 adj=31999635 coil_temp=22.5 refs=0 mcu_temp=22.89 supply_voltage=2.977 sysload=0.26 cputime=15.548 memavail=3401684 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 384.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5773 bytes_read=48020 bytes_retransmit=9 bytes_invalid=0 send_seq=656 receive_seq=656 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=2964 bytes_read=11258 bytes_retransmit=0 bytes_invalid=0 send_seq=468 receive_seq=468 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999452 adj=49999526 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3576 bytes_read=44313 bytes_retransmit=9 bytes_invalid=0 send_seq=509 receive_seq=509 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999424 adj=63999236 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2484 bytes_read=127077 bytes_retransmit=0 bytes_invalid=0 send_seq=414 receive_seq=414 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999757 adj=31999645 coil_temp=22.5 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.26 cputime=15.596 memavail=3401684 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 385.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5779 bytes_read=48123 bytes_retransmit=9 bytes_invalid=0 send_seq=657 receive_seq=657 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000546 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=2970 bytes_read=11274 bytes_retransmit=0 bytes_invalid=0 send_seq=469 receive_seq=469 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999455 adj=49999494 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3582 bytes_read=44441 bytes_retransmit=9 bytes_invalid=0 send_seq=510 receive_seq=510 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999425 adj=63999232 Octopus_V1.1_F446: temp=24.4 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2490 bytes_read=127433 bytes_retransmit=0 bytes_invalid=0 send_seq=415 receive_seq=415 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999757 adj=31999647 coil_temp=22.5 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.40 cputime=15.636 memavail=3401700 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 386.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5785 bytes_read=48255 bytes_retransmit=9 bytes_invalid=0 send_seq=658 receive_seq=658 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000557 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000021 bytes_write=2976 bytes_read=11303 bytes_retransmit=0 bytes_invalid=0 send_seq=470 receive_seq=470 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999456 adj=49999485 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3588 bytes_read=44555 bytes_retransmit=9 bytes_invalid=0 send_seq=511 receive_seq=511 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999424 adj=63999235 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2496 bytes_read=127789 bytes_retransmit=0 bytes_invalid=0 send_seq=416 receive_seq=416 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999756 adj=31999648 coil_temp=22.5 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.40 cputime=15.663 memavail=3401720 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 387.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5791 bytes_read=48358 bytes_retransmit=9 bytes_invalid=0 send_seq=659 receive_seq=659 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000554 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000021 bytes_write=2982 bytes_read=11319 bytes_retransmit=0 bytes_invalid=0 send_seq=471 receive_seq=471 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999454 adj=49999411 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3594 bytes_read=44655 bytes_retransmit=9 bytes_invalid=0 send_seq=512 receive_seq=512 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999435 adj=63999159 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2502 bytes_read=128145 bytes_retransmit=0 bytes_invalid=0 send_seq=417 receive_seq=417 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999756 adj=31999607 coil_temp=22.5 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.40 cputime=15.689 memavail=3401872 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 388.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5797 bytes_read=48475 bytes_retransmit=9 bytes_invalid=0 send_seq=660 receive_seq=660 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000554 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000021 bytes_write=2988 bytes_read=11335 bytes_retransmit=0 bytes_invalid=0 send_seq=472 receive_seq=472 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999453 adj=49999360 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3600 bytes_read=44783 bytes_retransmit=9 bytes_invalid=0 send_seq=513 receive_seq=513 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999433 adj=63999355 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2508 bytes_read=128501 bytes_retransmit=0 bytes_invalid=0 send_seq=418 receive_seq=418 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999756 adj=31999624 coil_temp=22.5 refs=0 mcu_temp=22.89 supply_voltage=2.977 sysload=0.40 cputime=15.716 memavail=3401976 print_time=383.401 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 389.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5803 bytes_read=48607 bytes_retransmit=9 bytes_invalid=0 send_seq=661 receive_seq=661 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000552 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000021 bytes_write=2994 bytes_read=11351 bytes_retransmit=0 bytes_invalid=0 send_seq=473 receive_seq=473 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999452 adj=49999327 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3606 bytes_read=44883 bytes_retransmit=9 bytes_invalid=0 send_seq=514 receive_seq=514 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999431 adj=63999295 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2514 bytes_read=128857 bytes_retransmit=0 bytes_invalid=0 send_seq=419 receive_seq=419 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999757 adj=31999630 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.40 cputime=15.751 memavail=3405488 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 390.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5809 bytes_read=48710 bytes_retransmit=9 bytes_invalid=0 send_seq=662 receive_seq=662 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000548 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000021 bytes_write=3000 bytes_read=11367 bytes_retransmit=0 bytes_invalid=0 send_seq=474 receive_seq=474 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999451 adj=49999318 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3612 bytes_read=44983 bytes_retransmit=9 bytes_invalid=0 send_seq=515 receive_seq=515 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999437 adj=63999265 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2520 bytes_read=129213 bytes_retransmit=0 bytes_invalid=0 send_seq=420 receive_seq=420 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999757 adj=31999668 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.36 cputime=15.784 memavail=3405612 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 391.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5815 bytes_read=48813 bytes_retransmit=9 bytes_invalid=0 send_seq=663 receive_seq=663 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000547 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3006 bytes_read=11396 bytes_retransmit=0 bytes_invalid=0 send_seq=475 receive_seq=475 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999460 adj=49999319 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3618 bytes_read=45125 bytes_retransmit=9 bytes_invalid=0 send_seq=516 receive_seq=516 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999435 adj=63999363 Octopus_V1.1_F446: temp=24.3 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2526 bytes_read=129569 bytes_retransmit=0 bytes_invalid=0 send_seq=421 receive_seq=421 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999760 adj=31999665 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.36 cputime=15.812 memavail=3405612 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 392.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5821 bytes_read=48945 bytes_retransmit=9 bytes_invalid=0 send_seq=664 receive_seq=664 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000546 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3012 bytes_read=11412 bytes_retransmit=0 bytes_invalid=0 send_seq=476 receive_seq=476 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999460 adj=49999461 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3624 bytes_read=45225 bytes_retransmit=9 bytes_invalid=0 send_seq=517 receive_seq=517 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999433 adj=63999312 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2532 bytes_read=129925 bytes_retransmit=0 bytes_invalid=0 send_seq=422 receive_seq=422 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999711 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.36 cputime=15.838 memavail=3405612 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 393.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5827 bytes_read=49062 bytes_retransmit=9 bytes_invalid=0 send_seq=665 receive_seq=665 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3018 bytes_read=11428 bytes_retransmit=0 bytes_invalid=0 send_seq=477 receive_seq=477 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999460 adj=49999416 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3630 bytes_read=45319 bytes_retransmit=9 bytes_invalid=0 send_seq=518 receive_seq=518 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999431 adj=63999270 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2538 bytes_read=130281 bytes_retransmit=0 bytes_invalid=0 send_seq=423 receive_seq=423 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999768 adj=31999741 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.36 cputime=15.864 memavail=3405612 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 394.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5833 bytes_read=49165 bytes_retransmit=9 bytes_invalid=0 send_seq=666 receive_seq=666 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000540 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3024 bytes_read=11444 bytes_retransmit=0 bytes_invalid=0 send_seq=478 receive_seq=478 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999460 adj=49999401 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3636 bytes_read=45437 bytes_retransmit=9 bytes_invalid=0 send_seq=519 receive_seq=519 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999441 adj=63999246 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2544 bytes_read=130637 bytes_retransmit=0 bytes_invalid=0 send_seq=424 receive_seq=424 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999819 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.36 cputime=15.891 memavail=3405612 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 395.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5839 bytes_read=49297 bytes_retransmit=9 bytes_invalid=0 send_seq=667 receive_seq=667 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000541 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3030 bytes_read=11460 bytes_retransmit=0 bytes_invalid=0 send_seq=479 receive_seq=479 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999460 adj=49999399 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3642 bytes_read=45530 bytes_retransmit=9 bytes_invalid=0 send_seq=520 receive_seq=520 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999441 adj=63999424 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2550 bytes_read=130990 bytes_retransmit=0 bytes_invalid=0 send_seq=425 receive_seq=425 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999774 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.33 cputime=15.916 memavail=3405612 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 396.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5845 bytes_read=49400 bytes_retransmit=9 bytes_invalid=0 send_seq=668 receive_seq=668 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000546 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=3036 bytes_read=11489 bytes_retransmit=0 bytes_invalid=0 send_seq=480 receive_seq=480 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999465 adj=49999380 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3648 bytes_read=45637 bytes_retransmit=9 bytes_invalid=0 send_seq=521 receive_seq=521 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999370 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2556 bytes_read=131335 bytes_retransmit=0 bytes_invalid=0 send_seq=426 receive_seq=426 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999729 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.33 cputime=15.965 memavail=3405148 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000
Stats 397.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5851 bytes_read=49503 bytes_retransmit=9 bytes_invalid=0 send_seq=669 receive_seq=669 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=3042 bytes_read=11505 bytes_retransmit=0 bytes_invalid=0 send_seq=481 receive_seq=481 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999472 adj=49999418 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3654 bytes_read=45762 bytes_retransmit=9 bytes_invalid=0 send_seq=522 receive_seq=522 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999447 adj=63999351 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2562 bytes_read=131679 bytes_retransmit=0 bytes_invalid=0 send_seq=427 receive_seq=427 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999702 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.33 cputime=16.015 memavail=3404936 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 398.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5857 bytes_read=49641 bytes_retransmit=9 bytes_invalid=0 send_seq=670 receive_seq=670 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=3048 bytes_read=11521 bytes_retransmit=0 bytes_invalid=0 send_seq=482 receive_seq=482 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999476 adj=49999403 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3660 bytes_read=45862 bytes_retransmit=9 bytes_invalid=0 send_seq=523 receive_seq=523 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999265 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2568 bytes_read=132024 bytes_retransmit=0 bytes_invalid=0 send_seq=428 receive_seq=428 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999642 coil_temp=22.5 refs=0 mcu_temp=22.86 supply_voltage=2.977 sysload=0.33 cputime=16.064 memavail=3404936 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 399.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5863 bytes_read=49741 bytes_retransmit=9 bytes_invalid=0 send_seq=671 receive_seq=671 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=3054 bytes_read=11537 bytes_retransmit=0 bytes_invalid=0 send_seq=483 receive_seq=483 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999480 adj=49999439 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3666 bytes_read=45962 bytes_retransmit=9 bytes_invalid=0 send_seq=524 receive_seq=524 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999239 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2574 bytes_read=132369 bytes_retransmit=0 bytes_invalid=0 send_seq=429 receive_seq=429 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999635 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.33 cputime=16.111 memavail=3404936 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 400.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5869 bytes_read=49844 bytes_retransmit=9 bytes_invalid=0 send_seq=672 receive_seq=672 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=3060 bytes_read=11553 bytes_retransmit=0 bytes_invalid=0 send_seq=484 receive_seq=484 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999484 adj=49999468 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3672 bytes_read=46090 bytes_retransmit=9 bytes_invalid=0 send_seq=525 receive_seq=525 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999445 adj=63999224 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2580 bytes_read=132714 bytes_retransmit=0 bytes_invalid=0 send_seq=430 receive_seq=430 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999643 coil_temp=22.5 refs=0 mcu_temp=22.86 supply_voltage=2.977 sysload=0.31 cputime=16.160 memavail=3404936 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 401.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5875 bytes_read=49976 bytes_retransmit=9 bytes_invalid=0 send_seq=673 receive_seq=673 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 bytes_write=3066 bytes_read=11569 bytes_retransmit=0 bytes_invalid=0 send_seq=485 receive_seq=485 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999488 adj=49999488 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3678 bytes_read=46204 bytes_retransmit=9 bytes_invalid=0 send_seq=526 receive_seq=526 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999459 adj=63999217 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2586 bytes_read=133059 bytes_retransmit=0 bytes_invalid=0 send_seq=431 receive_seq=431 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999642 coil_temp=22.5 refs=0 mcu_temp=22.86 supply_voltage=2.977 sysload=0.31 cputime=16.209 memavail=3404936 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 402.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5881 bytes_read=50079 bytes_retransmit=9 bytes_invalid=0 send_seq=674 receive_seq=674 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000572 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 bytes_write=3072 bytes_read=11598 bytes_retransmit=0 bytes_invalid=0 send_seq=486 receive_seq=486 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999491 adj=49999513 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3684 bytes_read=46304 bytes_retransmit=9 bytes_invalid=0 send_seq=527 receive_seq=527 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999457 adj=63999437 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2592 bytes_read=133404 bytes_retransmit=0 bytes_invalid=0 send_seq=432 receive_seq=432 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999635 coil_temp=22.5 refs=0 mcu_temp=22.85 supply_voltage=2.977 sysload=0.31 cputime=16.257 memavail=3403692 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 403.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5887 bytes_read=50182 bytes_retransmit=9 bytes_invalid=0 send_seq=675 receive_seq=675 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 bytes_write=3078 bytes_read=11614 bytes_retransmit=0 bytes_invalid=0 send_seq=487 receive_seq=487 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999495 adj=49999508 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3690 bytes_read=46432 bytes_retransmit=9 bytes_invalid=0 send_seq=528 receive_seq=528 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999455 adj=63999359 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2598 bytes_read=133749 bytes_retransmit=0 bytes_invalid=0 send_seq=433 receive_seq=433 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999640 coil_temp=22.5 refs=0 mcu_temp=22.86 supply_voltage=2.977 sysload=0.31 cputime=16.306 memavail=3403716 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 404.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5893 bytes_read=50328 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=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 bytes_write=3084 bytes_read=11630 bytes_retransmit=0 bytes_invalid=0 send_seq=488 receive_seq=488 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999497 adj=49999531 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3696 bytes_read=46532 bytes_retransmit=9 bytes_invalid=0 send_seq=529 receive_seq=529 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999454 adj=63999299 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2604 bytes_read=134103 bytes_retransmit=0 bytes_invalid=0 send_seq=434 receive_seq=434 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999662 coil_temp=22.5 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.31 cputime=16.355 memavail=3403716 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 405.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5899 bytes_read=50431 bytes_retransmit=9 bytes_invalid=0 send_seq=677 receive_seq=677 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000572 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 bytes_write=3090 bytes_read=11646 bytes_retransmit=0 bytes_invalid=0 send_seq=489 receive_seq=489 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999500 adj=49999513 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3702 bytes_read=46632 bytes_retransmit=9 bytes_invalid=0 send_seq=530 receive_seq=530 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999452 adj=63999263 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2610 bytes_read=134459 bytes_retransmit=0 bytes_invalid=0 send_seq=435 receive_seq=435 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999658 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.28 cputime=16.386 memavail=3405236 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 406.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5905 bytes_read=50534 bytes_retransmit=9 bytes_invalid=0 send_seq=678 receive_seq=678 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 bytes_write=3096 bytes_read=11662 bytes_retransmit=0 bytes_invalid=0 send_seq=490 receive_seq=490 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999500 adj=49999505 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3708 bytes_read=46774 bytes_retransmit=9 bytes_invalid=0 send_seq=531 receive_seq=531 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999454 adj=63999236 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2616 bytes_read=134815 bytes_retransmit=0 bytes_invalid=0 send_seq=436 receive_seq=436 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999652 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.28 cputime=16.410 memavail=3405236 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 407.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5917 bytes_read=50682 bytes_retransmit=9 bytes_invalid=0 send_seq=680 receive_seq=680 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000564 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000020 bytes_write=3108 bytes_read=11707 bytes_retransmit=0 bytes_invalid=0 send_seq=492 receive_seq=492 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999511 adj=49999490 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3720 bytes_read=46890 bytes_retransmit=9 bytes_invalid=0 send_seq=533 receive_seq=533 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999448 adj=63999281 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2628 bytes_read=135187 bytes_retransmit=0 bytes_invalid=0 send_seq=438 receive_seq=438 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999649 coil_temp=22.5 refs=0 mcu_temp=22.88 supply_voltage=2.977 sysload=0.28 cputime=16.434 memavail=3405236 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 408.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5923 bytes_read=50785 bytes_retransmit=9 bytes_invalid=0 send_seq=681 receive_seq=681 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000562 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000020 bytes_write=3114 bytes_read=11723 bytes_retransmit=0 bytes_invalid=0 send_seq=493 receive_seq=493 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999512 adj=49999641 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3726 bytes_read=46990 bytes_retransmit=9 bytes_invalid=0 send_seq=534 receive_seq=534 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999450 adj=63999227 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2634 bytes_read=135543 bytes_retransmit=0 bytes_invalid=0 send_seq=439 receive_seq=439 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999668 coil_temp=22.5 refs=0 mcu_temp=22.89 supply_voltage=2.978 sysload=0.28 cputime=16.458 memavail=3404228 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 409.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5929 bytes_read=50902 bytes_retransmit=9 bytes_invalid=0 send_seq=682 receive_seq=682 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000560 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000020 bytes_write=3120 bytes_read=11739 bytes_retransmit=0 bytes_invalid=0 send_seq=494 receive_seq=494 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999512 adj=49999597 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3732 bytes_read=47118 bytes_retransmit=9 bytes_invalid=0 send_seq=535 receive_seq=535 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999448 adj=63999273 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2640 bytes_read=135899 bytes_retransmit=0 bytes_invalid=0 send_seq=440 receive_seq=440 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999653 coil_temp=22.5 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.28 cputime=16.481 memavail=3404232 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 410.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5935 bytes_read=51034 bytes_retransmit=9 bytes_invalid=0 send_seq=683 receive_seq=683 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000564 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000020 bytes_write=3126 bytes_read=11755 bytes_retransmit=0 bytes_invalid=0 send_seq=495 receive_seq=495 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999521 adj=49999547 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3738 bytes_read=47218 bytes_retransmit=9 bytes_invalid=0 send_seq=536 receive_seq=536 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999447 adj=63999235 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2646 bytes_read=136255 bytes_retransmit=0 bytes_invalid=0 send_seq=441 receive_seq=441 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999645 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.26 cputime=16.525 memavail=3404232 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 411.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5941 bytes_read=51137 bytes_retransmit=9 bytes_invalid=0 send_seq=684 receive_seq=684 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000020 bytes_write=3132 bytes_read=11771 bytes_retransmit=0 bytes_invalid=0 send_seq=496 receive_seq=496 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999524 adj=49999613 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3744 bytes_read=47332 bytes_retransmit=9 bytes_invalid=0 send_seq=537 receive_seq=537 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999206 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2652 bytes_read=136611 bytes_retransmit=0 bytes_invalid=0 send_seq=442 receive_seq=442 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999635 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.26 cputime=16.574 memavail=3404232 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 412.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5947 bytes_read=51240 bytes_retransmit=9 bytes_invalid=0 send_seq=685 receive_seq=685 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=3138 bytes_read=11800 bytes_retransmit=0 bytes_invalid=0 send_seq=497 receive_seq=497 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999529 adj=49999588 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3750 bytes_read=47460 bytes_retransmit=9 bytes_invalid=0 send_seq=538 receive_seq=538 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999445 adj=63999178 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2658 bytes_read=136967 bytes_retransmit=0 bytes_invalid=0 send_seq=443 receive_seq=443 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999627 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.26 cputime=16.622 memavail=3404232 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 413.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=5953 bytes_read=51372 bytes_retransmit=9 bytes_invalid=0 send_seq=686 receive_seq=686 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=3144 bytes_read=11816 bytes_retransmit=0 bytes_invalid=0 send_seq=498 receive_seq=498 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999531 adj=49999592 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3756 bytes_read=47560 bytes_retransmit=9 bytes_invalid=0 send_seq=539 receive_seq=539 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999161 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2664 bytes_read=137323 bytes_retransmit=0 bytes_invalid=0 send_seq=444 receive_seq=444 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999635 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.26 cputime=16.670 memavail=3404008 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 414.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5959 bytes_read=51489 bytes_retransmit=9 bytes_invalid=0 send_seq=687 receive_seq=687 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=3150 bytes_read=11832 bytes_retransmit=0 bytes_invalid=0 send_seq=499 receive_seq=499 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999536 adj=49999578 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3762 bytes_read=47660 bytes_retransmit=9 bytes_invalid=0 send_seq=540 receive_seq=540 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999166 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2670 bytes_read=137679 bytes_retransmit=0 bytes_invalid=0 send_seq=445 receive_seq=445 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999642 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.26 cputime=16.717 memavail=3404008 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 415.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5965 bytes_read=51592 bytes_retransmit=9 bytes_invalid=0 send_seq=688 receive_seq=688 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=3156 bytes_read=11848 bytes_retransmit=0 bytes_invalid=0 send_seq=500 receive_seq=500 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999539 adj=49999608 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3768 bytes_read=47788 bytes_retransmit=9 bytes_invalid=0 send_seq=541 receive_seq=541 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999441 adj=63999164 Octopus_V1.1_F446: temp=24.5 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2676 bytes_read=138019 bytes_retransmit=0 bytes_invalid=0 send_seq=446 receive_seq=446 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999648 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.24 cputime=16.766 memavail=3404008 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 416.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5971 bytes_read=51724 bytes_retransmit=9 bytes_invalid=0 send_seq=689 receive_seq=689 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=3162 bytes_read=11864 bytes_retransmit=0 bytes_invalid=0 send_seq=501 receive_seq=501 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999543 adj=49999592 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3774 bytes_read=47902 bytes_retransmit=9 bytes_invalid=0 send_seq=542 receive_seq=542 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999166 Octopus_V1.1_F446: temp=24.8 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2682 bytes_read=138375 bytes_retransmit=0 bytes_invalid=0 send_seq=447 receive_seq=447 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999649 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.24 cputime=16.814 memavail=3404032 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 417.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5977 bytes_read=51827 bytes_retransmit=9 bytes_invalid=0 send_seq=690 receive_seq=690 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 bytes_write=3168 bytes_read=11893 bytes_retransmit=0 bytes_invalid=0 send_seq=502 receive_seq=502 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999562 adj=49999606 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3780 bytes_read=48002 bytes_retransmit=9 bytes_invalid=0 send_seq=543 receive_seq=543 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999439 adj=63999170 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2688 bytes_read=138731 bytes_retransmit=0 bytes_invalid=0 send_seq=448 receive_seq=448 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999650 coil_temp=22.6 refs=0 mcu_temp=22.89 supply_voltage=2.977 sysload=0.24 cputime=16.862 memavail=3404032 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 418.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5983 bytes_read=51930 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=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 bytes_write=3174 bytes_read=11909 bytes_retransmit=0 bytes_invalid=0 send_seq=503 receive_seq=503 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999577 adj=49999843 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3786 bytes_read=48130 bytes_retransmit=9 bytes_invalid=0 send_seq=544 receive_seq=544 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999439 adj=63999168 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2694 bytes_read=139087 bytes_retransmit=0 bytes_invalid=0 send_seq=449 receive_seq=449 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999644 coil_temp=22.6 refs=0 mcu_temp=22.89 supply_voltage=2.977 sysload=0.24 cputime=16.911 memavail=3404032 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 419.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5989 bytes_read=52076 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=180000575 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 bytes_write=3180 bytes_read=11925 bytes_retransmit=0 bytes_invalid=0 send_seq=504 receive_seq=504 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999581 adj=49999956 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3792 bytes_read=48230 bytes_retransmit=9 bytes_invalid=0 send_seq=545 receive_seq=545 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999187 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2700 bytes_read=139443 bytes_retransmit=0 bytes_invalid=0 send_seq=450 receive_seq=450 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999641 coil_temp=22.6 refs=0 mcu_temp=22.89 supply_voltage=2.978 sysload=0.24 cputime=16.960 memavail=3404032 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 420.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=5995 bytes_read=52179 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=180000577 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 bytes_write=3186 bytes_read=11941 bytes_retransmit=0 bytes_invalid=0 send_seq=505 receive_seq=505 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999585 adj=49999871 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3798 bytes_read=48330 bytes_retransmit=9 bytes_invalid=0 send_seq=546 receive_seq=546 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999190 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2706 bytes_read=139799 bytes_retransmit=0 bytes_invalid=0 send_seq=451 receive_seq=451 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999637 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.22 cputime=17.007 memavail=3403780 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 421.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6001 bytes_read=52282 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=180000582 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 bytes_write=3192 bytes_read=11957 bytes_retransmit=0 bytes_invalid=0 send_seq=506 receive_seq=506 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999586 adj=49999807 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3804 bytes_read=48472 bytes_retransmit=9 bytes_invalid=0 send_seq=547 receive_seq=547 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999227 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2712 bytes_read=140155 bytes_retransmit=0 bytes_invalid=0 send_seq=452 receive_seq=452 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999643 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.22 cputime=17.056 memavail=3403808 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 422.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6007 bytes_read=52405 bytes_retransmit=9 bytes_invalid=0 send_seq=695 receive_seq=695 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000577 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3198 bytes_read=11986 bytes_retransmit=0 bytes_invalid=0 send_seq=507 receive_seq=507 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999582 adj=49999715 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3810 bytes_read=48572 bytes_retransmit=9 bytes_invalid=0 send_seq=548 receive_seq=548 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999200 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2718 bytes_read=140511 bytes_retransmit=0 bytes_invalid=0 send_seq=453 receive_seq=453 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999637 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.22 cputime=17.092 memavail=3403976 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 423.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6013 bytes_read=52506 bytes_retransmit=9 bytes_invalid=0 send_seq=696 receive_seq=696 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000577 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3204 bytes_read=12002 bytes_retransmit=0 bytes_invalid=0 send_seq=508 receive_seq=508 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999578 adj=49999598 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3816 bytes_read=48672 bytes_retransmit=9 bytes_invalid=0 send_seq=549 receive_seq=549 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999194 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2724 bytes_read=140885 bytes_retransmit=0 bytes_invalid=0 send_seq=454 receive_seq=454 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999653 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.22 cputime=17.117 memavail=3403976 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 424.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6019 bytes_read=52623 bytes_retransmit=9 bytes_invalid=0 send_seq=697 receive_seq=697 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3210 bytes_read=12018 bytes_retransmit=0 bytes_invalid=0 send_seq=509 receive_seq=509 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999575 adj=49999494 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3822 bytes_read=48800 bytes_retransmit=9 bytes_invalid=0 send_seq=550 receive_seq=550 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999439 adj=63999235 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2730 bytes_read=141241 bytes_retransmit=0 bytes_invalid=0 send_seq=455 receive_seq=455 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999762 adj=31999671 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.22 cputime=17.140 memavail=3403976 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 425.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6025 bytes_read=52755 bytes_retransmit=9 bytes_invalid=0 send_seq=698 receive_seq=698 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3216 bytes_read=12034 bytes_retransmit=0 bytes_invalid=0 send_seq=510 receive_seq=510 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999571 adj=49999436 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3828 bytes_read=48900 bytes_retransmit=9 bytes_invalid=0 send_seq=551 receive_seq=551 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999437 adj=63999224 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2736 bytes_read=141597 bytes_retransmit=0 bytes_invalid=0 send_seq=456 receive_seq=456 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999761 adj=31999668 coil_temp=22.6 refs=0 mcu_temp=22.90 supply_voltage=2.978 sysload=0.20 cputime=17.164 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 426.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6031 bytes_read=52858 bytes_retransmit=9 bytes_invalid=0 send_seq=699 receive_seq=699 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000563 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3222 bytes_read=12050 bytes_retransmit=0 bytes_invalid=0 send_seq=511 receive_seq=511 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999568 adj=49999400 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3834 bytes_read=49014 bytes_retransmit=9 bytes_invalid=0 send_seq=552 receive_seq=552 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999215 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2742 bytes_read=141953 bytes_retransmit=0 bytes_invalid=0 send_seq=457 receive_seq=457 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999760 adj=31999668 coil_temp=22.6 refs=0 mcu_temp=22.91 supply_voltage=2.978 sysload=0.20 cputime=17.188 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 427.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6037 bytes_read=52961 bytes_retransmit=9 bytes_invalid=0 send_seq=700 receive_seq=700 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000566 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3228 bytes_read=12079 bytes_retransmit=0 bytes_invalid=0 send_seq=512 receive_seq=512 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999571 adj=49999373 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3840 bytes_read=49142 bytes_retransmit=9 bytes_invalid=0 send_seq=553 receive_seq=553 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999285 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2748 bytes_read=142309 bytes_retransmit=0 bytes_invalid=0 send_seq=458 receive_seq=458 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999667 coil_temp=22.6 refs=0 mcu_temp=22.91 supply_voltage=2.978 sysload=0.20 cputime=17.227 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 428.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6043 bytes_read=53093 bytes_retransmit=9 bytes_invalid=0 send_seq=701 receive_seq=701 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000568 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3234 bytes_read=12095 bytes_retransmit=0 bytes_invalid=0 send_seq=513 receive_seq=513 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999577 adj=49999409 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3846 bytes_read=49242 bytes_retransmit=9 bytes_invalid=0 send_seq=554 receive_seq=554 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999253 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2754 bytes_read=142665 bytes_retransmit=0 bytes_invalid=0 send_seq=459 receive_seq=459 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999696 coil_temp=22.6 refs=0 mcu_temp=22.91 supply_voltage=2.978 sysload=0.20 cputime=17.276 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 429.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6049 bytes_read=53210 bytes_retransmit=9 bytes_invalid=0 send_seq=702 receive_seq=702 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3240 bytes_read=12111 bytes_retransmit=0 bytes_invalid=0 send_seq=514 receive_seq=514 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999579 adj=49999492 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3852 bytes_read=49342 bytes_retransmit=9 bytes_invalid=0 send_seq=555 receive_seq=555 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999305 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2760 bytes_read=143021 bytes_retransmit=0 bytes_invalid=0 send_seq=460 receive_seq=460 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999738 coil_temp=22.6 refs=0 mcu_temp=22.91 supply_voltage=2.978 sysload=0.20 cputime=17.324 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 430.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6055 bytes_read=53313 bytes_retransmit=9 bytes_invalid=0 send_seq=703 receive_seq=703 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3246 bytes_read=12127 bytes_retransmit=0 bytes_invalid=0 send_seq=515 receive_seq=515 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999579 adj=49999497 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3858 bytes_read=49470 bytes_retransmit=9 bytes_invalid=0 send_seq=556 receive_seq=556 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999270 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2766 bytes_read=143393 bytes_retransmit=0 bytes_invalid=0 send_seq=461 receive_seq=461 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999710 coil_temp=22.6 refs=0 mcu_temp=22.91 supply_voltage=2.978 sysload=0.18 cputime=17.375 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 431.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6061 bytes_read=53445 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=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=3252 bytes_read=12143 bytes_retransmit=0 bytes_invalid=0 send_seq=516 receive_seq=516 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999581 adj=49999484 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3864 bytes_read=49570 bytes_retransmit=9 bytes_invalid=0 send_seq=557 receive_seq=557 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999441 adj=63999248 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2772 bytes_read=143749 bytes_retransmit=0 bytes_invalid=0 send_seq=462 receive_seq=462 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999689 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.18 cputime=17.423 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 432.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6067 bytes_read=53548 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=180000570 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3258 bytes_read=12172 bytes_retransmit=0 bytes_invalid=0 send_seq=517 receive_seq=517 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999583 adj=49999492 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3870 bytes_read=49698 bytes_retransmit=9 bytes_invalid=0 send_seq=558 receive_seq=558 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999226 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2778 bytes_read=144105 bytes_retransmit=0 bytes_invalid=0 send_seq=463 receive_seq=463 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999706 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.18 cputime=17.472 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 433.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6073 bytes_read=53651 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=180000575 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3264 bytes_read=12188 bytes_retransmit=0 bytes_invalid=0 send_seq=518 receive_seq=518 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999586 adj=49999513 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3876 bytes_read=49812 bytes_retransmit=9 bytes_invalid=0 send_seq=559 receive_seq=559 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999279 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2784 bytes_read=144461 bytes_retransmit=0 bytes_invalid=0 send_seq=464 receive_seq=464 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999692 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.18 cputime=17.523 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 434.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6079 bytes_read=53797 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=180000580 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3270 bytes_read=12204 bytes_retransmit=0 bytes_invalid=0 send_seq=519 receive_seq=519 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999588 adj=49999514 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3882 bytes_read=49912 bytes_retransmit=9 bytes_invalid=0 send_seq=560 receive_seq=560 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999445 adj=63999261 Octopus_V1.1_F446: temp=24.8 EBB42_v1.2_T0: temp=28.5 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2790 bytes_read=144817 bytes_retransmit=0 bytes_invalid=0 send_seq=465 receive_seq=465 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999666 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.18 cputime=17.574 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 435.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6085 bytes_read=53900 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=180000583 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3276 bytes_read=12220 bytes_retransmit=0 bytes_invalid=0 send_seq=520 receive_seq=520 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999591 adj=49999508 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3888 bytes_read=50026 bytes_retransmit=9 bytes_invalid=0 send_seq=561 receive_seq=561 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999219 Octopus_V1.1_F446: temp=24.6 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2796 bytes_read=145173 bytes_retransmit=0 bytes_invalid=0 send_seq=466 receive_seq=466 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999645 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.17 cputime=17.625 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 436.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6091 bytes_read=54003 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=180000585 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=3282 bytes_read=12235 bytes_retransmit=0 bytes_invalid=0 send_seq=521 receive_seq=521 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999593 adj=49999516 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3894 bytes_read=50140 bytes_retransmit=9 bytes_invalid=0 send_seq=562 receive_seq=562 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999190 Octopus_V1.1_F446: temp=24.9 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2802 bytes_read=145529 bytes_retransmit=0 bytes_invalid=0 send_seq=467 receive_seq=467 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999632 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.17 cputime=17.673 memavail=3403476 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 437.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6097 bytes_read=54135 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=180000586 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3288 bytes_read=12263 bytes_retransmit=0 bytes_invalid=0 send_seq=522 receive_seq=522 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999605 adj=49999510 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3900 bytes_read=50254 bytes_retransmit=9 bytes_invalid=0 send_seq=563 receive_seq=563 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999187 Octopus_V1.1_F446: temp=24.8 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2808 bytes_read=145885 bytes_retransmit=0 bytes_invalid=0 send_seq=468 receive_seq=468 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999627 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.17 cputime=17.723 memavail=3403256 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 438.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6103 bytes_read=54238 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=180000587 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3294 bytes_read=12278 bytes_retransmit=0 bytes_invalid=0 send_seq=523 receive_seq=523 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999621 adj=49999674 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3906 bytes_read=50368 bytes_retransmit=9 bytes_invalid=0 send_seq=564 receive_seq=564 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999188 Octopus_V1.1_F446: temp=24.8 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2814 bytes_read=146241 bytes_retransmit=0 bytes_invalid=0 send_seq=469 receive_seq=469 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999633 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.17 cputime=17.771 memavail=3403264 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 439.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6109 bytes_read=54355 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=180000588 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3300 bytes_read=12293 bytes_retransmit=0 bytes_invalid=0 send_seq=524 receive_seq=524 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999636 adj=49999871 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3912 bytes_read=50482 bytes_retransmit=9 bytes_invalid=0 send_seq=565 receive_seq=565 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999441 adj=63999181 Octopus_V1.1_F446: temp=24.8 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2820 bytes_read=146597 bytes_retransmit=0 bytes_invalid=0 send_seq=470 receive_seq=470 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999631 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.17 cputime=17.812 memavail=3399500 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 440.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6115 bytes_read=54487 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=180000582 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3306 bytes_read=12308 bytes_retransmit=0 bytes_invalid=0 send_seq=525 receive_seq=525 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999630 adj=49999991 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3918 bytes_read=50582 bytes_retransmit=9 bytes_invalid=0 send_seq=566 receive_seq=566 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999171 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2826 bytes_read=146953 bytes_retransmit=0 bytes_invalid=0 send_seq=471 receive_seq=471 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999630 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.16 cputime=17.833 memavail=3406932 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 441.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6121 bytes_read=54590 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=180000577 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3312 bytes_read=12323 bytes_retransmit=0 bytes_invalid=0 send_seq=526 receive_seq=526 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999625 adj=49999800 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3924 bytes_read=50696 bytes_retransmit=9 bytes_invalid=0 send_seq=567 receive_seq=567 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999235 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2832 bytes_read=147309 bytes_retransmit=0 bytes_invalid=0 send_seq=472 receive_seq=472 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999645 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.16 cputime=17.857 memavail=3406932 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 442.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6127 bytes_read=54693 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=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000021 bytes_write=3318 bytes_read=12352 bytes_retransmit=0 bytes_invalid=0 send_seq=527 receive_seq=527 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999620 adj=49999662 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3930 bytes_read=50824 bytes_retransmit=9 bytes_invalid=0 send_seq=568 receive_seq=568 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999225 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2838 bytes_read=147665 bytes_retransmit=0 bytes_invalid=0 send_seq=473 receive_seq=473 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999659 coil_temp=22.6 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.16 cputime=17.882 memavail=3405420 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 443.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6133 bytes_read=54825 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=180000568 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000021 bytes_write=3324 bytes_read=12368 bytes_retransmit=0 bytes_invalid=0 send_seq=528 receive_seq=528 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999616 adj=49999559 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3936 bytes_read=50924 bytes_retransmit=9 bytes_invalid=0 send_seq=569 receive_seq=569 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999436 adj=63999218 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2844 bytes_read=148021 bytes_retransmit=0 bytes_invalid=0 send_seq=474 receive_seq=474 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999701 coil_temp=22.6 refs=0 mcu_temp=22.93 supply_voltage=2.978 sysload=0.16 cputime=17.905 memavail=3405428 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 444.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6139 bytes_read=54942 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=180000565 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000021 bytes_write=3330 bytes_read=12384 bytes_retransmit=0 bytes_invalid=0 send_seq=529 receive_seq=529 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999613 adj=49999493 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3942 bytes_read=51038 bytes_retransmit=9 bytes_invalid=0 send_seq=570 receive_seq=570 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999434 adj=63999217 Octopus_V1.1_F446: temp=24.8 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2850 bytes_read=148377 bytes_retransmit=0 bytes_invalid=0 send_seq=475 receive_seq=475 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999687 coil_temp=22.6 refs=0 mcu_temp=22.93 supply_voltage=2.978 sysload=0.16 cputime=17.937 memavail=3405428 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 445.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6145 bytes_read=55043 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=180000566 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000021 bytes_write=3336 bytes_read=12400 bytes_retransmit=0 bytes_invalid=0 send_seq=530 receive_seq=530 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999613 adj=49999437 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3948 bytes_read=51152 bytes_retransmit=9 bytes_invalid=0 send_seq=571 receive_seq=571 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999451 adj=63999206 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2856 bytes_read=148717 bytes_retransmit=0 bytes_invalid=0 send_seq=476 receive_seq=476 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999681 coil_temp=22.6 refs=0 mcu_temp=22.93 supply_voltage=2.978 sysload=0.14 cputime=17.984 memavail=3405428 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 446.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6151 bytes_read=55166 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=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000021 bytes_write=3342 bytes_read=12416 bytes_retransmit=0 bytes_invalid=0 send_seq=531 receive_seq=531 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999615 adj=49999448 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=3954 bytes_read=51252 bytes_retransmit=9 bytes_invalid=0 send_seq=572 receive_seq=572 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999450 adj=63999479 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2862 bytes_read=149073 bytes_retransmit=0 bytes_invalid=0 send_seq=477 receive_seq=477 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999666 coil_temp=22.6 refs=0 mcu_temp=22.94 supply_voltage=2.977 sysload=0.14 cputime=18.032 memavail=3405188 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 447.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6157 bytes_read=55268 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=180000568 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000016 bytes_write=3348 bytes_read=12445 bytes_retransmit=0 bytes_invalid=0 send_seq=532 receive_seq=532 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999620 adj=49999467 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3960 bytes_read=51380 bytes_retransmit=9 bytes_invalid=0 send_seq=573 receive_seq=573 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999451 adj=63999396 Octopus_V1.1_F446: temp=24.9 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2868 bytes_read=149429 bytes_retransmit=0 bytes_invalid=0 send_seq=478 receive_seq=478 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999657 coil_temp=22.6 refs=0 mcu_temp=22.94 supply_voltage=2.977 sysload=0.14 cputime=18.080 memavail=3405188 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 448.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=6163 bytes_read=55371 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=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000016 bytes_write=3354 bytes_read=12461 bytes_retransmit=0 bytes_invalid=0 send_seq=533 receive_seq=533 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999621 adj=49999537 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=3966 bytes_read=51494 bytes_retransmit=9 bytes_invalid=0 send_seq=574 receive_seq=574 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999449 adj=63999371 Octopus_V1.1_F446: temp=24.7 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=2874 bytes_read=149785 bytes_retransmit=0 bytes_invalid=0 send_seq=479 receive_seq=479 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999653 coil_temp=22.6 refs=0 mcu_temp=22.94 supply_voltage=2.977 sysload=0.14 cputime=18.129 memavail=3405188 print_time=396.721 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4102846160
Received 33.477090: b'{"id":4081430408,"method":"register_remote_method","params":{"response_template":{"method":"reboot_machine"},"remote_method":"reboot_machine"}}'
Received 33.478356: b'{"id":4081430408,"method":"register_remote_method","params":{"response_template":{"method":"pause_job_queue"},"remote_method":"pause_job_queue"}}'
Received 33.479565: b'{"id":4081430408,"method":"register_remote_method","params":{"response_template":{"method":"start_job_queue"},"remote_method":"start_job_queue"}}'
Received 33.481777: b'{"id":4081426784,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 33.481777: b'{"id":4081426688,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 33.701975: b'{"id":4081426856,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 33.953862: b'{"id":4081427144,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 345.144945: b'{"id":4090756160,"method":"objects/query","params":{"objects":{"gcode":["commands"]}}}'
Received 345.144945: b'{"id":4090753784,"method":"info","params":{}}'
Received 345.144945: b'{"id":4090754792,"method":"objects/list","params":{}}'
Received 345.161772: b'{"id":4090755440,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 345.751709: b'{"id":4090376472,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 375.806415: b'{"id":4090749688,"method":"gcode/script","params":{"script":"M18"}}'
Received 389.321365: b'{"id":4081618008,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 504.998180: b'{"id":4081589528,"method":"objects/query","params":{"objects":{"gcode":["commands"]}}}'
Received 504.998180: b'{"id":4081588304,"method":"info","params":{}}'
Received 504.998180: b'{"id":4081615440,"method":"objects/list","params":{}}'
Received 506.265346: b'{"id":4090252520,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 508.072008: b'{"id":4090615504,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 514.901580: b'{"id":4081671304,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 X-10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=25304737199 clock_est=(485.549 23877235650 49999669.155) min_half_rtt=0.000053 min_rtt_time=304.415 time_avg=485.549(843.161) clock_avg=23877235650.359(42157758335.875) pred_variance=11934300.145 clock_adj=(15.145 49999518.750)
Dumping serial stats: bytes_write=3762 bytes_read=13714 bytes_retransmit=0 bytes_invalid=0 send_seq=601 receive_seq=601 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 417.622016 417.622016 6: seq: 15, get_clock
Sent 1 418.606289 418.606289 6: seq: 16, get_clock
Sent 2 419.591435 419.591435 6: seq: 17, get_clock
Sent 3 420.576443 420.576443 6: seq: 18, get_clock
Sent 4 421.560573 421.560573 6: seq: 19, get_clock
Sent 5 422.544718 422.544718 6: seq: 1a, get_clock
Sent 6 423.528805 423.528805 6: seq: 1b, get_clock
Sent 7 424.513094 424.513094 6: seq: 1c, get_clock
Sent 8 425.497415 425.497415 6: seq: 1d, get_clock
Sent 9 426.481479 426.481479 6: seq: 1e, get_clock
Sent 10 427.466440 427.466440 6: seq: 1f, get_clock
Sent 11 428.450720 428.450720 6: seq: 10, get_clock
Sent 12 429.434983 429.434983 6: seq: 11, get_clock
Sent 13 430.419186 430.419186 6: seq: 12, get_clock
Sent 14 431.403891 431.403891 6: seq: 13, get_clock
Sent 15 432.387970 432.387970 6: seq: 14, get_clock
Sent 16 433.372542 433.372542 6: seq: 15, get_clock
Sent 17 434.357362 434.357362 6: seq: 16, get_clock
Sent 18 435.341701 435.341701 6: seq: 17, get_clock
Sent 19 436.326260 436.326260 6: seq: 18, get_clock
Sent 20 437.310876 437.310876 6: seq: 19, get_clock
Sent 21 438.295084 438.295084 6: seq: 1a, get_clock
Sent 22 439.279264 439.279264 6: seq: 1b, get_clock
Sent 23 440.263714 440.263714 6: seq: 1c, get_clock
Sent 24 441.248063 441.248063 6: seq: 1d, get_clock
Sent 25 442.232344 442.232344 6: seq: 1e, get_clock
Sent 26 443.216646 443.216646 6: seq: 1f, get_clock
Sent 27 444.201588 444.201588 6: seq: 10, get_clock
Sent 28 445.186286 445.186286 6: seq: 11, get_clock
Sent 29 446.170525 446.170525 6: seq: 12, get_clock
Sent 30 447.155446 447.155446 6: seq: 13, get_clock
Sent 31 448.139530 448.139530 6: seq: 14, get_clock
Sent 32 449.124278 449.124278 6: seq: 15, get_clock
Sent 33 450.108880 450.108880 6: seq: 16, get_clock
Sent 34 451.093475 451.093475 6: seq: 17, get_clock
Sent 35 452.077707 452.077707 6: seq: 18, get_clock
Sent 36 453.062189 453.062189 6: seq: 19, get_clock
Sent 37 454.046282 454.046282 6: seq: 1a, get_clock
Sent 38 455.030393 455.030393 6: seq: 1b, get_clock
Sent 39 456.014715 456.014715 6: seq: 1c, get_clock
Sent 40 456.999410 456.999410 6: seq: 1d, get_clock
Sent 41 457.983545 457.983545 6: seq: 1e, get_clock
Sent 42 458.967680 458.967680 6: seq: 1f, get_clock
Sent 43 459.951968 459.951968 6: seq: 10, get_clock
Sent 44 460.936846 460.936846 6: seq: 11, get_clock
Sent 45 461.922088 461.922088 6: seq: 12, get_clock
Sent 46 462.907110 462.907110 6: seq: 13, get_clock
Sent 47 463.892286 463.892286 6: seq: 14, get_clock
Sent 48 464.876378 464.876378 6: seq: 15, get_clock
Sent 49 465.860796 465.860796 6: seq: 16, get_clock
Sent 50 466.846030 466.846030 6: seq: 17, get_clock
Sent 51 467.829847 467.829847 6: seq: 18, get_clock
Sent 52 468.814107 468.814107 6: seq: 19, get_clock
Sent 53 469.798320 469.798320 6: seq: 1a, get_clock
Sent 54 470.782500 470.782500 6: seq: 1b, get_clock
Sent 55 471.766693 471.766693 6: seq: 1c, get_clock
Sent 56 472.750964 472.750964 6: seq: 1d, get_clock
Sent 57 473.735236 473.735236 6: seq: 1e, get_clock
Sent 58 474.719958 474.719958 6: seq: 1f, get_clock
Sent 59 475.704735 475.704735 6: seq: 10, get_clock
Sent 60 476.688987 476.688987 6: seq: 11, get_clock
Sent 61 477.673388 477.673388 6: seq: 12, get_clock
Sent 62 478.657496 478.657496 6: seq: 13, get_clock
Sent 63 479.642554 479.642554 6: seq: 14, get_clock
Sent 64 480.626712 480.626712 6: seq: 15, get_clock
Sent 65 481.611790 481.611790 6: seq: 16, get_clock
Sent 66 482.595886 482.595886 6: seq: 17, get_clock
Sent 67 483.580311 483.580311 6: seq: 18, get_clock
Sent 68 484.564107 484.564107 6: seq: 19, get_clock
Sent 69 485.548394 485.548394 6: seq: 1a, get_clock
Sent 70 486.533130 486.533130 6: seq: 1b, get_clock
Sent 71 487.518284 487.518284 6: seq: 1c, get_clock
Sent 72 488.502095 488.502095 6: seq: 1d, get_clock
Sent 73 489.485902 489.485902 6: seq: 1e, get_clock
Sent 74 490.470009 490.470009 6: seq: 1f, get_clock
Sent 75 491.453937 491.453937 6: seq: 10, get_clock
Sent 76 492.438871 492.438871 6: seq: 11, get_clock
Sent 77 493.423139 493.423139 6: seq: 12, get_clock
Sent 78 494.407581 494.407581 6: seq: 13, get_clock
Sent 79 495.391918 495.391918 6: seq: 14, get_clock
Sent 80 496.377618 496.377618 6: seq: 15, get_clock
Sent 81 497.361249 497.361249 6: seq: 16, get_clock
Sent 82 498.345596 498.345596 6: seq: 17, get_clock
Sent 83 499.329838 499.329838 6: seq: 18, get_clock
Sent 84 500.314640 500.314640 6: seq: 19, get_clock
Sent 85 501.302835 501.302835 6: seq: 1a, get_clock
Sent 86 502.286760 502.286760 6: seq: 1b, get_clock
Sent 87 503.270849 503.270849 6: seq: 1c, get_clock
Sent 88 504.255249 504.255249 6: seq: 1d, get_clock
Sent 89 505.239607 505.239607 6: seq: 1e, get_clock
Sent 90 506.223885 506.223885 6: seq: 1f, get_clock
Sent 91 507.208500 507.208500 6: seq: 10, get_clock
Sent 92 508.193204 508.193204 6: seq: 11, get_clock
Sent 93 509.177307 509.177307 6: seq: 12, get_clock
Sent 94 510.161821 510.161821 6: seq: 13, get_clock
Sent 95 511.145840 511.145840 6: seq: 14, get_clock
Sent 96 512.130170 512.130170 6: seq: 15, get_clock
Sent 97 513.114380 513.114380 6: seq: 16, get_clock
Sent 98 514.099524 514.099524 6: seq: 17, get_clock
Sent 99 515.038720 515.038720 6: seq: 18, emergency_stop
Dumping receive queue 100 messages
Receive: 0 433.372846 433.372542 11: seq: 16, clock clock=4088542112
Receive: 1 434.357750 434.357362 11: seq: 17, clock clock=4137782205
Receive: 2 435.341990 435.341701 11: seq: 18, clock clock=4186999463
Receive: 3 436.326535 436.326260 10: seq: 19, clock clock=4236226024
Receive: 4 437.105144 436.326260 13: seq: 19, stats count=55 sum=54693 sumsq=443673
Receive: 5 437.311400 437.310876 10: seq: 1a, clock clock=4285465864
Receive: 6 438.295666 438.295084 10: seq: 1b, clock clock=39713032
Receive: 7 439.279833 439.279264 10: seq: 1c, clock clock=88921002
Receive: 8 440.263839 440.263714 10: seq: 1d, clock clock=138126338
Receive: 9 441.248182 441.248063 10: seq: 1e, clock clock=187343403
Receive: 10 442.204680 441.248063 13: seq: 1e, stats count=56 sum=44463 sumsq=377225
Receive: 11 442.232481 442.232344 11: seq: 1f, clock clock=236557189
Receive: 12 443.216795 443.216646 11: seq: 10, clock clock=285772132
Receive: 13 444.201748 444.201588 11: seq: 11, clock clock=335018849
Receive: 14 445.186538 445.186286 11: seq: 12, clock clock=384257098
Receive: 15 446.170792 446.170525 11: seq: 13, clock clock=433469486
Receive: 16 447.155806 447.155446 11: seq: 14, clock clock=482718123
Receive: 17 447.204816 447.155446 13: seq: 14, stats count=56 sum=42577 sumsq=274536
Receive: 18 448.139799 448.139530 11: seq: 15, clock clock=531918894
Receive: 19 449.124579 449.124278 11: seq: 16, clock clock=581156783
Receive: 20 450.109187 450.108880 11: seq: 17, clock clock=630387830
Receive: 21 451.093747 451.093475 11: seq: 18, clock clock=679613527
Receive: 22 452.077978 452.077707 11: seq: 19, clock clock=728825752
Receive: 23 452.204908 452.077707 13: seq: 19, stats count=55 sum=53671 sumsq=417948
Receive: 24 453.062463 453.062189 11: seq: 1a, clock clock=778050271
Receive: 25 454.046546 454.046282 11: seq: 1b, clock clock=827254027
Receive: 26 455.030679 455.030393 11: seq: 1c, clock clock=876461637
Receive: 27 456.015490 456.014715 11: seq: 1d, clock clock=925697635
Receive: 28 456.999543 456.999410 11: seq: 1e, clock clock=974906735
Receive: 29 457.304785 456.999410 13: seq: 1e, stats count=56 sum=49491 sumsq=343097
Receive: 30 457.983711 457.983545 11: seq: 1f, clock clock=1024114989
Receive: 31 458.967806 458.967680 11: seq: 10, clock clock=1073319552
Receive: 32 459.952102 459.951968 11: seq: 11, clock clock=1122533856
Receive: 33 460.937039 460.936846 11: seq: 12, clock clock=1171780581
Receive: 34 461.922495 461.922088 11: seq: 13, clock clock=1221047440
Receive: 35 462.304996 461.922088 13: seq: 13, stats count=55 sum=30971 sumsq=164173
Receive: 36 462.907381 462.907110 11: seq: 14, clock clock=1270293343
Receive: 37 463.892645 463.892286 11: seq: 15, clock clock=1319553068
Receive: 38 464.876672 464.876378 11: seq: 16, clock clock=1368756297
Receive: 39 465.861096 465.860796 11: seq: 17, clock clock=1417977395
Receive: 40 466.846348 466.846030 11: seq: 18, clock clock=1467237547
Receive: 41 467.405020 466.846030 13: seq: 18, stats count=56 sum=55654 sumsq=465482
Receive: 42 467.830121 467.829847 11: seq: 19, clock clock=1516428762
Receive: 43 468.814401 468.814107 11: seq: 1a, clock clock=1565642363
Receive: 44 469.798584 469.798320 11: seq: 1b, clock clock=1614852083
Receive: 45 470.782808 470.782500 11: seq: 1c, clock clock=1664060537
Receive: 46 471.766966 471.766693 11: seq: 1d, clock clock=1713271020
Receive: 47 472.405052 471.766693 13: seq: 1d, stats count=55 sum=54624 sumsq=432033
Receive: 48 472.751376 472.750964 11: seq: 1e, clock clock=1762486619
Receive: 49 473.735663 473.735236 11: seq: 1f, clock clock=1811700404
Receive: 50 474.720179 474.719958 11: seq: 10, clock clock=1860931232
Receive: 51 475.704895 475.704735 11: seq: 11, clock clock=1910169165
Receive: 52 476.689118 476.688987 11: seq: 12, clock clock=1959378739
Receive: 53 477.504926 476.688987 13: seq: 12, stats count=56 sum=37609 sumsq=258032
Receive: 54 477.673565 477.673388 11: seq: 13, clock clock=2008600561
Receive: 55 478.657618 478.657496 11: seq: 14, clock clock=2057803393
Receive: 56 479.642833 479.642554 11: seq: 15, clock clock=2107061034
Receive: 57 480.626947 480.626712 11: seq: 16, clock clock=2156267416
Receive: 58 481.612060 481.611790 11: seq: 17, clock clock=2205521803
Receive: 59 482.505163 481.611790 13: seq: 17, stats count=55 sum=44441 sumsq=292917
Receive: 60 482.596128 482.595886 11: seq: 18, clock clock=2254725916
Receive: 61 483.580554 483.580311 11: seq: 19, clock clock=2303946868
Receive: 62 484.564493 484.564107 11: seq: 1a, clock clock=2353136691
Receive: 63 485.548788 485.548394 11: seq: 1b, clock clock=2402349722
Receive: 64 486.533383 486.533130 11: seq: 1c, clock clock=2451586818
Receive: 65 487.518643 487.518284 11: seq: 1d, clock clock=2500845183
Receive: 66 487.518673 487.518284 13: seq: 1d, stats count=56 sum=57065 sumsq=514756
Receive: 67 488.502440 488.502095 11: seq: 1e, clock clock=2550035737
Receive: 68 489.486300 489.485902 11: seq: 1f, clock clock=2599226202
Receive: 69 490.470316 490.470009 11: seq: 10, clock clock=2648432288
Receive: 70 491.454072 491.453937 11: seq: 11, clock clock=2697623249
Receive: 71 492.439003 492.438871 11: seq: 12, clock clock=2746869480
Receive: 72 492.605008 492.438871 13: seq: 12, stats count=56 sum=46322 sumsq=324348
Receive: 73 493.423266 493.423139 11: seq: 13, clock clock=2796082250
Receive: 74 494.407700 494.407581 11: seq: 14, clock clock=2845303806
Receive: 75 495.392038 495.391918 11: seq: 15, clock clock=2894520488
Receive: 76 496.377953 496.377618 11: seq: 16, clock clock=2943813126
Receive: 77 497.361756 497.361249 11: seq: 17, clock clock=2992990087
Receive: 78 497.605173 497.361249 13: seq: 17, stats count=55 sum=36038 sumsq=235930
Receive: 79 498.346034 498.345596 11: seq: 18, clock clock=3042208137
Receive: 80 499.330270 499.329838 11: seq: 19, clock clock=3091419798
Receive: 81 500.314922 500.314640 11: seq: 1a, clock clock=3140659439
Receive: 82 501.303221 501.302835 11: seq: 1b, clock clock=3190069542
Receive: 83 502.286937 502.286760 11: seq: 1c, clock clock=3239260788
Receive: 84 502.705018 502.286760 13: seq: 1c, stats count=56 sum=52097 sumsq=404774
Receive: 85 503.271007 503.270849 11: seq: 1d, clock clock=3288464551
Receive: 86 504.255601 504.255249 11: seq: 1e, clock clock=3337694484
Receive: 87 505.239773 505.239607 11: seq: 1f, clock clock=3386903043
Receive: 88 506.224226 506.223885 11: seq: 10, clock clock=3436125446
Receive: 89 507.208735 507.208500 11: seq: 11, clock clock=3485349237
Receive: 90 507.705257 507.208500 13: seq: 11, stats count=55 sum=31307 sumsq=148201
Receive: 91 508.193465 508.193204 11: seq: 12, clock clock=3534585460
Receive: 92 509.177454 509.177307 11: seq: 13, clock clock=3583787464
Receive: 93 510.162012 510.161821 11: seq: 14, clock clock=3633011563
Receive: 94 511.145986 511.145840 11: seq: 15, clock clock=3682212476
Receive: 95 512.130317 512.130170 11: seq: 16, clock clock=3731428619
Receive: 96 512.805084 512.130170 13: seq: 16, stats count=56 sum=31707 sumsq=162870
Receive: 97 513.114486 513.114380 11: seq: 17, clock clock=3780638187
Receive: 98 514.099930 514.099524 11: seq: 18, clock clock=3829900719
Receive: 99 515.039154 515.038720 12: seq: 19, shutdown clock=3876864105 static_string_id=Command request
MCU 'mcu' shutdown: Command request
clocksync state: mcu_freq=180000000 last_clock=93823936442 clock_est=(485.549 88684890839 180000553.180) min_half_rtt=0.000073 min_rtt_time=425.497 time_avg=485.549(843.161) clock_avg=88684890839.879(151769531885.313) pred_variance=16301621.438
Dumping serial stats: bytes_write=6898 bytes_read=63145 bytes_retransmit=9 bytes_invalid=0 send_seq=800 receive_seq=800 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 428.450450 428.450450 6: seq: 1c, get_clock
Sent 1 429.434737 429.434737 6: seq: 1d, get_clock
Sent 2 430.418919 430.418919 6: seq: 1e, get_clock
Sent 3 431.403663 431.403663 6: seq: 1f, get_clock
Sent 4 432.387584 432.387584 6: seq: 10, get_clock
Sent 5 433.372195 433.372195 6: seq: 11, get_clock
Sent 6 434.357051 434.357051 6: seq: 12, get_clock
Sent 7 435.341392 435.341392 6: seq: 13, get_clock
Sent 8 436.325622 436.325622 6: seq: 14, get_clock
Sent 9 437.310606 437.310606 6: seq: 15, get_clock
Sent 10 438.294824 438.294824 6: seq: 16, get_clock
Sent 11 439.279017 439.279017 6: seq: 17, get_clock
Sent 12 440.263682 440.263682 6: seq: 18, get_clock
Sent 13 441.247933 441.247933 6: seq: 19, get_clock
Sent 14 442.232218 442.232218 6: seq: 1a, get_clock
Sent 15 443.216488 443.216488 6: seq: 1b, get_clock
Sent 16 444.201434 444.201434 6: seq: 1c, get_clock
Sent 17 445.185624 445.185624 6: seq: 1d, get_clock
Sent 18 446.170289 446.170289 6: seq: 1e, get_clock
Sent 19 447.155086 447.155086 6: seq: 1f, get_clock
Sent 20 448.139258 448.139258 6: seq: 10, get_clock
Sent 21 449.123888 449.123888 6: seq: 11, get_clock
Sent 22 450.108558 450.108558 6: seq: 12, get_clock
Sent 23 451.093233 451.093233 6: seq: 13, get_clock
Sent 24 452.077495 452.077495 6: seq: 14, get_clock
Sent 25 453.061802 453.061802 6: seq: 15, get_clock
Sent 26 454.045888 454.045888 6: seq: 16, get_clock
Sent 27 455.030166 455.030166 6: seq: 17, get_clock
Sent 28 456.014508 456.014508 6: seq: 18, get_clock
Sent 29 456.999281 456.999281 6: seq: 19, get_clock
Sent 30 457.983460 457.983460 6: seq: 1a, get_clock
Sent 31 458.967647 458.967647 6: seq: 1b, get_clock
Sent 32 459.951857 459.951857 6: seq: 1c, get_clock
Sent 33 460.936762 460.936762 6: seq: 1d, get_clock
Sent 34 461.921912 461.921912 6: seq: 1e, get_clock
Sent 35 462.906853 462.906853 6: seq: 1f, get_clock
Sent 36 463.891581 463.891581 6: seq: 10, get_clock
Sent 37 464.875648 464.875648 6: seq: 11, get_clock
Sent 38 465.860443 465.860443 6: seq: 12, get_clock
Sent 39 466.845324 466.845324 6: seq: 13, get_clock
Sent 40 467.829584 467.829584 6: seq: 14, get_clock
Sent 41 468.813662 468.813662 6: seq: 15, get_clock
Sent 42 469.797899 469.797899 6: seq: 16, get_clock
Sent 43 470.782111 470.782111 6: seq: 17, get_clock
Sent 44 471.766652 471.766652 6: seq: 18, get_clock
Sent 45 472.750927 472.750927 6: seq: 19, get_clock
Sent 46 473.735188 473.735188 6: seq: 1a, get_clock
Sent 47 474.719835 474.719835 6: seq: 1b, get_clock
Sent 48 475.704625 475.704625 6: seq: 1c, get_clock
Sent 49 476.688876 476.688876 6: seq: 1d, get_clock
Sent 50 477.673271 477.673271 6: seq: 1e, get_clock
Sent 51 478.657378 478.657378 6: seq: 1f, get_clock
Sent 52 479.641816 479.641816 6: seq: 10, get_clock
Sent 53 480.626498 480.626498 6: seq: 11, get_clock
Sent 54 481.611029 481.611029 6: seq: 12, get_clock
Sent 55 482.595343 482.595343 6: seq: 13, get_clock
Sent 56 483.579663 483.579663 6: seq: 14, get_clock
Sent 57 484.563898 484.563898 6: seq: 15, get_clock
Sent 58 485.548166 485.548166 6: seq: 16, get_clock
Sent 59 486.532514 486.532514 6: seq: 17, get_clock
Sent 60 487.516873 487.516873 6: seq: 18, get_clock
Sent 61 488.501501 488.501501 6: seq: 19, get_clock
Sent 62 489.485852 489.485852 6: seq: 1a, get_clock
Sent 63 490.469948 490.469948 6: seq: 1b, get_clock
Sent 64 491.453919 491.453919 6: seq: 1c, get_clock
Sent 65 492.438844 492.438844 6: seq: 1d, get_clock
Sent 66 493.423111 493.423111 6: seq: 1e, get_clock
Sent 67 494.407556 494.407556 6: seq: 1f, get_clock
Sent 68 495.391799 495.391799 6: seq: 10, get_clock
Sent 69 496.376752 496.376752 6: seq: 11, get_clock
Sent 70 497.361013 497.361013 6: seq: 12, get_clock
Sent 71 498.345331 498.345331 6: seq: 13, get_clock
Sent 72 499.329573 499.329573 6: seq: 14, get_clock
Sent 73 500.314348 500.314348 6: seq: 15, get_clock
Sent 74 501.302484 501.302484 6: seq: 16, get_clock
Sent 75 502.286628 502.286628 6: seq: 17, get_clock
Sent 76 503.270721 503.270721 6: seq: 18, get_clock
Sent 77 504.255091 504.255091 6: seq: 19, get_clock
Sent 78 505.239420 505.239420 6: seq: 1a, get_clock
Sent 79 506.223694 506.223694 6: seq: 1b, get_clock
Sent 80 507.208105 507.208105 6: seq: 1c, get_clock
Sent 81 508.192778 508.192778 6: seq: 1d, get_clock
Sent 82 509.177195 509.177195 6: seq: 1e, get_clock
Sent 83 510.161433 510.161433 6: seq: 1f, get_clock
Sent 84 511.145687 511.145687 6: seq: 10, get_clock
Sent 85 512.130020 512.130020 6: seq: 11, get_clock
Sent 86 513.114222 513.114222 6: seq: 12, get_clock
Sent 87 514.099234 514.099234 6: seq: 13, get_clock
Sent 88 515.004870 515.004870 21: seq: 14, queue_digital_out oid=24 clock=3837405455 on_ticks=0, queue_digital_out oid=25 clock=3837405455 on_ticks=0
Sent 89 515.006473 515.006473 61: seq: 15, set_next_step_dir oid=9 dir=0, set_next_step_dir oid=11 dir=0, queue_step oid=9 interval=3837589167 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=3837589167 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513
Sent 90 515.006473 515.006473 61: seq: 16, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72
Sent 91 515.006473 515.006473 60: seq: 17, queue_step oid=11 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1
Sent 92 515.007501 515.007501 40: seq: 18, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=11 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0
Sent 93 515.010640 515.010640 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 94 515.015558 515.015558 14: seq: 1a, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 515.019315 515.019315 14: seq: 1b, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 515.023055 515.023055 14: seq: 1c, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 515.026906 515.026906 14: seq: 1d, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 98 515.030684 515.030684 14: seq: 1e, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 515.038427 515.038427 6: seq: 1f, emergency_stop
Dumping receive queue 100 messages
Receive: 0 503.270920 503.270721 11: seq: 19, clock clock=1680477427
Receive: 1 503.462566 503.270721 14: seq: 19, analog_in_state oid=20 next_clock=1767686784 value=7476
Receive: 2 503.472526 503.270721 15: seq: 19, analog_in_state oid=21 next_clock=1769486784 value=31502
Receive: 3 503.762538 503.270721 14: seq: 19, analog_in_state oid=20 next_clock=1821686784 value=7476
Receive: 4 503.772559 503.270721 15: seq: 19, analog_in_state oid=21 next_clock=1823486784 value=31500
Receive: 5 504.062561 503.270721 14: seq: 19, analog_in_state oid=20 next_clock=1875686784 value=7475
Receive: 6 504.072521 503.270721 15: seq: 19, analog_in_state oid=21 next_clock=1877486784 value=31502
Receive: 7 504.255278 504.255091 11: seq: 1a, clock clock=1857666431
Receive: 8 504.362597 504.255091 14: seq: 1a, analog_in_state oid=20 next_clock=1929686784 value=7477
Receive: 9 504.372569 504.255091 15: seq: 1a, analog_in_state oid=21 next_clock=1931486784 value=31504
Receive: 10 504.662649 504.255091 14: seq: 1a, analog_in_state oid=20 next_clock=1983686784 value=7478
Receive: 11 504.672633 504.255091 15: seq: 1a, analog_in_state oid=21 next_clock=1985486784 value=31495
Receive: 12 504.962562 504.255091 14: seq: 1a, analog_in_state oid=20 next_clock=2037686784 value=7478
Receive: 13 504.972555 504.255091 15: seq: 1a, analog_in_state oid=21 next_clock=2039486784 value=31501
Receive: 14 505.239780 505.239420 11: seq: 1b, clock clock=2034847185
Receive: 15 505.239793 505.239420 14: seq: 1b, stats count=130 sum=117190 sumsq=616532
Receive: 16 505.262577 505.239420 14: seq: 1b, analog_in_state oid=20 next_clock=2091686784 value=7477
Receive: 17 505.272561 505.239420 15: seq: 1b, analog_in_state oid=21 next_clock=2093486784 value=31497
Receive: 18 505.562588 505.239420 14: seq: 1b, analog_in_state oid=20 next_clock=2145686784 value=7477
Receive: 19 505.572552 505.239420 15: seq: 1b, analog_in_state oid=21 next_clock=2147486784 value=31495
Receive: 20 505.862598 505.239420 14: seq: 1b, analog_in_state oid=20 next_clock=2199686784 value=7477
Receive: 21 505.872559 505.239420 15: seq: 1b, analog_in_state oid=21 next_clock=2201486784 value=31493
Receive: 22 506.162573 505.239420 14: seq: 1b, analog_in_state oid=20 next_clock=2253686784 value=7476
Receive: 23 506.173099 505.239420 15: seq: 1b, analog_in_state oid=21 next_clock=2255486784 value=31489
Receive: 24 506.223903 506.223694 11: seq: 1c, clock clock=2212019958
Receive: 25 506.462569 506.223694 14: seq: 1c, analog_in_state oid=20 next_clock=2307686784 value=7480
Receive: 26 506.472564 506.223694 15: seq: 1c, analog_in_state oid=21 next_clock=2309486784 value=31488
Receive: 27 506.762605 506.223694 14: seq: 1c, analog_in_state oid=20 next_clock=2361686784 value=7477
Receive: 28 506.772535 506.223694 15: seq: 1c, analog_in_state oid=21 next_clock=2363486784 value=31487
Receive: 29 507.062567 506.223694 14: seq: 1c, analog_in_state oid=20 next_clock=2415686784 value=7476
Receive: 30 507.072575 506.223694 15: seq: 1c, analog_in_state oid=21 next_clock=2417486784 value=31481
Receive: 31 507.208336 507.208105 11: seq: 1d, clock clock=2389213162
Receive: 32 507.362627 507.208105 14: seq: 1d, analog_in_state oid=20 next_clock=2469686784 value=7478
Receive: 33 507.372578 507.208105 15: seq: 1d, analog_in_state oid=21 next_clock=2471486784 value=31484
Receive: 34 507.662591 507.208105 14: seq: 1d, analog_in_state oid=20 next_clock=2523686784 value=7474
Receive: 35 507.672694 507.208105 15: seq: 1d, analog_in_state oid=21 next_clock=2525486784 value=31481
Receive: 36 507.962587 507.208105 14: seq: 1d, analog_in_state oid=20 next_clock=2577686784 value=7476
Receive: 37 507.972566 507.208105 15: seq: 1d, analog_in_state oid=21 next_clock=2579486784 value=31479
Receive: 38 508.193038 508.192778 11: seq: 1e, clock clock=2566454580
Receive: 39 508.262624 508.192778 14: seq: 1e, analog_in_state oid=20 next_clock=2631686784 value=7480
Receive: 40 508.272627 508.192778 15: seq: 1e, analog_in_state oid=21 next_clock=2633486784 value=31477
Receive: 41 508.562612 508.192778 14: seq: 1e, analog_in_state oid=20 next_clock=2685686784 value=7478
Receive: 42 508.572550 508.192778 15: seq: 1e, analog_in_state oid=21 next_clock=2687486784 value=31476
Receive: 43 508.862553 508.192778 14: seq: 1e, analog_in_state oid=20 next_clock=2739686784 value=7475
Receive: 44 508.872508 508.192778 15: seq: 1e, analog_in_state oid=21 next_clock=2741486784 value=31472
Receive: 45 509.162541 508.192778 14: seq: 1e, analog_in_state oid=20 next_clock=2793686784 value=7476
Receive: 46 509.172523 508.192778 15: seq: 1e, analog_in_state oid=21 next_clock=2795486784 value=31473
Receive: 47 509.177524 509.177195 11: seq: 1f, clock clock=2743646613
Receive: 48 509.462531 509.177195 14: seq: 1f, analog_in_state oid=20 next_clock=2847686784 value=7479
Receive: 49 509.472531 509.177195 15: seq: 1f, analog_in_state oid=21 next_clock=2849486784 value=31466
Receive: 50 509.762533 509.177195 14: seq: 1f, analog_in_state oid=20 next_clock=2901686784 value=7477
Receive: 51 509.772525 509.177195 15: seq: 1f, analog_in_state oid=21 next_clock=2903486784 value=31465
Receive: 52 510.062534 509.177195 14: seq: 1f, analog_in_state oid=20 next_clock=2955686784 value=7478
Receive: 53 510.072574 509.177195 15: seq: 1f, analog_in_state oid=21 next_clock=2957486784 value=31468
Receive: 54 510.161599 510.161433 11: seq: 10, clock clock=2920810387
Receive: 55 510.255357 510.161433 14: seq: 10, stats count=131 sum=116729 sumsq=607901
Receive: 56 510.362555 510.161433 14: seq: 10, analog_in_state oid=20 next_clock=3009686784 value=7477
Receive: 57 510.372518 510.161433 15: seq: 10, analog_in_state oid=21 next_clock=3011486784 value=31466
Receive: 58 510.662557 510.161433 14: seq: 10, analog_in_state oid=20 next_clock=3063686784 value=7479
Receive: 59 510.672524 510.161433 15: seq: 10, analog_in_state oid=21 next_clock=3065486784 value=31465
Receive: 60 510.962588 510.161433 14: seq: 10, analog_in_state oid=20 next_clock=3117686784 value=7478
Receive: 61 510.972561 510.161433 15: seq: 10, analog_in_state oid=21 next_clock=3119486784 value=31468
Receive: 62 511.146055 511.145687 11: seq: 11, clock clock=3097975721
Receive: 63 511.262530 511.145687 14: seq: 11, analog_in_state oid=20 next_clock=3171686784 value=7479
Receive: 64 511.272545 511.145687 15: seq: 11, analog_in_state oid=21 next_clock=3173486784 value=31466
Receive: 65 511.562544 511.145687 14: seq: 11, analog_in_state oid=20 next_clock=3225686784 value=7481
Receive: 66 511.572503 511.145687 15: seq: 11, analog_in_state oid=21 next_clock=3227486784 value=31465
Receive: 67 511.862608 511.145687 14: seq: 11, analog_in_state oid=20 next_clock=3279686784 value=7477
Receive: 68 511.872519 511.145687 15: seq: 11, analog_in_state oid=21 next_clock=3281486784 value=31463
Receive: 69 512.130232 512.130020 11: seq: 12, clock clock=3275155965
Receive: 70 512.162517 512.130020 14: seq: 12, analog_in_state oid=20 next_clock=3333686784 value=7475
Receive: 71 512.172505 512.130020 15: seq: 12, analog_in_state oid=21 next_clock=3335486784 value=31463
Receive: 72 512.462532 512.130020 14: seq: 12, analog_in_state oid=20 next_clock=3387686784 value=7478
Receive: 73 512.472518 512.130020 15: seq: 12, analog_in_state oid=21 next_clock=3389486784 value=31468
Receive: 74 512.762525 512.130020 14: seq: 12, analog_in_state oid=20 next_clock=3441686784 value=7476
Receive: 75 512.772502 512.130020 15: seq: 12, analog_in_state oid=21 next_clock=3443486784 value=31466
Receive: 76 513.062536 512.130020 14: seq: 12, analog_in_state oid=20 next_clock=3495686784 value=7479
Receive: 77 513.072516 512.130020 15: seq: 12, analog_in_state oid=21 next_clock=3497486784 value=31464
Receive: 78 513.114469 513.114222 11: seq: 13, clock clock=3452315193
Receive: 79 513.362536 513.114222 14: seq: 13, analog_in_state oid=20 next_clock=3549686784 value=7478
Receive: 80 513.372501 513.114222 15: seq: 13, analog_in_state oid=21 next_clock=3551486784 value=31465
Receive: 81 513.662571 513.114222 14: seq: 13, analog_in_state oid=20 next_clock=3603686784 value=7479
Receive: 82 513.672558 513.114222 15: seq: 13, analog_in_state oid=21 next_clock=3605486784 value=31460
Receive: 83 513.962583 513.114222 14: seq: 13, analog_in_state oid=20 next_clock=3657686784 value=7483
Receive: 84 513.972549 513.114222 15: seq: 13, analog_in_state oid=21 next_clock=3659486784 value=31462
Receive: 85 514.099552 514.099234 11: seq: 14, clock clock=3629623226
Receive: 86 514.262603 514.099234 14: seq: 14, analog_in_state oid=20 next_clock=3711686784 value=7482
Receive: 87 514.272679 514.099234 15: seq: 14, analog_in_state oid=21 next_clock=3713486784 value=31467
Receive: 88 514.562606 514.099234 14: seq: 14, analog_in_state oid=20 next_clock=3765686784 value=7480
Receive: 89 514.572579 514.099234 15: seq: 14, analog_in_state oid=21 next_clock=3767486784 value=31464
Receive: 90 514.862649 514.099234 14: seq: 14, analog_in_state oid=20 next_clock=3819686784 value=7476
Receive: 91 514.872579 514.099234 15: seq: 14, analog_in_state oid=21 next_clock=3821486784 value=31464
Receive: 92 515.009955 515.007501 8: seq: 19, tmcuart_response oid=2 read=b''
Receive: 93 515.014634 515.010640 18: seq: 1a, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02h!\xb9'
Receive: 94 515.018679 515.015558 8: seq: 1b, tmcuart_response oid=3 read=b''
Receive: 95 515.022422 515.019315 8: seq: 1c, tmcuart_response oid=3 read=b''
Receive: 96 515.026243 515.023055 8: seq: 1d, tmcuart_response oid=3 read=b''
Receive: 97 515.030029 515.026906 8: seq: 1e, tmcuart_response oid=3 read=b''
Receive: 98 515.033824 515.030684 8: seq: 1f, tmcuart_response oid=3 read=b''
Receive: 99 515.038915 515.038427 12: seq: 10, shutdown clock=3798678544 static_string_id=Command request
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[190.0, 200.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
Reactor garbage collection: (513.124006786, 473.114462606, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=33449043517 clock_est=(485.550 31621838055 63999427.889) min_half_rtt=0.000078 min_rtt_time=303.430 time_avg=485.549(843.159) clock_avg=31621838055.424(53961679633.935) pred_variance=12507015.894 clock_adj=(-1.403 63999183.750)
Dumping serial stats: bytes_write=4374 bytes_read=58916 bytes_retransmit=9 bytes_invalid=0 send_seq=642 receive_seq=642 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 417.622027 417.622027 6: seq: 1e, get_clock
Sent 1 418.606323 418.606323 6: seq: 1f, get_clock
Sent 2 419.591457 419.591457 6: seq: 10, get_clock
Sent 3 420.576398 420.576398 6: seq: 11, get_clock
Sent 4 421.560605 421.560605 6: seq: 12, get_clock
Sent 5 422.544837 422.544837 6: seq: 13, get_clock
Sent 6 423.529046 423.529046 6: seq: 14, get_clock
Sent 7 424.513339 424.513339 6: seq: 15, get_clock
Sent 8 425.497662 425.497662 6: seq: 16, get_clock
Sent 9 426.481481 426.481481 6: seq: 17, get_clock
Sent 10 427.466920 427.466920 6: seq: 18, get_clock
Sent 11 428.451125 428.451125 6: seq: 19, get_clock
Sent 12 429.435426 429.435426 6: seq: 1a, get_clock
Sent 13 430.419182 430.419182 6: seq: 1b, get_clock
Sent 14 431.403914 431.403914 6: seq: 1c, get_clock
Sent 15 432.388382 432.388382 6: seq: 1d, get_clock
Sent 16 433.372553 433.372553 6: seq: 1e, get_clock
Sent 17 434.357374 434.357374 6: seq: 1f, get_clock
Sent 18 435.341712 435.341712 6: seq: 10, get_clock
Sent 19 436.326568 436.326568 6: seq: 11, get_clock
Sent 20 437.310924 437.310924 6: seq: 12, get_clock
Sent 21 438.295124 438.295124 6: seq: 13, get_clock
Sent 22 439.279309 439.279309 6: seq: 14, get_clock
Sent 23 440.263847 440.263847 6: seq: 15, get_clock
Sent 24 441.248062 441.248062 6: seq: 16, get_clock
Sent 25 442.232342 442.232342 6: seq: 17, get_clock
Sent 26 443.216791 443.216791 6: seq: 18, get_clock
Sent 27 444.201578 444.201578 6: seq: 19, get_clock
Sent 28 445.186322 445.186322 6: seq: 1a, get_clock
Sent 29 446.170897 446.170897 6: seq: 1b, get_clock
Sent 30 447.155658 447.155658 6: seq: 1c, get_clock
Sent 31 448.139538 448.139538 6: seq: 1d, get_clock
Sent 32 449.124172 449.124172 6: seq: 1e, get_clock
Sent 33 450.109240 450.109240 6: seq: 1f, get_clock
Sent 34 451.094068 451.094068 6: seq: 10, get_clock
Sent 35 452.077744 452.077744 6: seq: 11, get_clock
Sent 36 453.062592 453.062592 6: seq: 12, get_clock
Sent 37 454.046560 454.046560 6: seq: 13, get_clock
Sent 38 455.030711 455.030711 6: seq: 14, get_clock
Sent 39 456.014895 456.014895 6: seq: 15, get_clock
Sent 40 456.999828 456.999828 6: seq: 16, get_clock
Sent 41 457.983503 457.983503 6: seq: 17, get_clock
Sent 42 458.967693 458.967693 6: seq: 18, get_clock
Sent 43 459.952309 459.952309 6: seq: 19, get_clock
Sent 44 460.936792 460.936792 6: seq: 1a, get_clock
Sent 45 461.922002 461.922002 6: seq: 1b, get_clock
Sent 46 462.907514 462.907514 6: seq: 1c, get_clock
Sent 47 463.892327 463.892327 6: seq: 1d, get_clock
Sent 48 464.876419 464.876419 6: seq: 1e, get_clock
Sent 49 465.861570 465.861570 6: seq: 1f, get_clock
Sent 50 466.846076 466.846076 6: seq: 10, get_clock
Sent 51 467.830350 467.830350 6: seq: 11, get_clock
Sent 52 468.814568 468.814568 6: seq: 12, get_clock
Sent 53 469.798737 469.798737 6: seq: 13, get_clock
Sent 54 470.782914 470.782914 6: seq: 14, get_clock
Sent 55 471.766732 471.766732 6: seq: 15, get_clock
Sent 56 472.751009 472.751009 6: seq: 16, get_clock
Sent 57 473.735277 473.735277 6: seq: 17, get_clock
Sent 58 474.720054 474.720054 6: seq: 18, get_clock
Sent 59 475.704773 475.704773 6: seq: 19, get_clock
Sent 60 476.689001 476.689001 6: seq: 1a, get_clock
Sent 61 477.673403 477.673403 6: seq: 1b, get_clock
Sent 62 478.657507 478.657507 6: seq: 1c, get_clock
Sent 63 479.642858 479.642858 6: seq: 1d, get_clock
Sent 64 480.627456 480.627456 6: seq: 1e, get_clock
Sent 65 481.611826 481.611826 6: seq: 1f, get_clock
Sent 66 482.596162 482.596162 6: seq: 10, get_clock
Sent 67 483.580347 483.580347 6: seq: 11, get_clock
Sent 68 484.564150 484.564150 6: seq: 12, get_clock
Sent 69 485.548419 485.548419 6: seq: 13, get_clock
Sent 70 486.533166 486.533166 6: seq: 14, get_clock
Sent 71 487.518324 487.518324 6: seq: 15, get_clock
Sent 72 488.502143 488.502143 6: seq: 16, get_clock
Sent 73 489.486142 489.486142 6: seq: 17, get_clock
Sent 74 490.470038 490.470038 6: seq: 18, get_clock
Sent 75 491.453952 491.453952 6: seq: 19, get_clock
Sent 76 492.438888 492.438888 6: seq: 1a, get_clock
Sent 77 493.423158 493.423158 6: seq: 1b, get_clock
Sent 78 494.407598 494.407598 6: seq: 1c, get_clock
Sent 79 495.391929 495.391929 6: seq: 1d, get_clock
Sent 80 496.377661 496.377661 6: seq: 1e, get_clock
Sent 81 497.361266 497.361266 6: seq: 1f, get_clock
Sent 82 498.345629 498.345629 6: seq: 10, get_clock
Sent 83 499.329867 499.329867 6: seq: 11, get_clock
Sent 84 500.314674 500.314674 6: seq: 12, get_clock
Sent 85 501.302820 501.302820 6: seq: 13, get_clock
Sent 86 502.286761 502.286761 6: seq: 14, get_clock
Sent 87 503.270854 503.270854 6: seq: 15, get_clock
Sent 88 504.255236 504.255236 6: seq: 16, get_clock
Sent 89 505.239610 505.239610 6: seq: 17, get_clock
Sent 90 506.223841 506.223841 6: seq: 18, get_clock
Sent 91 507.208761 507.208761 6: seq: 19, get_clock
Sent 92 508.193606 508.193606 6: seq: 1a, get_clock
Sent 93 509.177322 509.177322 6: seq: 1b, get_clock
Sent 94 510.161917 510.161917 6: seq: 1c, get_clock
Sent 95 511.145830 511.145830 6: seq: 1d, get_clock
Sent 96 512.130157 512.130157 6: seq: 1e, get_clock
Sent 97 513.114381 513.114381 6: seq: 1f, get_clock
Sent 98 514.099809 514.099809 6: seq: 10, get_clock
Sent 99 515.069923 515.069923 6: seq: 11, emergency_stop
Dumping receive queue 100 messages
Receive: 0 502.728195 502.286761 14: seq: 15, analog_in_state oid=6 next_clock=2675228719 value=7458
Receive: 1 502.758185 502.286761 14: seq: 15, analog_in_state oid=9 next_clock=2677148719 value=10843
Receive: 2 502.958642 502.286761 14: seq: 15, stats count=170 sum=159083 sumsq=824121
Receive: 3 503.028214 502.286761 14: seq: 15, analog_in_state oid=6 next_clock=2694428719 value=7459
Receive: 4 503.058244 502.286761 14: seq: 15, analog_in_state oid=9 next_clock=2696348719 value=10843
Receive: 5 503.271025 503.270854 11: seq: 16, clock clock=2691223933
Receive: 6 503.328213 503.270854 14: seq: 16, analog_in_state oid=6 next_clock=2713628719 value=7462
Receive: 7 503.358205 503.270854 14: seq: 16, analog_in_state oid=9 next_clock=2715548719 value=10845
Receive: 8 503.628212 503.270854 14: seq: 16, analog_in_state oid=6 next_clock=2732828719 value=7459
Receive: 9 503.658189 503.270854 14: seq: 16, analog_in_state oid=9 next_clock=2734748719 value=10843
Receive: 10 503.928214 503.270854 14: seq: 16, analog_in_state oid=6 next_clock=2752028719 value=7457
Receive: 11 503.958204 503.270854 14: seq: 16, analog_in_state oid=9 next_clock=2753948719 value=10843
Receive: 12 504.228254 503.270854 14: seq: 16, analog_in_state oid=6 next_clock=2771228719 value=7456
Receive: 13 504.255601 504.255236 11: seq: 17, clock clock=2754223396
Receive: 14 504.258214 504.255236 14: seq: 17, analog_in_state oid=9 next_clock=2773148719 value=10846
Receive: 15 504.528236 504.255236 14: seq: 17, analog_in_state oid=6 next_clock=2790428719 value=7456
Receive: 16 504.558281 504.255236 14: seq: 17, analog_in_state oid=9 next_clock=2792348719 value=10846
Receive: 17 504.828236 504.255236 14: seq: 17, analog_in_state oid=6 next_clock=2809628719 value=7457
Receive: 18 504.858250 504.255236 14: seq: 17, analog_in_state oid=9 next_clock=2811548719 value=10843
Receive: 19 505.128305 504.255236 14: seq: 17, analog_in_state oid=6 next_clock=2828828719 value=7458
Receive: 20 505.158274 504.255236 14: seq: 17, analog_in_state oid=9 next_clock=2830748719 value=10844
Receive: 21 505.239862 505.239610 11: seq: 18, clock clock=2817222796
Receive: 22 505.428244 505.239610 14: seq: 18, analog_in_state oid=6 next_clock=2848028719 value=7458
Receive: 23 505.458251 505.239610 14: seq: 18, analog_in_state oid=9 next_clock=2849948719 value=10844
Receive: 24 505.728264 505.239610 14: seq: 18, analog_in_state oid=6 next_clock=2867228719 value=7464
Receive: 25 505.758344 505.239610 14: seq: 18, analog_in_state oid=9 next_clock=2869148719 value=10846
Receive: 26 506.028255 505.239610 14: seq: 18, analog_in_state oid=6 next_clock=2886428719 value=7460
Receive: 27 506.058258 505.239610 14: seq: 18, analog_in_state oid=9 next_clock=2888348719 value=10842
Receive: 28 506.224130 506.223841 11: seq: 19, clock clock=2880213604
Receive: 29 506.328302 506.223841 14: seq: 19, analog_in_state oid=6 next_clock=2905628719 value=7460
Receive: 30 506.358291 506.223841 14: seq: 19, analog_in_state oid=9 next_clock=2907548719 value=10850
Receive: 31 506.628234 506.223841 14: seq: 19, analog_in_state oid=6 next_clock=2924828719 value=7461
Receive: 32 506.658224 506.223841 14: seq: 19, analog_in_state oid=9 next_clock=2926748719 value=10846
Receive: 33 506.928235 506.223841 14: seq: 19, analog_in_state oid=6 next_clock=2944028719 value=7461
Receive: 34 506.958225 506.223841 14: seq: 19, analog_in_state oid=9 next_clock=2945948719 value=10841
Receive: 35 507.209064 507.208761 11: seq: 1a, clock clock=2943248979
Receive: 36 507.228292 507.208761 14: seq: 1a, analog_in_state oid=6 next_clock=2963228719 value=7460
Receive: 37 507.258272 507.208761 14: seq: 1a, analog_in_state oid=9 next_clock=2965148719 value=10841
Receive: 38 507.528312 507.208761 14: seq: 1a, analog_in_state oid=6 next_clock=2982428719 value=7458
Receive: 39 507.558297 507.208761 14: seq: 1a, analog_in_state oid=9 next_clock=2984348719 value=10846
Receive: 40 507.828314 507.208761 14: seq: 1a, analog_in_state oid=6 next_clock=3001628719 value=7459
Receive: 41 507.858287 507.208761 14: seq: 1a, analog_in_state oid=9 next_clock=3003548719 value=10846
Receive: 42 508.058761 507.208761 14: seq: 1a, stats count=170 sum=159082 sumsq=824103
Receive: 43 508.128323 507.208761 14: seq: 1a, analog_in_state oid=6 next_clock=3020828719 value=7461
Receive: 44 508.158297 507.208761 14: seq: 1a, analog_in_state oid=9 next_clock=3022748719 value=10846
Receive: 45 508.193866 508.193606 11: seq: 1b, clock clock=3006278491
Receive: 46 508.428433 508.193606 14: seq: 1b, analog_in_state oid=6 next_clock=3040028719 value=7454
Receive: 47 508.458438 508.193606 14: seq: 1b, analog_in_state oid=9 next_clock=3041948719 value=10842
Receive: 48 508.728274 508.193606 14: seq: 1b, analog_in_state oid=6 next_clock=3059228719 value=7456
Receive: 49 508.758253 508.193606 14: seq: 1b, analog_in_state oid=9 next_clock=3061148719 value=10844
Receive: 50 509.028285 508.193606 14: seq: 1b, analog_in_state oid=6 next_clock=3078428719 value=7459
Receive: 51 509.058294 508.193606 14: seq: 1b, analog_in_state oid=9 next_clock=3080348719 value=10843
Receive: 52 509.177621 509.177322 11: seq: 1c, clock clock=3069242756
Receive: 53 509.328329 509.177322 14: seq: 1c, analog_in_state oid=6 next_clock=3097628719 value=7459
Receive: 54 509.358320 509.177322 14: seq: 1c, analog_in_state oid=9 next_clock=3099548719 value=10840
Receive: 55 509.628263 509.177322 14: seq: 1c, analog_in_state oid=6 next_clock=3116828719 value=7463
Receive: 56 509.658259 509.177322 14: seq: 1c, analog_in_state oid=9 next_clock=3118748719 value=10841
Receive: 57 509.928270 509.177322 14: seq: 1c, analog_in_state oid=6 next_clock=3136028719 value=7459
Receive: 58 509.958265 509.177322 14: seq: 1c, analog_in_state oid=9 next_clock=3137948719 value=10845
Receive: 59 510.162095 510.161917 11: seq: 1d, clock clock=3132247733
Receive: 60 510.228261 510.161917 14: seq: 1d, analog_in_state oid=6 next_clock=3155228719 value=7463
Receive: 61 510.258272 510.161917 14: seq: 1d, analog_in_state oid=9 next_clock=3157148719 value=10845
Receive: 62 510.528275 510.161917 14: seq: 1d, analog_in_state oid=6 next_clock=3174428719 value=7461
Receive: 63 510.558246 510.161917 14: seq: 1d, analog_in_state oid=9 next_clock=3176348719 value=10845
Receive: 64 510.828323 510.161917 14: seq: 1d, analog_in_state oid=6 next_clock=3193628719 value=7461
Receive: 65 510.858282 510.161917 14: seq: 1d, analog_in_state oid=9 next_clock=3195548719 value=10846
Receive: 66 511.128300 510.161917 14: seq: 1d, analog_in_state oid=6 next_clock=3212828719 value=7464
Receive: 67 511.146003 511.145830 11: seq: 1e, clock clock=3195217444
Receive: 68 511.158262 511.145830 14: seq: 1e, analog_in_state oid=9 next_clock=3214748719 value=10843
Receive: 69 511.428279 511.145830 14: seq: 1e, analog_in_state oid=6 next_clock=3232028719 value=7458
Receive: 70 511.458273 511.145830 14: seq: 1e, analog_in_state oid=9 next_clock=3233948719 value=10842
Receive: 71 511.728290 511.145830 14: seq: 1e, analog_in_state oid=6 next_clock=3251228719 value=7459
Receive: 72 511.758266 511.145830 14: seq: 1e, analog_in_state oid=9 next_clock=3253148719 value=10844
Receive: 73 512.028292 511.145830 14: seq: 1e, analog_in_state oid=6 next_clock=3270428719 value=7456
Receive: 74 512.058272 511.145830 14: seq: 1e, analog_in_state oid=9 next_clock=3272348719 value=10846
Receive: 75 512.130457 512.130157 11: seq: 1f, clock clock=3258214476
Receive: 76 512.328364 512.130157 14: seq: 1f, analog_in_state oid=6 next_clock=3289628719 value=7460
Receive: 77 512.358309 512.130157 14: seq: 1f, analog_in_state oid=9 next_clock=3291548719 value=10844
Receive: 78 512.628318 512.130157 14: seq: 1f, analog_in_state oid=6 next_clock=3308828719 value=7463
Receive: 79 512.658327 512.130157 14: seq: 1f, analog_in_state oid=9 next_clock=3310748719 value=10845
Receive: 80 512.928300 512.130157 14: seq: 1f, analog_in_state oid=6 next_clock=3328028719 value=7456
Receive: 81 512.958287 512.130157 14: seq: 1f, analog_in_state oid=9 next_clock=3329948719 value=10846
Receive: 82 513.114545 513.114381 11: seq: 10, clock clock=3321203929
Receive: 83 513.114567 513.114381 14: seq: 10, stats count=170 sum=160700 sumsq=841852
Receive: 84 513.228302 513.114381 14: seq: 10, analog_in_state oid=6 next_clock=3347228719 value=7460
Receive: 85 513.258291 513.114381 14: seq: 10, analog_in_state oid=9 next_clock=3349148719 value=10843
Receive: 86 513.528367 513.114381 14: seq: 10, analog_in_state oid=6 next_clock=3366428719 value=7458
Receive: 87 513.558346 513.114381 14: seq: 10, analog_in_state oid=9 next_clock=3368348719 value=10847
Receive: 88 513.828366 513.114381 14: seq: 10, analog_in_state oid=6 next_clock=3385628719 value=7462
Receive: 89 513.858440 513.114381 14: seq: 10, analog_in_state oid=9 next_clock=3387548719 value=10845
Receive: 90 514.100122 514.099809 11: seq: 11, clock clock=3384272445
Receive: 91 514.128352 514.099809 14: seq: 11, analog_in_state oid=6 next_clock=3404828719 value=7462
Receive: 92 514.158365 514.099809 14: seq: 11, analog_in_state oid=9 next_clock=3406748719 value=10845
Receive: 93 514.428365 514.099809 14: seq: 11, analog_in_state oid=6 next_clock=3424028719 value=7458
Receive: 94 514.458340 514.099809 14: seq: 11, analog_in_state oid=9 next_clock=3425948719 value=10842
Receive: 95 514.728369 514.099809 14: seq: 11, analog_in_state oid=6 next_clock=3443228719 value=7461
Receive: 96 514.758416 514.099809 14: seq: 11, analog_in_state oid=9 next_clock=3445148719 value=10841
Receive: 97 515.028388 514.099809 14: seq: 11, analog_in_state oid=6 next_clock=3462428719 value=7460
Receive: 98 515.058432 514.099809 14: seq: 11, analog_in_state oid=9 next_clock=3464348719 value=10843
Receive: 99 515.070415 515.069923 12: seq: 12, shutdown clock=3446360448 static_string_id=Command request
MCU 'beacon' shutdown: Emergency stop
clocksync state: mcu_freq=32000000 last_clock=16614062558 clock_est=(485.550 15700453655 31999764.847) min_half_rtt=0.000178 min_rtt_time=132.144 time_avg=485.550(843.157) clock_avg=15700453655.334(26980823986.977) pred_variance=465242.103 clock_adj=(2.051 31999697.500)
Dumping serial stats: bytes_write=3289 bytes_read=173379 bytes_retransmit=0 bytes_invalid=0 send_seq=548 receive_seq=548 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 418.606715 418.606715 6: seq: 10, get_clock
Sent 1 419.592358 419.592358 6: seq: 11, get_clock
Sent 2 420.576668 420.576668 6: seq: 12, get_clock
Sent 3 421.560830 421.560830 6: seq: 13, get_clock
Sent 4 422.545271 422.545271 6: seq: 14, get_clock
Sent 5 423.529143 423.529143 6: seq: 15, get_clock
Sent 6 424.513623 424.513623 6: seq: 16, get_clock
Sent 7 425.497946 425.497946 6: seq: 17, get_clock
Sent 8 426.481841 426.481841 6: seq: 18, get_clock
Sent 9 427.467600 427.467600 6: seq: 19, get_clock
Sent 10 428.451753 428.451753 6: seq: 1a, get_clock
Sent 11 429.436040 429.436040 6: seq: 1b, get_clock
Sent 12 430.419520 430.419520 6: seq: 1c, get_clock
Sent 13 431.404553 431.404553 6: seq: 1d, get_clock
Sent 14 432.388656 432.388656 6: seq: 1e, get_clock
Sent 15 433.372784 433.372784 6: seq: 1f, get_clock
Sent 16 434.357595 434.357595 6: seq: 10, get_clock
Sent 17 435.341949 435.341949 6: seq: 11, get_clock
Sent 18 436.327253 436.327253 6: seq: 12, get_clock
Sent 19 437.310968 437.310968 6: seq: 13, get_clock
Sent 20 438.295664 438.295664 6: seq: 14, get_clock
Sent 21 439.279823 439.279823 6: seq: 15, get_clock
Sent 22 440.263745 440.263745 6: seq: 16, get_clock
Sent 23 441.248613 441.248613 6: seq: 17, get_clock
Sent 24 442.232879 442.232879 6: seq: 18, get_clock
Sent 25 443.216759 443.216759 6: seq: 19, get_clock
Sent 26 444.201671 444.201671 6: seq: 1a, get_clock
Sent 27 445.187160 445.187160 6: seq: 1b, get_clock
Sent 28 446.171363 446.171363 6: seq: 1c, get_clock
Sent 29 447.155848 447.155848 6: seq: 1d, get_clock
Sent 30 448.140534 448.140534 6: seq: 1e, get_clock
Sent 31 449.125060 449.125060 6: seq: 1f, get_clock
Sent 32 450.109748 450.109748 6: seq: 10, get_clock
Sent 33 451.094258 451.094258 6: seq: 11, get_clock
Sent 34 452.077929 452.077929 6: seq: 12, get_clock
Sent 35 453.063230 453.063230 6: seq: 13, get_clock
Sent 36 454.047149 454.047149 6: seq: 14, get_clock
Sent 37 455.031169 455.031169 6: seq: 15, get_clock
Sent 38 456.015286 456.015286 6: seq: 16, get_clock
Sent 39 456.999930 456.999930 6: seq: 17, get_clock
Sent 40 457.983634 457.983634 6: seq: 18, get_clock
Sent 41 458.968183 458.968183 6: seq: 19, get_clock
Sent 42 459.952401 459.952401 6: seq: 1a, get_clock
Sent 43 460.936916 460.936916 6: seq: 1b, get_clock
Sent 44 461.923238 461.923238 6: seq: 1c, get_clock
Sent 45 462.908354 462.908354 6: seq: 1d, get_clock
Sent 46 463.893388 463.893388 6: seq: 1e, get_clock
Sent 47 464.877273 464.877273 6: seq: 1f, get_clock
Sent 48 465.861788 465.861788 6: seq: 10, get_clock
Sent 49 466.846915 466.846915 6: seq: 11, get_clock
Sent 50 467.830914 467.830914 6: seq: 12, get_clock
Sent 51 468.815270 468.815270 6: seq: 13, get_clock
Sent 52 469.799236 469.799236 6: seq: 14, get_clock
Sent 53 470.783143 470.783143 6: seq: 15, get_clock
Sent 54 471.767589 471.767589 6: seq: 16, get_clock
Sent 55 472.752054 472.752054 6: seq: 17, get_clock
Sent 56 473.736417 473.736417 6: seq: 18, get_clock
Sent 57 474.720580 474.720580 6: seq: 19, get_clock
Sent 58 475.705023 475.705023 6: seq: 1a, get_clock
Sent 59 476.689091 476.689091 6: seq: 1b, get_clock
Sent 60 477.673498 477.673498 6: seq: 1c, get_clock
Sent 61 478.657598 478.657598 6: seq: 1d, get_clock
Sent 62 479.643471 479.643471 6: seq: 1e, get_clock
Sent 63 480.627677 480.627677 6: seq: 1f, get_clock
Sent 64 481.612699 481.612699 6: seq: 10, get_clock
Sent 65 482.596698 482.596698 6: seq: 11, get_clock
Sent 66 483.581147 483.581147 6: seq: 12, get_clock
Sent 67 484.564595 484.564595 6: seq: 13, get_clock
Sent 68 485.548984 485.548984 6: seq: 14, get_clock
Sent 69 486.533865 486.533865 6: seq: 15, get_clock
Sent 70 487.518710 487.518710 6: seq: 16, get_clock
Sent 71 488.502504 488.502504 6: seq: 17, get_clock
Sent 72 489.486829 489.486829 6: seq: 18, get_clock
Sent 73 490.470570 490.470570 6: seq: 19, get_clock
Sent 74 491.454104 491.454104 6: seq: 1a, get_clock
Sent 75 492.439029 492.439029 6: seq: 1b, get_clock
Sent 76 493.423296 493.423296 6: seq: 1c, get_clock
Sent 77 494.407727 494.407727 6: seq: 1d, get_clock
Sent 78 495.392053 495.392053 6: seq: 1e, get_clock
Sent 79 496.377901 496.377901 6: seq: 1f, get_clock
Sent 80 497.361478 497.361478 6: seq: 10, get_clock
Sent 81 498.345849 498.345849 6: seq: 11, get_clock
Sent 82 499.330086 499.330086 6: seq: 12, get_clock
Sent 83 500.314897 500.314897 6: seq: 13, get_clock
Sent 84 501.303057 501.303057 6: seq: 14, get_clock
Sent 85 502.287246 502.287246 6: seq: 15, get_clock
Sent 86 503.271289 503.271289 6: seq: 16, get_clock
Sent 87 504.255334 504.255334 6: seq: 17, get_clock
Sent 88 505.240241 505.240241 6: seq: 18, get_clock
Sent 89 506.223935 506.223935 6: seq: 19, get_clock
Sent 90 507.209359 507.209359 6: seq: 1a, get_clock
Sent 91 508.193970 508.193970 6: seq: 1b, get_clock
Sent 92 509.177822 509.177822 6: seq: 1c, get_clock
Sent 93 510.162299 510.162299 6: seq: 1d, get_clock
Sent 94 511.146255 511.146255 6: seq: 1e, get_clock
Sent 95 512.130559 512.130559 6: seq: 1f, get_clock
Sent 96 513.114655 513.114655 6: seq: 10, get_clock
Sent 97 514.100348 514.100348 6: seq: 11, get_clock
Sent 98 515.070935 515.070935 6: seq: 12, emergency_stop
Sent 99 515.071391 515.071391 7: seq: 13, beacon_stream en=0
Dumping receive queue 100 messages
Receive: 0 510.322873 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3608235567 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 1 510.374906 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48789 coil_temp=55008 status=1
Receive: 2 510.422830 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3611436346 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 3 510.475095 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48789 coil_temp=55008 status=1
Receive: 4 510.522844 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3614637140 delta_clock=0 data=b'\x82\x8en)'
Receive: 5 510.575449 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48789 coil_temp=55008 status=1
Receive: 6 510.622912 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3617837928 delta_clock=0 data=b'\x82\x8en)'
Receive: 7 510.675524 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48789 coil_temp=55008 status=1
Receive: 8 510.722913 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3621038713 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 9 510.775637 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48790 coil_temp=55008 status=1
Receive: 10 510.822980 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3624239493 delta_clock=0 data=b'\x82\x8en)'
Receive: 11 510.875864 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48790 coil_temp=55008 status=1
Receive: 12 510.922963 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3627440282 delta_clock=0 data=b'\x82\x8en)'
Receive: 13 510.976047 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48790 coil_temp=55008 status=1
Receive: 14 511.022961 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3630641060 delta_clock=0 data=b'\x82\x8en)'
Receive: 15 511.076343 510.162299 16: seq: 1e, beacon_status mcu_temp=44461 supply_voltage=48790 coil_temp=55008 status=1
Receive: 16 511.123004 510.162299 18: seq: 1e, beacon_data samples=1 start_clock=3633841842 delta_clock=0 data=b'\x82\x8en)'
Receive: 17 511.146731 511.146255 11: seq: 1f, clock clock=3634629623
Receive: 18 511.176401 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 19 511.223020 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3637042622 delta_clock=0 data=b'\x82\x8en)'
Receive: 20 511.276620 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 21 511.323082 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3640243405 delta_clock=0 data=b'\x82\x8en)'
Receive: 22 511.376839 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 23 511.423085 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3643444189 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 24 511.476989 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 25 511.523094 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3646644970 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 26 511.577256 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 27 511.623142 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3649845752 delta_clock=0 data=b'\x82\x8en)'
Receive: 28 511.677411 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 29 511.723152 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3653046525 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 30 511.777545 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 31 511.823175 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3656247302 delta_clock=0 data=b'\x82\x8en)'
Receive: 32 511.877766 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 33 511.923222 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3659448091 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 34 511.977936 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 35 512.023215 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3662648873 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 36 512.078203 511.146255 16: seq: 1f, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 37 512.123279 511.146255 18: seq: 1f, beacon_data samples=1 start_clock=3665849653 delta_clock=0 data=b'\x82\x8en)'
Receive: 38 512.131024 512.130559 11: seq: 10, clock clock=3666129178
Receive: 39 512.178340 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 40 512.223268 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3669050437 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 41 512.278555 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 42 512.323315 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3672251217 delta_clock=0 data=b'\x82\x8en)'
Receive: 43 512.378695 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 44 512.423331 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3675451995 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 45 512.478886 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 46 512.523359 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3678652768 delta_clock=0 data=b'\x82\x8en)'
Receive: 47 512.579145 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 48 512.623417 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3681853551 delta_clock=0 data=b'\x82\x8en)'
Receive: 49 512.679295 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 50 512.723397 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3685054329 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 51 512.779504 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 52 512.823436 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3688255117 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 53 512.879714 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 54 512.923450 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3691455910 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 55 512.979881 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 56 513.023493 512.130559 18: seq: 10, beacon_data samples=1 start_clock=3694656701 delta_clock=0 data=b'\x82\x8en)'
Receive: 57 513.080145 512.130559 16: seq: 10, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 58 513.115056 513.114655 11: seq: 11, clock clock=3697617694
Receive: 59 513.123501 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3697857477 delta_clock=0 data=b'\x82\x8en)'
Receive: 60 513.180261 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 61 513.223522 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3701058257 delta_clock=0 data=b'\x82\x8en)'
Receive: 62 513.280494 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 63 513.323566 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3704259042 delta_clock=0 data=b'\x82\x8en)'
Receive: 64 513.380655 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 65 513.423574 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3707459830 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 66 513.480846 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48791 coil_temp=55008 status=1
Receive: 67 513.523680 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3710660612 delta_clock=0 data=b'\x82\x8en)'
Receive: 68 513.581147 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 69 513.623812 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3713861399 delta_clock=0 data=b'\x82\x8en)'
Receive: 70 513.681258 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 71 513.723739 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3717062182 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 72 513.781465 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 73 513.823759 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3720262960 delta_clock=0 data=b'\x82\x8en)'
Receive: 74 513.881716 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48792 coil_temp=55008 status=1
Receive: 75 513.923783 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3723463730 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 76 513.981861 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 77 514.023815 513.114655 18: seq: 11, beacon_data samples=1 start_clock=3726664518 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 78 514.082155 513.114655 16: seq: 11, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 79 514.100837 514.100348 11: seq: 12, clock clock=3729160670
Receive: 80 514.123915 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3729865298 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 81 514.182222 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 82 514.223906 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3733066079 delta_clock=0 data=b'\x82\x8en)'
Receive: 83 514.282478 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 84 514.323986 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3736266865 delta_clock=0 data=b'\x82\x8en)'
Receive: 85 514.382646 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 86 514.423922 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3739467648 delta_clock=0 data=b'\x82\x8en)'
Receive: 87 514.482810 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 88 514.524016 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3742668434 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 89 514.583089 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 90 514.624154 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3745869215 delta_clock=0 data=b'\x82\x8en)'
Receive: 91 514.683210 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 92 514.723962 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3749069995 delta_clock=0 data=b'\x82\x8en)'
Receive: 93 514.783393 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 94 514.824014 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3752270773 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 95 514.883626 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48793 coil_temp=55008 status=1
Receive: 96 514.924069 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3755471546 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 97 514.983778 514.100348 16: seq: 12, beacon_status mcu_temp=44462 supply_voltage=48794 coil_temp=55008 status=1
Receive: 98 515.024052 514.100348 18: seq: 12, beacon_data samples=1 start_clock=3758672322 delta_clock=0 data=b'\x82\x8en)'
Receive: 99 515.071415 515.070935 12: seq: 13, shutdown clock=3760218882 static_string_id=Emergency stop
Stats 515.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=7087 bytes_read=63398 bytes_retransmit=9 bytes_invalid=0 send_seq=806 receive_seq=806 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000562 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=3768 bytes_read=13730 bytes_retransmit=0 bytes_invalid=0 send_seq=602 receive_seq=602 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999673 adj=49999518 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4380 bytes_read=58960 bytes_retransmit=9 bytes_invalid=0 send_seq=643 receive_seq=643 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999427 adj=63999183 Octopus_V1.1_F446: temp=24.9 EBB42_v1.2_T0: temp=28.5 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3295 bytes_read=173667 bytes_retransmit=0 bytes_invalid=0 send_seq=549 receive_seq=549 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999697 coil_temp=22.7 refs=0 mcu_temp=23.00 supply_voltage=2.978 sysload=0.15 cputime=20.880 memavail=3403820 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 516.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=7147 bytes_read=63537 bytes_retransmit=9 bytes_invalid=0 send_seq=810 receive_seq=810 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000562 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=3774 bytes_read=13746 bytes_retransmit=0 bytes_invalid=0 send_seq=603 receive_seq=603 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999676 adj=49999540 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4386 bytes_read=59088 bytes_retransmit=9 bytes_invalid=0 send_seq=644 receive_seq=644 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999135 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3301 bytes_read=174023 bytes_retransmit=0 bytes_invalid=0 send_seq=550 receive_seq=550 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999662 coil_temp=22.7 refs=0 mcu_temp=23.00 supply_voltage=2.978 sysload=0.15 cputime=20.932 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 517.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=7191 bytes_read=63687 bytes_retransmit=9 bytes_invalid=0 send_seq=813 receive_seq=813 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000563 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=3780 bytes_read=13775 bytes_retransmit=0 bytes_invalid=0 send_seq=604 receive_seq=604 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999679 adj=49999583 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4392 bytes_read=59188 bytes_retransmit=9 bytes_invalid=0 send_seq=645 receive_seq=645 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999445 adj=63999466 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3307 bytes_read=174379 bytes_retransmit=0 bytes_invalid=0 send_seq=551 receive_seq=551 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999671 coil_temp=22.7 refs=0 mcu_temp=22.99 supply_voltage=2.978 sysload=0.15 cputime=20.987 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 518.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=7235 bytes_read=63809 bytes_retransmit=9 bytes_invalid=0 send_seq=816 receive_seq=816 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000564 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=3786 bytes_read=13791 bytes_retransmit=0 bytes_invalid=0 send_seq=605 receive_seq=605 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999682 adj=49999621 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4398 bytes_read=59302 bytes_retransmit=9 bytes_invalid=0 send_seq=646 receive_seq=646 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999387 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.5 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3313 bytes_read=174735 bytes_retransmit=0 bytes_invalid=0 send_seq=552 receive_seq=552 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999673 coil_temp=22.7 refs=0 mcu_temp=22.98 supply_voltage=2.978 sysload=0.15 cputime=21.038 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 519.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=7279 bytes_read=63936 bytes_retransmit=9 bytes_invalid=0 send_seq=819 receive_seq=819 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000565 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=3792 bytes_read=13807 bytes_retransmit=0 bytes_invalid=0 send_seq=606 receive_seq=606 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999684 adj=49999634 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4404 bytes_read=59430 bytes_retransmit=9 bytes_invalid=0 send_seq=647 receive_seq=647 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999322 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3319 bytes_read=175091 bytes_retransmit=0 bytes_invalid=0 send_seq=553 receive_seq=553 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999768 adj=31999696 coil_temp=22.7 refs=0 mcu_temp=22.96 supply_voltage=2.978 sysload=0.15 cputime=21.089 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 520.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7285 bytes_read=64082 bytes_retransmit=9 bytes_invalid=0 send_seq=820 receive_seq=820 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000566 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=3798 bytes_read=13823 bytes_retransmit=0 bytes_invalid=0 send_seq=607 receive_seq=607 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999687 adj=49999627 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4410 bytes_read=59530 bytes_retransmit=9 bytes_invalid=0 send_seq=648 receive_seq=648 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999283 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3325 bytes_read=175447 bytes_retransmit=0 bytes_invalid=0 send_seq=554 receive_seq=554 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999768 adj=31999700 coil_temp=22.7 refs=0 mcu_temp=22.92 supply_voltage=2.978 sysload=0.13 cputime=21.140 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 521.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7291 bytes_read=64185 bytes_retransmit=9 bytes_invalid=0 send_seq=821 receive_seq=821 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000566 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=3804 bytes_read=13839 bytes_retransmit=0 bytes_invalid=0 send_seq=608 receive_seq=608 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999685 adj=49999644 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4416 bytes_read=59630 bytes_retransmit=9 bytes_invalid=0 send_seq=649 receive_seq=649 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999444 adj=63999293 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3331 bytes_read=175803 bytes_retransmit=0 bytes_invalid=0 send_seq=555 receive_seq=555 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999689 coil_temp=22.7 refs=0 mcu_temp=22.89 supply_voltage=2.978 sysload=0.13 cputime=21.189 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 522.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7297 bytes_read=64288 bytes_retransmit=9 bytes_invalid=0 send_seq=822 receive_seq=822 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000568 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=3810 bytes_read=13855 bytes_retransmit=0 bytes_invalid=0 send_seq=609 receive_seq=609 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999682 adj=49999581 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4422 bytes_read=59758 bytes_retransmit=9 bytes_invalid=0 send_seq=650 receive_seq=650 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999266 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3337 bytes_read=176159 bytes_retransmit=0 bytes_invalid=0 send_seq=556 receive_seq=556 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999717 coil_temp=22.7 refs=0 mcu_temp=22.81 supply_voltage=2.978 sysload=0.13 cputime=21.238 memavail=3403572 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 523.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7303 bytes_read=64420 bytes_retransmit=9 bytes_invalid=0 send_seq=823 receive_seq=823 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3816 bytes_read=13883 bytes_retransmit=0 bytes_invalid=0 send_seq=610 receive_seq=610 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999678 adj=49999523 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4428 bytes_read=59872 bytes_retransmit=9 bytes_invalid=0 send_seq=651 receive_seq=651 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999239 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3343 bytes_read=176515 bytes_retransmit=0 bytes_invalid=0 send_seq=557 receive_seq=557 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999706 coil_temp=22.6 refs=0 mcu_temp=22.75 supply_voltage=2.978 sysload=0.13 cputime=21.287 memavail=3402880 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 524.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7309 bytes_read=64523 bytes_retransmit=9 bytes_invalid=0 send_seq=824 receive_seq=824 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3822 bytes_read=13898 bytes_retransmit=0 bytes_invalid=0 send_seq=611 receive_seq=611 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999672 adj=49999437 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4434 bytes_read=59972 bytes_retransmit=9 bytes_invalid=0 send_seq=652 receive_seq=652 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999188 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=28.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3349 bytes_read=176871 bytes_retransmit=0 bytes_invalid=0 send_seq=558 receive_seq=558 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999677 coil_temp=22.6 refs=0 mcu_temp=22.69 supply_voltage=2.978 sysload=0.13 cputime=21.338 memavail=3402880 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 525.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7315 bytes_read=64640 bytes_retransmit=9 bytes_invalid=0 send_seq=825 receive_seq=825 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3828 bytes_read=13913 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=49999665 adj=49999368 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4440 bytes_read=60100 bytes_retransmit=9 bytes_invalid=0 send_seq=653 receive_seq=653 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999441 adj=63999231 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3355 bytes_read=177227 bytes_retransmit=0 bytes_invalid=0 send_seq=559 receive_seq=559 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999670 coil_temp=22.6 refs=0 mcu_temp=22.63 supply_voltage=2.978 sysload=0.12 cputime=21.385 memavail=3395824 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 526.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7321 bytes_read=64772 bytes_retransmit=9 bytes_invalid=0 send_seq=826 receive_seq=826 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3834 bytes_read=13928 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=49999665 adj=49999296 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4446 bytes_read=60200 bytes_retransmit=9 bytes_invalid=0 send_seq=654 receive_seq=654 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999212 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3361 bytes_read=177583 bytes_retransmit=0 bytes_invalid=0 send_seq=560 receive_seq=560 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999675 coil_temp=22.6 refs=0 mcu_temp=22.57 supply_voltage=2.978 sysload=0.12 cputime=21.407 memavail=3402420 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 527.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7327 bytes_read=64875 bytes_retransmit=9 bytes_invalid=0 send_seq=827 receive_seq=827 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000562 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3840 bytes_read=13943 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=49999652 adj=49999372 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4452 bytes_read=60294 bytes_retransmit=9 bytes_invalid=0 send_seq=655 receive_seq=655 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999436 adj=63999196 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3367 bytes_read=177939 bytes_retransmit=0 bytes_invalid=0 send_seq=561 receive_seq=561 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999769 adj=31999692 coil_temp=22.6 refs=0 mcu_temp=22.51 supply_voltage=2.978 sysload=0.12 cputime=21.430 memavail=3402512 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 528.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7339 bytes_read=64994 bytes_retransmit=9 bytes_invalid=0 send_seq=829 receive_seq=829 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000574 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000019 bytes_write=3852 bytes_read=13988 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=49999625 adj=49999218 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4464 bytes_read=60442 bytes_retransmit=9 bytes_invalid=0 send_seq=657 receive_seq=657 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999432 adj=63999196 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3379 bytes_read=178311 bytes_retransmit=0 bytes_invalid=0 send_seq=563 receive_seq=563 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999682 coil_temp=22.6 refs=0 mcu_temp=22.46 supply_voltage=2.978 sysload=0.12 cputime=21.456 memavail=3402512 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 529.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7345 bytes_read=65126 bytes_retransmit=9 bytes_invalid=0 send_seq=830 receive_seq=830 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000580 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000019 bytes_write=3858 bytes_read=14004 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=49999611 adj=49998816 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4470 bytes_read=60535 bytes_retransmit=9 bytes_invalid=0 send_seq=658 receive_seq=658 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999431 adj=63999075 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3385 bytes_read=178664 bytes_retransmit=0 bytes_invalid=0 send_seq=564 receive_seq=564 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999622 coil_temp=22.6 refs=0 mcu_temp=22.39 supply_voltage=2.978 sysload=0.12 cputime=21.480 memavail=3402520 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 530.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7351 bytes_read=65243 bytes_retransmit=9 bytes_invalid=0 send_seq=831 receive_seq=831 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000592 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000019 bytes_write=3864 bytes_read=14020 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=49999602 adj=49998733 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4476 bytes_read=60628 bytes_retransmit=9 bytes_invalid=0 send_seq=659 receive_seq=659 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999432 adj=63999069 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3391 bytes_read=179009 bytes_retransmit=0 bytes_invalid=0 send_seq=565 receive_seq=565 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999608 coil_temp=22.6 refs=0 mcu_temp=22.35 supply_voltage=2.978 sysload=0.11 cputime=21.509 memavail=3402520 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 531.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7357 bytes_read=65346 bytes_retransmit=9 bytes_invalid=0 send_seq=832 receive_seq=832 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000593 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000019 bytes_write=3870 bytes_read=14036 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=49999592 adj=49998711 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4482 bytes_read=60754 bytes_retransmit=9 bytes_invalid=0 send_seq=660 receive_seq=660 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999431 adj=63999047 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3397 bytes_read=179353 bytes_retransmit=0 bytes_invalid=0 send_seq=566 receive_seq=566 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999769 adj=31999588 coil_temp=22.6 refs=0 mcu_temp=22.31 supply_voltage=2.978 sysload=0.11 cputime=21.559 memavail=3402520 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 532.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7363 bytes_read=65478 bytes_retransmit=9 bytes_invalid=0 send_seq=833 receive_seq=833 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000592 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000019 bytes_write=3876 bytes_read=14052 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=49999582 adj=49998744 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4488 bytes_read=60854 bytes_retransmit=9 bytes_invalid=0 send_seq=661 receive_seq=661 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999431 adj=63999081 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3403 bytes_read=179698 bytes_retransmit=0 bytes_invalid=0 send_seq=567 receive_seq=567 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999639 coil_temp=22.6 refs=0 mcu_temp=22.27 supply_voltage=2.978 sysload=0.11 cputime=21.609 memavail=3402520 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 533.9: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7369 bytes_read=65581 bytes_retransmit=9 bytes_invalid=0 send_seq=834 receive_seq=834 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000589 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000019 bytes_write=3882 bytes_read=14081 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=49999569 adj=49998761 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4494 bytes_read=60968 bytes_retransmit=9 bytes_invalid=0 send_seq=662 receive_seq=662 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999431 adj=63999124 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3409 bytes_read=180043 bytes_retransmit=0 bytes_invalid=0 send_seq=568 receive_seq=568 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999770 adj=31999656 coil_temp=22.5 refs=0 mcu_temp=22.24 supply_voltage=2.978 sysload=0.11 cputime=21.660 memavail=3402520 print_time=522.532 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.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 4102846160: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:11:45 2025 (1751044305.4 535.3)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/RatOS/btt-octopus-11: [Errno 2] No such file or directory: '/dev/RatOS/btt-octopus-11'
webhooks client 4124531200: New connection
webhooks client 4124531200: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Attempting MCU 'mcu' reset
Unable to issue reset command on MCU 'rpi'
Attempting MCU 'toolboard_t0' reset
Attempting MCU 'beacon' reset
webhooks client 4124531200: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:11:56 2025 (1751044316.2 546.1)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4103190320: New connection
webhooks client 4103190320: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
mcu 'mcu': got {'count': 257, 'sum': 352660, 'sumsq': 2856205, '#name': 'stats', '#sent_time': 550.596381134, '#receive_time': 550.625167634}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 553.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3595 bytes_read=7503 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=179999090 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=846 bytes_read=4707 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=49998150 adj=49997541 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5000 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=63998455 adj=63999216 Octopus_V1.1_F446: temp=0.0 EBB42_v1.2_T0: temp=0.0 raspberry_pi: temp=47.2 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=352 bytes_read=2049 bytes_retransmit=9 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32001139 adj=32003190 coil_temp=22.4 refs=0 mcu_temp=21.66 supply_voltage=2.978 sysload=0.34 cputime=30.710 memavail=3402188 print_time=18.261 buffer_time=0.248 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4103190320
webhooks: registering remote method 'reboot_machine' for connection id: 4103190320
webhooks: registering remote method 'pause_job_queue' for connection id: 4103190320
webhooks: registering remote method 'start_job_queue' for connection id: 4103190320
Stats 554.5: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3601 bytes_read=7606 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=179998967 rpi: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=852 bytes_read=4723 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=49998507 adj=49998051 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1464 bytes_read=5143 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=63999146 adj=63997900 Octopus_V1.1_F446: temp=25.1 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=358 bytes_read=2405 bytes_retransmit=9 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999903 adj=32000072 coil_temp=22.4 refs=0 mcu_temp=21.66 supply_voltage=2.977 sysload=0.34 cputime=30.796 memavail=3404200 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 556.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3613 bytes_read=7827 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=180000876 rpi: mcu_awake=0.004 mcu_task_avg=0.000023 mcu_task_stddev=0.000013 bytes_write=858 bytes_read=4753 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=49998371 adj=49998851 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1476 bytes_read=5315 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=63999657 adj=63999337 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=370 bytes_read=2981 bytes_retransmit=9 bytes_invalid=0 send_seq=63 receive_seq=63 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000012 adj=31998413 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.31 cputime=30.897 memavail=3399068 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 557.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3619 bytes_read=7930 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=180000605 rpi: mcu_awake=0.004 mcu_task_avg=0.000023 mcu_task_stddev=0.000013 bytes_write=864 bytes_read=4769 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=49998846 adj=49997270 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1482 bytes_read=5415 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=63999646 adj=63998875 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=376 bytes_read=3337 bytes_retransmit=9 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999923 adj=31998492 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.31 cputime=30.949 memavail=3398592 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 558.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3625 bytes_read=8033 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=180000424 rpi: mcu_awake=0.004 mcu_task_avg=0.000023 mcu_task_stddev=0.000013 bytes_write=870 bytes_read=4785 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=49998895 adj=49998863 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1488 bytes_read=5543 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=63999564 adj=63999218 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=382 bytes_read=3693 bytes_retransmit=9 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999866 adj=31998763 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.31 cputime=30.997 memavail=3398708 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 559.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3631 bytes_read=8160 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=180000385 rpi: mcu_awake=0.004 mcu_task_avg=0.000023 mcu_task_stddev=0.000013 bytes_write=876 bytes_read=4801 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=49998929 adj=49999094 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1494 bytes_read=5643 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=63999560 adj=63999244 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=388 bytes_read=4049 bytes_retransmit=9 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999880 adj=31998980 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.31 cputime=31.047 memavail=3398692 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 560.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3637 bytes_read=8256 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=180000417 rpi: mcu_awake=0.004 mcu_task_avg=0.000023 mcu_task_stddev=0.000013 bytes_write=882 bytes_read=4817 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=49998927 adj=49999147 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=5757 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=63999552 adj=63999317 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=394 bytes_read=4405 bytes_retransmit=9 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999895 adj=31999241 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.31 cputime=31.097 memavail=3398692 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 561.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3643 bytes_read=8373 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=180000489 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000016 bytes_write=888 bytes_read=4846 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=49998868 adj=49999029 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=5885 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=63999512 adj=63999282 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=400 bytes_read=4761 bytes_retransmit=9 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999842 adj=31999408 coil_temp=22.4 refs=0 mcu_temp=21.67 supply_voltage=2.977 sysload=0.36 cputime=31.129 memavail=3399584 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 562.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3649 bytes_read=8505 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=180000377 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000016 bytes_write=894 bytes_read=4862 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=49998765 adj=49998705 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=5985 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=63999470 adj=63999091 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=406 bytes_read=5117 bytes_retransmit=9 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999813 adj=31999303 coil_temp=22.4 refs=0 mcu_temp=21.68 supply_voltage=2.977 sysload=0.36 cputime=31.152 memavail=3399600 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 563.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3655 bytes_read=8608 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=180000304 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000016 bytes_write=900 bytes_read=4878 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=49998723 adj=49998452 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6085 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=63999487 adj=63999162 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=412 bytes_read=5473 bytes_retransmit=9 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999795 adj=31999393 coil_temp=22.4 refs=0 mcu_temp=21.70 supply_voltage=2.977 sysload=0.36 cputime=31.174 memavail=3399600 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 564.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3661 bytes_read=8711 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=180000262 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000016 bytes_write=906 bytes_read=4894 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=49998702 adj=49998425 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6213 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=63999466 adj=63999369 Octopus_V1.1_F446: temp=25.2 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=418 bytes_read=5829 bytes_retransmit=9 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999783 adj=31999467 coil_temp=22.4 refs=0 mcu_temp=21.72 supply_voltage=2.977 sysload=0.36 cputime=31.198 memavail=3399352 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 565.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3667 bytes_read=8843 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=180000236 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000016 bytes_write=912 bytes_read=4910 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=49998695 adj=49998442 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=6327 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=63999450 adj=63999353 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=424 bytes_read=6185 bytes_retransmit=9 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999781 adj=31999522 coil_temp=22.4 refs=0 mcu_temp=21.75 supply_voltage=2.977 sysload=0.36 cputime=31.222 memavail=3399352 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 566.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3673 bytes_read=8960 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=180000280 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=924 bytes_read=4955 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=49998748 adj=49998491 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=6427 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=63999457 adj=63999359 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=430 bytes_read=6541 bytes_retransmit=9 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999794 adj=31999586 coil_temp=22.4 refs=0 mcu_temp=21.78 supply_voltage=2.977 sysload=0.33 cputime=31.268 memavail=3401720 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 567.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3679 bytes_read=9063 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=180000445 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=930 bytes_read=4971 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=49998780 adj=49998702 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=6555 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=63999467 adj=63999319 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=436 bytes_read=6897 bytes_retransmit=9 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999805 adj=31999643 coil_temp=22.4 refs=0 mcu_temp=21.81 supply_voltage=2.977 sysload=0.33 cputime=31.317 memavail=3401056 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 568.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3685 bytes_read=9195 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=180000496 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=936 bytes_read=4987 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=49998799 adj=49998623 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=6655 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=63999475 adj=63999094 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=442 bytes_read=7253 bytes_retransmit=9 bytes_invalid=0 send_seq=75 receive_seq=75 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999807 adj=31999576 coil_temp=22.4 refs=0 mcu_temp=21.83 supply_voltage=2.977 sysload=0.33 cputime=31.367 memavail=3401056 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 569.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3691 bytes_read=9298 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=180000472 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=942 bytes_read=5003 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=49998822 adj=49998657 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1554 bytes_read=6755 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=63999507 adj=63999098 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=448 bytes_read=7609 bytes_retransmit=9 bytes_invalid=0 send_seq=76 receive_seq=76 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999819 adj=31999580 coil_temp=22.4 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=0.33 cputime=31.417 memavail=3401056 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 570.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3697 bytes_read=9401 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=180000491 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=948 bytes_read=5019 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=49998837 adj=49998808 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1560 bytes_read=6897 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=63999525 adj=63999349 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=454 bytes_read=7965 bytes_retransmit=9 bytes_invalid=0 send_seq=77 receive_seq=77 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999843 adj=31999697 coil_temp=22.4 refs=0 mcu_temp=21.88 supply_voltage=2.977 sysload=0.33 cputime=31.467 memavail=3401056 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 571.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3703 bytes_read=9547 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=180000489 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=954 bytes_read=5048 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=49998848 adj=49998831 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1566 bytes_read=6997 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=63999524 adj=63999405 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=460 bytes_read=8321 bytes_retransmit=9 bytes_invalid=0 send_seq=78 receive_seq=78 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999842 adj=31999806 coil_temp=22.4 refs=0 mcu_temp=21.89 supply_voltage=2.977 sysload=0.31 cputime=31.518 memavail=3400832 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 572.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3709 bytes_read=9650 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=180000574 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=960 bytes_read=5064 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=49998847 adj=49998861 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1572 bytes_read=7097 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=63999597 adj=63999390 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=466 bytes_read=8677 bytes_retransmit=9 bytes_invalid=0 send_seq=79 receive_seq=79 retransmit_seq=17 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999998 adj=31999791 coil_temp=22.4 refs=0 mcu_temp=21.91 supply_voltage=2.977 sysload=0.31 cputime=31.567 memavail=3400832 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 573.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3715 bytes_read=9753 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=180000561 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=966 bytes_read=5080 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=49998856 adj=49998684 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1578 bytes_read=7225 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=63999592 adj=63999612 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=472 bytes_read=9033 bytes_retransmit=9 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=17 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999966 adj=32000546 coil_temp=22.4 refs=0 mcu_temp=21.93 supply_voltage=2.977 sysload=0.31 cputime=31.633 memavail=3400832 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 574.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3721 bytes_read=9885 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=180000551 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=972 bytes_read=5096 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=49998861 adj=49998757 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1584 bytes_read=7325 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=63999618 adj=63999552 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=478 bytes_read=9389 bytes_retransmit=9 bytes_invalid=0 send_seq=81 receive_seq=81 retransmit_seq=17 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999944 adj=32000215 coil_temp=22.4 refs=0 mcu_temp=21.95 supply_voltage=2.977 sysload=0.31 cputime=31.683 memavail=3400832 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 575.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3727 bytes_read=9988 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=180000534 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=978 bytes_read=5112 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=49998874 adj=49998792 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1590 bytes_read=7439 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=63999625 adj=63999690 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=484 bytes_read=9745 bytes_retransmit=9 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=17 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999934 adj=32000011 coil_temp=22.4 refs=0 mcu_temp=21.96 supply_voltage=2.977 sysload=0.31 cputime=31.732 memavail=3400856 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 576.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3733 bytes_read=10105 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=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=984 bytes_read=5141 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=49998887 adj=49998880 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1596 bytes_read=7567 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=63999614 adj=63999703 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=490 bytes_read=10101 bytes_retransmit=9 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=17 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999918 adj=31999929 coil_temp=22.4 refs=0 mcu_temp=21.97 supply_voltage=2.977 sysload=0.28 cputime=31.783 memavail=3400856 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 577.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3739 bytes_read=10237 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=180000561 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=990 bytes_read=5157 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=49998916 adj=49998857 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1602 bytes_read=7667 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=63999598 adj=63999477 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=496 bytes_read=10457 bytes_retransmit=9 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999902 adj=31999763 coil_temp=22.5 refs=0 mcu_temp=21.97 supply_voltage=2.977 sysload=0.28 cputime=31.833 memavail=3398884 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 578.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3745 bytes_read=10340 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=180000550 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=996 bytes_read=5173 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=49998892 adj=49999035 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1608 bytes_read=7767 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=63999585 adj=63999385 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=502 bytes_read=10797 bytes_retransmit=9 bytes_invalid=0 send_seq=85 receive_seq=85 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999893 adj=31999687 coil_temp=22.5 refs=0 mcu_temp=21.99 supply_voltage=2.977 sysload=0.28 cputime=31.867 memavail=3400024 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 579.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3751 bytes_read=10443 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=180000518 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=1002 bytes_read=5189 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=49998871 adj=49998827 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1614 bytes_read=7895 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=63999566 adj=63999329 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=508 bytes_read=11153 bytes_retransmit=9 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999878 adj=31999669 coil_temp=22.5 refs=0 mcu_temp=22.01 supply_voltage=2.977 sysload=0.28 cputime=31.890 memavail=3399800 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 580.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3757 bytes_read=10575 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=180000482 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=1008 bytes_read=5205 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=49998846 adj=49998718 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1620 bytes_read=8009 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=63999552 adj=63999297 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=514 bytes_read=11509 bytes_retransmit=9 bytes_invalid=0 send_seq=87 receive_seq=87 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999868 adj=31999644 coil_temp=22.5 refs=0 mcu_temp=22.03 supply_voltage=2.977 sysload=0.28 cputime=31.915 memavail=3399804 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 581.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3763 bytes_read=10692 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=180000509 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000018 bytes_write=1014 bytes_read=5234 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=49998827 adj=49998619 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1626 bytes_read=8109 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=63999537 adj=63999308 Octopus_V1.1_F446: temp=25.4 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=520 bytes_read=11865 bytes_retransmit=9 bytes_invalid=0 send_seq=88 receive_seq=88 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999857 adj=31999653 coil_temp=22.5 refs=0 mcu_temp=22.05 supply_voltage=2.977 sysload=0.34 cputime=31.939 memavail=3399820 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 582.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3769 bytes_read=10795 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=180000541 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000018 bytes_write=1020 bytes_read=5250 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=49998812 adj=49998450 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1632 bytes_read=8237 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=63999525 adj=63999152 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=526 bytes_read=12221 bytes_retransmit=9 bytes_invalid=0 send_seq=89 receive_seq=89 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999848 adj=31999571 coil_temp=22.5 refs=0 mcu_temp=22.07 supply_voltage=2.977 sysload=0.34 cputime=31.962 memavail=3399820 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 583.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3775 bytes_read=10923 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=180000538 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000018 bytes_write=1026 bytes_read=5266 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=49998824 adj=49998329 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1638 bytes_read=8337 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=63999520 adj=63999028 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=532 bytes_read=12577 bytes_retransmit=9 bytes_invalid=0 send_seq=90 receive_seq=90 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999843 adj=31999512 coil_temp=22.5 refs=0 mcu_temp=22.08 supply_voltage=2.978 sysload=0.34 cputime=32.003 memavail=3399820 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 584.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3781 bytes_read=11019 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=180000537 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000018 bytes_write=1032 bytes_read=5282 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=49998826 adj=49998507 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1644 bytes_read=8437 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=63999517 adj=63999073 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=538 bytes_read=12933 bytes_retransmit=9 bytes_invalid=0 send_seq=91 receive_seq=91 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999839 adj=31999539 coil_temp=22.5 refs=0 mcu_temp=22.10 supply_voltage=2.978 sysload=0.34 cputime=32.052 memavail=3399820 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 585.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3787 bytes_read=11122 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=180000583 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000018 bytes_write=1038 bytes_read=5298 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=49998826 adj=49998566 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1650 bytes_read=8579 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=63999512 adj=63999116 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=544 bytes_read=13289 bytes_retransmit=9 bytes_invalid=0 send_seq=92 receive_seq=92 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999841 adj=31999563 coil_temp=22.5 refs=0 mcu_temp=22.11 supply_voltage=2.978 sysload=0.34 cputime=32.101 memavail=3399820 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 586.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3793 bytes_read=11268 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=180000611 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 bytes_write=1044 bytes_read=5327 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=49998826 adj=49998494 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1656 bytes_read=8679 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=63999508 adj=63999001 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=550 bytes_read=13645 bytes_retransmit=9 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999836 adj=31999562 coil_temp=22.5 refs=0 mcu_temp=22.11 supply_voltage=2.978 sysload=0.31 cputime=32.152 memavail=3399820 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 587.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3799 bytes_read=11371 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=180000604 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 bytes_write=1050 bytes_read=5343 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=49998829 adj=49998475 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1662 bytes_read=8779 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=63999505 adj=63998962 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=556 bytes_read=14001 bytes_retransmit=9 bytes_invalid=0 send_seq=94 receive_seq=94 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999834 adj=31999526 coil_temp=22.5 refs=0 mcu_temp=22.12 supply_voltage=2.978 sysload=0.31 cputime=32.201 memavail=3399568 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 588.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3805 bytes_read=11474 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=180000614 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 bytes_write=1056 bytes_read=5359 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=49998834 adj=49998557 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1668 bytes_read=8907 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=63999517 adj=63999043 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=562 bytes_read=14357 bytes_retransmit=9 bytes_invalid=0 send_seq=95 receive_seq=95 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999834 adj=31999567 coil_temp=22.5 refs=0 mcu_temp=22.14 supply_voltage=2.978 sysload=0.31 cputime=32.250 memavail=3399568 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 589.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3811 bytes_read=11606 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=180000600 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 bytes_write=1062 bytes_read=5375 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=49998840 adj=49998604 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1674 bytes_read=9007 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=63999511 adj=63999172 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=568 bytes_read=14713 bytes_retransmit=9 bytes_invalid=0 send_seq=96 receive_seq=96 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999829 adj=31999596 coil_temp=22.5 refs=0 mcu_temp=22.14 supply_voltage=2.978 sysload=0.31 cputime=32.300 memavail=3399568 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 590.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3817 bytes_read=11709 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=180000590 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 bytes_write=1068 bytes_read=5391 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=49998851 adj=49998702 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1680 bytes_read=9121 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=63999505 adj=63999196 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=574 bytes_read=15069 bytes_retransmit=9 bytes_invalid=0 send_seq=97 receive_seq=97 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999824 adj=31999604 coil_temp=22.5 refs=0 mcu_temp=22.16 supply_voltage=2.978 sysload=0.31 cputime=32.348 memavail=3399568 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 591.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3823 bytes_read=11812 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=180000580 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 bytes_write=1074 bytes_read=5420 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=49998853 adj=49998821 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1686 bytes_read=9249 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=63999499 adj=63999199 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=580 bytes_read=15425 bytes_retransmit=9 bytes_invalid=0 send_seq=98 receive_seq=98 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999821 adj=31999607 coil_temp=22.5 refs=0 mcu_temp=22.18 supply_voltage=2.978 sysload=0.29 cputime=32.397 memavail=3399568 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 592.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3829 bytes_read=11958 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=180000578 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 bytes_write=1080 bytes_read=5436 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=49998857 adj=49998827 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1692 bytes_read=9349 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=63999497 adj=63999207 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=586 bytes_read=15781 bytes_retransmit=9 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999818 adj=31999625 coil_temp=22.5 refs=0 mcu_temp=22.18 supply_voltage=2.978 sysload=0.29 cputime=32.446 memavail=3399568 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 593.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3835 bytes_read=12061 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=180000574 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 bytes_write=1086 bytes_read=5452 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=49998861 adj=49998834 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1698 bytes_read=9449 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=63999492 adj=63999218 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=592 bytes_read=16137 bytes_retransmit=9 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999814 adj=31999630 coil_temp=22.5 refs=0 mcu_temp=22.19 supply_voltage=2.978 sysload=0.29 cputime=32.492 memavail=3399584 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 594.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3841 bytes_read=12164 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=180000574 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 bytes_write=1092 bytes_read=5468 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=49998871 adj=49998846 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1704 bytes_read=9577 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=63999491 adj=63999202 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=598 bytes_read=16493 bytes_retransmit=9 bytes_invalid=0 send_seq=101 receive_seq=101 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999813 adj=31999615 coil_temp=22.5 refs=0 mcu_temp=22.20 supply_voltage=2.978 sysload=0.29 cputime=32.542 memavail=3399584 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 595.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3847 bytes_read=12296 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=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 bytes_write=1098 bytes_read=5484 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=49998871 adj=49998904 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1710 bytes_read=9691 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=63999491 adj=63999211 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=604 bytes_read=16849 bytes_retransmit=9 bytes_invalid=0 send_seq=102 receive_seq=102 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999812 adj=31999636 coil_temp=22.5 refs=0 mcu_temp=22.21 supply_voltage=2.978 sysload=0.29 cputime=32.582 memavail=3395344 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 596.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3853 bytes_read=12399 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=180000561 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1104 bytes_read=5513 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=49998861 adj=49998863 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1716 bytes_read=9791 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=63999487 adj=63999239 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=610 bytes_read=17205 bytes_retransmit=9 bytes_invalid=0 send_seq=103 receive_seq=103 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999809 adj=31999649 coil_temp=22.5 refs=0 mcu_temp=22.23 supply_voltage=2.978 sysload=0.26 cputime=32.606 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 597.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3859 bytes_read=12516 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=180000542 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1110 bytes_read=5529 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=49998852 adj=49998755 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1722 bytes_read=9919 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=63999481 adj=63999254 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=616 bytes_read=17561 bytes_retransmit=9 bytes_invalid=0 send_seq=104 receive_seq=104 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999804 adj=31999653 coil_temp=22.5 refs=0 mcu_temp=22.23 supply_voltage=2.978 sysload=0.26 cputime=32.630 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 598.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3865 bytes_read=12648 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=180000529 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1116 bytes_read=5545 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=49998844 adj=49998709 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1728 bytes_read=10019 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=63999476 adj=63999267 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=622 bytes_read=17917 bytes_retransmit=9 bytes_invalid=0 send_seq=105 receive_seq=105 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999802 adj=31999689 coil_temp=22.5 refs=0 mcu_temp=22.24 supply_voltage=2.978 sysload=0.26 cputime=32.654 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 599.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3871 bytes_read=12751 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=180000516 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1122 bytes_read=5561 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=49998838 adj=49998666 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1734 bytes_read=10119 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=63999475 adj=63999269 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=628 bytes_read=18273 bytes_retransmit=9 bytes_invalid=0 send_seq=106 receive_seq=106 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999799 adj=31999696 coil_temp=22.5 refs=0 mcu_temp=22.25 supply_voltage=2.978 sysload=0.26 cputime=32.677 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 600.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3877 bytes_read=12854 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=180000503 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1128 bytes_read=5577 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=49998833 adj=49998653 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1740 bytes_read=10259 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=63999478 adj=63999311 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=634 bytes_read=18629 bytes_retransmit=9 bytes_invalid=0 send_seq=107 receive_seq=107 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999796 adj=31999695 coil_temp=22.5 refs=0 mcu_temp=22.25 supply_voltage=2.978 sysload=0.26 cputime=32.712 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 601.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3883 bytes_read=12986 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=180000507 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=1134 bytes_read=5606 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=49998843 adj=49998642 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1746 bytes_read=10350 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=63999476 adj=63999388 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=640 bytes_read=18985 bytes_retransmit=9 bytes_invalid=0 send_seq=108 receive_seq=108 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999795 adj=31999685 coil_temp=22.5 refs=0 mcu_temp=22.27 supply_voltage=2.977 sysload=0.24 cputime=32.762 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 602.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3889 bytes_read=13103 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=180000510 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=1140 bytes_read=5622 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=49998856 adj=49998745 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1752 bytes_read=10443 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=63999476 adj=63999330 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=646 bytes_read=19341 bytes_retransmit=9 bytes_invalid=0 send_seq=109 receive_seq=109 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999794 adj=31999673 coil_temp=22.5 refs=0 mcu_temp=22.27 supply_voltage=2.978 sysload=0.24 cputime=32.813 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 603.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3895 bytes_read=13206 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=180000510 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=1146 bytes_read=5638 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=49998865 adj=49998867 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1758 bytes_read=10562 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=63999475 adj=63999311 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=652 bytes_read=19697 bytes_retransmit=9 bytes_invalid=0 send_seq=110 receive_seq=110 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999795 adj=31999670 coil_temp=22.5 refs=0 mcu_temp=22.27 supply_voltage=2.978 sysload=0.24 cputime=32.864 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 604.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3901 bytes_read=13338 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=180000512 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=1152 bytes_read=5654 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=49998871 adj=49998916 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1764 bytes_read=10655 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=63999488 adj=63999291 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=658 bytes_read=20053 bytes_retransmit=9 bytes_invalid=0 send_seq=111 receive_seq=111 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999797 adj=31999681 coil_temp=22.5 refs=0 mcu_temp=22.29 supply_voltage=2.978 sysload=0.24 cputime=32.913 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 605.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3907 bytes_read=13441 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=180000515 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=1158 bytes_read=5670 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=49998874 adj=49998933 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1770 bytes_read=10768 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=63999486 adj=63999424 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=664 bytes_read=20409 bytes_retransmit=9 bytes_invalid=0 send_seq=112 receive_seq=112 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999795 adj=31999712 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.978 sysload=0.24 cputime=32.962 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 606.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3913 bytes_read=13544 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=180000514 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000023 bytes_write=1164 bytes_read=5699 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=49998875 adj=49998903 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1776 bytes_read=10896 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=63999484 adj=63999359 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=670 bytes_read=20765 bytes_retransmit=9 bytes_invalid=0 send_seq=113 receive_seq=113 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999794 adj=31999685 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.978 sysload=0.22 cputime=33.011 memavail=3403020 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 607.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3919 bytes_read=13684 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=180000524 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000023 bytes_write=1170 bytes_read=5715 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=49998888 adj=49998869 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1782 bytes_read=10996 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=63999483 adj=63999329 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=676 bytes_read=21121 bytes_retransmit=9 bytes_invalid=0 send_seq=114 receive_seq=114 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999794 adj=31999676 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.978 sysload=0.22 cputime=33.060 memavail=3403036 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 608.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3925 bytes_read=13782 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=180000559 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000023 bytes_write=1176 bytes_read=5731 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=49998889 adj=49998945 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1788 bytes_read=11096 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=63999483 adj=63999276 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=682 bytes_read=21477 bytes_retransmit=9 bytes_invalid=0 send_seq=115 receive_seq=115 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999796 adj=31999665 coil_temp=22.5 refs=0 mcu_temp=22.33 supply_voltage=2.978 sysload=0.22 cputime=33.109 memavail=3403036 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 609.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3931 bytes_read=13885 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=180000562 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000023 bytes_write=1182 bytes_read=5747 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=49998890 adj=49998801 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1794 bytes_read=11224 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=63999481 adj=63999146 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=688 bytes_read=21833 bytes_retransmit=9 bytes_invalid=0 send_seq=116 receive_seq=116 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999796 adj=31999623 coil_temp=22.5 refs=0 mcu_temp=22.34 supply_voltage=2.978 sysload=0.22 cputime=33.160 memavail=3403036 print_time=18.261 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 610.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3937 bytes_read=14017 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=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000023 bytes_write=1188 bytes_read=5763 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=49998895 adj=49998787 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1800 bytes_read=11338 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=63999482 adj=63999146 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=694 bytes_read=22189 bytes_retransmit=9 bytes_invalid=0 send_seq=117 receive_seq=117 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999797 adj=31999634 coil_temp=22.5 refs=0 mcu_temp=22.36 supply_voltage=2.978 sysload=0.22 cputime=33.226 memavail=3402056 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 611.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3943 bytes_read=14120 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=180000568 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=1194 bytes_read=5792 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=49998898 adj=49998818 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1806 bytes_read=11438 bytes_retransmit=9 bytes_invalid=0 send_seq=214 receive_seq=214 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999481 adj=63999169 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=700 bytes_read=22545 bytes_retransmit=9 bytes_invalid=0 send_seq=118 receive_seq=118 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999796 adj=31999654 coil_temp=22.5 refs=0 mcu_temp=22.37 supply_voltage=2.978 sysload=0.20 cputime=33.276 memavail=3402056 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 612.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3949 bytes_read=14237 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=180000576 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=1200 bytes_read=5808 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=49998901 adj=49998824 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1812 bytes_read=11566 bytes_retransmit=9 bytes_invalid=0 send_seq=215 receive_seq=215 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999479 adj=63999182 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=706 bytes_read=22901 bytes_retransmit=9 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999796 adj=31999657 coil_temp=22.5 refs=0 mcu_temp=22.37 supply_voltage=2.978 sysload=0.20 cputime=33.323 memavail=3396264 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 613.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3955 bytes_read=14369 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000581 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=1206 bytes_read=5824 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=49998897 adj=49998812 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1818 bytes_read=11666 bytes_retransmit=9 bytes_invalid=0 send_seq=216 receive_seq=216 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999475 adj=63999150 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=712 bytes_read=23257 bytes_retransmit=9 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999795 adj=31999651 coil_temp=22.5 refs=0 mcu_temp=22.38 supply_voltage=2.978 sysload=0.20 cputime=33.348 memavail=3399040 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 614.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3961 bytes_read=14472 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000567 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=1212 bytes_read=5840 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=49998896 adj=49998730 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1824 bytes_read=11766 bytes_retransmit=9 bytes_invalid=0 send_seq=217 receive_seq=217 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999471 adj=63999111 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=718 bytes_read=23613 bytes_retransmit=9 bytes_invalid=0 send_seq=121 receive_seq=121 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999794 adj=31999640 coil_temp=22.5 refs=0 mcu_temp=22.40 supply_voltage=2.977 sysload=0.20 cputime=33.372 memavail=3399040 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 615.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3967 bytes_read=14575 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000556 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 bytes_write=1218 bytes_read=5856 bytes_retransmit=0 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998894 adj=49998765 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1830 bytes_read=11908 bytes_retransmit=9 bytes_invalid=0 send_seq=218 receive_seq=218 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999467 adj=63999165 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=724 bytes_read=23969 bytes_retransmit=9 bytes_invalid=0 send_seq=122 receive_seq=122 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999792 adj=31999665 coil_temp=22.5 refs=0 mcu_temp=22.40 supply_voltage=2.977 sysload=0.20 cputime=33.396 memavail=3399040 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 616.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3973 bytes_read=14707 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000545 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1224 bytes_read=5885 bytes_retransmit=0 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998894 adj=49998775 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1836 bytes_read=12008 bytes_retransmit=9 bytes_invalid=0 send_seq=219 receive_seq=219 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999465 adj=63999193 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=730 bytes_read=24325 bytes_retransmit=9 bytes_invalid=0 send_seq=123 receive_seq=123 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999791 adj=31999679 coil_temp=22.5 refs=0 mcu_temp=22.41 supply_voltage=2.978 sysload=0.19 cputime=33.421 memavail=3398548 print_time=74.638 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 617.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4292 bytes_read=14932 bytes_retransmit=9 bytes_invalid=0 send_seq=365 receive_seq=365 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000538 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1230 bytes_read=5901 bytes_retransmit=0 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998894 adj=49998801 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1842 bytes_read=12108 bytes_retransmit=9 bytes_invalid=0 send_seq=220 receive_seq=220 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999469 adj=63999230 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=736 bytes_read=24681 bytes_retransmit=9 bytes_invalid=0 send_seq=124 receive_seq=124 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999790 adj=31999692 coil_temp=22.5 refs=0 mcu_temp=22.41 supply_voltage=2.978 sysload=0.19 cputime=33.466 memavail=3402380 print_time=82.001 buffer_time=0.357 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4103190320
Received 553.797753: b'{"id":4046284424,"method":"objects/list","params":{}}'
Received 553.799681: b'{"id":4046283128,"method":"objects/query","params":{"objects":{"configfile":null}}}'
Received 554.069284: b'{"id":4046283824,"method":"register_remote_method","params":{"response_template":{"method":"shutdown_machine"},"remote_method":"shutdown_machine"}}'
Received 554.070992: b'{"id":4046283824,"method":"register_remote_method","params":{"response_template":{"method":"reboot_machine"},"remote_method":"reboot_machine"}}'
Received 554.072049: b'{"id":4046283824,"method":"register_remote_method","params":{"response_template":{"method":"pause_job_queue"},"remote_method":"pause_job_queue"}}'
Received 554.072931: b'{"id":4046283824,"method":"register_remote_method","params":{"response_template":{"method":"start_job_queue"},"remote_method":"start_job_queue"}}'
Received 554.075741: b'{"id":4046409080,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 554.075741: b'{"id":4046408816,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 554.080365: b'{"id":4046283416,"method":"info","params":{}}'
Received 554.080365: b'{"id":4046409032,"method":"objects/list","params":{}}'
Received 554.085725: b'{"id":4046283464,"method":"info","params":{}}'
Received 554.085725: b'{"id":4046283128,"method":"objects/list","params":{}}'
Received 554.095425: b'{"id":4046286128,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 554.330666: b'{"id":4046286248,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 554.583703: b'{"id":4046286176,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 554.830291: b'{"id":4046286176,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 555.438272: b'{"id":4046232304,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 556.140899: b'{"id":4046232736,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 609.899855: b'{"id":4081184432,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 617.040214: b'{"id":4081181216,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 X+10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[210.0, 200.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
Reactor garbage collection: (615.694632151, 572.951041084, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=4066972909 clock_est=(590.807 2790013309 49998894.597) min_half_rtt=0.000051 min_rtt_time=551.110 time_avg=590.807(437.865) clock_avg=2790013309.129(21892778703.091) pred_variance=202169916.201 clock_adj=(-0.519 49998807.000)
Dumping serial stats: bytes_write=1236 bytes_read=5913 bytes_retransmit=0 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 550.924833 550.924833 9: seq: 10, identify offset=2560 count=40
Sent 1 550.925172 550.925172 9: seq: 11, identify offset=2600 count=40
Sent 2 550.925514 550.925514 9: seq: 12, identify offset=2640 count=40
Sent 3 550.925856 550.925856 9: seq: 13, identify offset=2680 count=40
Sent 4 550.926225 550.926225 9: seq: 14, identify offset=2720 count=40
Sent 5 550.926571 550.926571 9: seq: 15, identify offset=2760 count=40
Sent 6 550.926916 550.926916 9: seq: 16, identify offset=2800 count=40
Sent 7 550.927258 550.927258 9: seq: 17, identify offset=2840 count=40
Sent 8 550.927603 550.927603 9: seq: 18, identify offset=2880 count=40
Sent 9 550.927946 550.927946 9: seq: 19, identify offset=2920 count=40
Sent 10 550.928289 550.928289 9: seq: 1a, identify offset=2960 count=40
Sent 11 550.928634 550.928634 9: seq: 1b, identify offset=3000 count=40
Sent 12 550.928975 550.928975 9: seq: 1c, identify offset=3040 count=40
Sent 13 550.929315 550.929315 9: seq: 1d, identify offset=3080 count=40
Sent 14 550.929656 550.929656 9: seq: 1e, identify offset=3120 count=40
Sent 15 550.930022 550.930022 9: seq: 1f, identify offset=3160 count=40
Sent 16 550.930365 550.930365 9: seq: 10, identify offset=3200 count=40
Sent 17 550.930707 550.930707 9: seq: 11, identify offset=3240 count=40
Sent 18 550.931050 550.931050 9: seq: 12, identify offset=3265 count=40
Sent 19 550.957438 550.957438 6: seq: 13, get_uptime
Sent 20 551.008659 551.008659 6: seq: 14, get_clock
Sent 21 551.059566 551.059566 6: seq: 15, get_clock
Sent 22 551.110230 551.110230 6: seq: 16, get_clock
Sent 23 551.160776 551.160776 6: seq: 17, get_clock
Sent 24 551.211715 551.211715 6: seq: 18, get_clock
Sent 25 551.262387 551.262387 6: seq: 19, get_clock
Sent 26 551.313289 551.313289 6: seq: 1a, get_clock
Sent 27 551.363976 551.363976 6: seq: 1b, get_clock
Sent 28 551.372425 551.372425 6: seq: 1c, get_clock
Sent 29 552.356962 552.356962 6: seq: 1d, get_clock
Sent 30 552.639664 552.639664 6: seq: 1e, get_config
Sent 31 552.640423 552.640423 7: seq: 1f, allocate_oids count=0
Sent 32 552.640613 552.640613 11: seq: 10, finalize_config crc=3912464276
Sent 33 552.640761 552.640761 6: seq: 11, get_config
Sent 34 553.342095 553.342095 6: seq: 12, get_clock
Sent 35 554.326152 554.326152 6: seq: 13, get_clock
Sent 36 555.310252 555.310252 6: seq: 14, get_clock
Sent 37 556.295167 556.295167 6: seq: 15, get_clock
Sent 38 557.280082 557.280082 6: seq: 16, get_clock
Sent 39 558.264262 558.264262 6: seq: 17, get_clock
Sent 40 559.248562 559.248562 6: seq: 18, get_clock
Sent 41 560.232815 560.232815 6: seq: 19, get_clock
Sent 42 561.217164 561.217164 6: seq: 1a, get_clock
Sent 43 562.201426 562.201426 6: seq: 1b, get_clock
Sent 44 563.185817 563.185817 6: seq: 1c, get_clock
Sent 45 564.170710 564.170710 6: seq: 1d, get_clock
Sent 46 565.155600 565.155600 6: seq: 1e, get_clock
Sent 47 566.140070 566.140070 6: seq: 1f, get_clock
Sent 48 567.125029 567.125029 6: seq: 10, get_clock
Sent 49 568.109279 568.109279 6: seq: 11, get_clock
Sent 50 569.093661 569.093661 6: seq: 12, get_clock
Sent 51 570.078112 570.078112 6: seq: 13, get_clock
Sent 52 571.062441 571.062441 6: seq: 14, get_clock
Sent 53 572.046670 572.046670 6: seq: 15, get_clock
Sent 54 573.030953 573.030953 6: seq: 16, get_clock
Sent 55 574.015241 574.015241 6: seq: 17, get_clock
Sent 56 574.999482 574.999482 6: seq: 18, get_clock
Sent 57 575.983982 575.983982 6: seq: 19, get_clock
Sent 58 576.968578 576.968578 6: seq: 1a, get_clock
Sent 59 577.953375 577.953375 6: seq: 1b, get_clock
Sent 60 578.937560 578.937560 6: seq: 1c, get_clock
Sent 61 579.921671 579.921671 6: seq: 1d, get_clock
Sent 62 580.905943 580.905943 6: seq: 1e, get_clock
Sent 63 581.890199 581.890199 6: seq: 1f, get_clock
Sent 64 582.875330 582.875330 6: seq: 10, get_clock
Sent 65 583.859393 583.859393 6: seq: 11, get_clock
Sent 66 584.843676 584.843676 6: seq: 12, get_clock
Sent 67 585.827842 585.827842 6: seq: 13, get_clock
Sent 68 586.812124 586.812124 6: seq: 14, get_clock
Sent 69 587.796310 587.796310 6: seq: 15, get_clock
Sent 70 588.781315 588.781315 6: seq: 16, get_clock
Sent 71 589.765455 589.765455 6: seq: 17, get_clock
Sent 72 590.750090 590.750090 6: seq: 18, get_clock
Sent 73 591.734292 591.734292 6: seq: 19, get_clock
Sent 74 592.718614 592.718614 6: seq: 1a, get_clock
Sent 75 593.702851 593.702851 6: seq: 1b, get_clock
Sent 76 594.687115 594.687115 6: seq: 1c, get_clock
Sent 77 595.671742 595.671742 6: seq: 1d, get_clock
Sent 78 596.655976 596.655976 6: seq: 1e, get_clock
Sent 79 597.640213 597.640213 6: seq: 1f, get_clock
Sent 80 598.624548 598.624548 6: seq: 10, get_clock
Sent 81 599.608819 599.608819 6: seq: 11, get_clock
Sent 82 600.593889 600.593889 6: seq: 12, get_clock
Sent 83 601.578879 601.578879 6: seq: 13, get_clock
Sent 84 602.563001 602.563001 6: seq: 14, get_clock
Sent 85 603.547803 603.547803 6: seq: 15, get_clock
Sent 86 604.532412 604.532412 6: seq: 16, get_clock
Sent 87 605.516597 605.516597 6: seq: 17, get_clock
Sent 88 606.500781 606.500781 6: seq: 18, get_clock
Sent 89 607.485635 607.485635 6: seq: 19, get_clock
Sent 90 608.470559 608.470559 6: seq: 1a, get_clock
Sent 91 609.455159 609.455159 6: seq: 1b, get_clock
Sent 92 610.440107 610.440107 6: seq: 1c, get_clock
Sent 93 611.424306 611.424306 6: seq: 1d, get_clock
Sent 94 612.409035 612.409035 6: seq: 1e, get_clock
Sent 95 613.393389 613.393389 6: seq: 1f, get_clock
Sent 96 614.378255 614.378255 6: seq: 10, get_clock
Sent 97 615.362481 615.362481 6: seq: 11, get_clock
Sent 98 616.346694 616.346694 6: seq: 12, get_clock
Sent 99 617.178702 617.178702 6: seq: 13, emergency_stop
Dumping receive queue 100 messages
Receive: 0 550.928729 550.928634 49: seq: 1c, identify_response offset=3000 data=b'c#\xd6\xd0\xbd0x\xb8\xf6\xa9\x81Z4\xaf\x10\x17\x9fJ\x9c@\xd9\xb2\xbe!\x99n#\xf7"q\xd4^\xf6\x0e`\xde\x1d|a&'
Receive: 1 550.929069 550.928975 49: seq: 1d, identify_response offset=3040 data=b'\xdek\xc2\\fr*K\xf5d\x82\xc7\xc3\xe8\x0bl\xfa\xafv\xe7\x18)\xc9\xfe\xa1R\xac\xeff]&\x89Y^[\xf2\xc5{\xc49'
Receive: 2 550.929410 550.929315 49: seq: 1e, identify_response offset=3080 data=b'\xb5 \x1d\xcd\xac\xf3\xec\x9a\xa6\xba7lz9\xd4{\xf4\x97\xbc\x9dv;\x0e\xf1\x96\xba\xfeP\x0c\x81S\xc9M&"\xb5\xaaar\xe9'
Receive: 3 550.929751 550.929656 49: seq: 1f, identify_response offset=3120 data=b"\x12o\xfbLqZ\x86'\x1b\x89G7\xe9\xb7\xa6\xfd+\r\xd2y\xe7\xeeOU R\xc5\xea0\xaa\x84\x1d\xeaWU\xbaJ\xa7\xf6r"
Receive: 4 550.930117 550.930022 49: seq: 10, identify_response offset=3160 data=b'j\xf4\x8f\xfcM]\xd56q\xcd\xb8E\xa7\x8e\x1e~\x04.\x9b-\x9c\xd0_0\x83\xc9\x98\x81\xbag\xe7\x16O\x1c\x01[w\xc4\xfe\xda'
Receive: 5 550.930461 550.930365 49: seq: 11, identify_response offset=3200 data=b'o\xca9]+\x0b\xdb!<\xfd\xd0\xe5\xa9\x1e\x16\xb3\xf4~\xc9\xe8\xff\x03\xa6\x99\x97\xc1&\x84\xfe\x97*\xf0\x82\xff\x80-\xc3x\x9d\x85'
Receive: 6 550.930802 550.930707 34: seq: 12, identify_response offset=3240 data=b'Y\x1eDa\xb2\x8e\xcew\xf7\xe7\xc5\xefi\xb2=\xcf\xe2`\xf5\xe9?\x84\x7f}\xc9'
Receive: 7 550.931144 550.931050 9: seq: 13, identify_response offset=3265 data=b''
Receive: 8 550.957621 550.957438 12: seq: 14, uptime high=0 clock=797584035
Receive: 9 551.008773 551.008659 11: seq: 15, clock clock=800141835
Receive: 10 551.059703 551.059566 11: seq: 16, clock clock=802688191
Receive: 11 551.110332 551.110230 11: seq: 17, clock clock=805219730
Receive: 12 551.160881 551.160776 11: seq: 18, clock clock=807747168
Receive: 13 551.211841 551.211715 11: seq: 19, clock clock=810294859
Receive: 14 551.262499 551.262387 11: seq: 1a, clock clock=812827888
Receive: 15 551.313415 551.313289 11: seq: 1b, clock clock=815373452
Receive: 16 551.364089 551.363976 11: seq: 1c, clock clock=817907195
Receive: 17 551.372559 551.372425 11: seq: 1d, clock clock=818330643
Receive: 18 552.357086 552.356962 11: seq: 1e, clock clock=867555646
Receive: 19 552.639802 552.639664 10: seq: 1f, config is_config=0 crc=0 is_shutdown=0 move_count=0
Receive: 20 552.640853 552.640761 15: seq: 12, config is_config=1 crc=3912464276 is_shutdown=0 move_count=1024
Receive: 21 553.342328 553.342095 11: seq: 13, clock clock=916814085
Receive: 22 554.326324 554.326152 11: seq: 14, clock clock=966014752
Receive: 23 555.206141 554.326152 14: seq: 14, stats count=151 sum=176166 sumsq=1061015
Receive: 24 555.310378 555.310252 11: seq: 15, clock clock=1015216364
Receive: 25 556.295450 556.295167 11: seq: 16, clock clock=1064466493
Receive: 26 557.280326 557.280082 11: seq: 17, clock clock=1113708865
Receive: 27 558.264520 558.264262 11: seq: 18, clock clock=1162916952
Receive: 28 559.248810 559.248562 11: seq: 19, clock clock=1212130427
Receive: 29 560.206471 559.248562 13: seq: 19, stats count=55 sum=46135 sumsq=290223
Receive: 30 560.232984 560.232815 11: seq: 1a, clock clock=1261340357
Receive: 31 561.217286 561.217164 11: seq: 1b, clock clock=1310554304
Receive: 32 562.201567 562.201426 11: seq: 1c, clock clock=1359767109
Receive: 33 563.185963 563.185817 11: seq: 1d, clock clock=1408985676
Receive: 34 564.170873 564.170710 11: seq: 1e, clock clock=1458229395
Receive: 35 565.155747 565.155600 11: seq: 1f, clock clock=1507472215
Receive: 36 565.306619 565.155600 13: seq: 1f, stats count=57 sum=30407 sumsq=155754
Receive: 37 566.140363 566.140070 11: seq: 10, clock clock=1556699265
Receive: 38 567.125309 567.125029 11: seq: 11, clock clock=1605944909
Receive: 39 568.109550 568.109279 11: seq: 12, clock clock=1655155924
Receive: 40 569.093950 569.093661 11: seq: 13, clock clock=1704374590
Receive: 41 570.078429 570.078112 11: seq: 14, clock clock=1753595799
Receive: 42 570.306694 570.078112 13: seq: 14, stats count=55 sum=54679 sumsq=443333
Receive: 43 571.062726 571.062441 11: seq: 15, clock clock=1802811064
Receive: 44 572.046914 572.046670 11: seq: 16, clock clock=1852020282
Receive: 45 573.031257 573.030953 11: seq: 17, clock clock=1901234454
Receive: 46 574.015522 574.015241 11: seq: 18, clock clock=1950447545
Receive: 47 574.999790 574.999482 11: seq: 19, clock clock=1999659690
Receive: 48 575.406777 574.999482 13: seq: 19, stats count=56 sum=54962 sumsq=441675
Receive: 49 575.984369 575.983982 11: seq: 1a, clock clock=2048884000
Receive: 50 576.968948 576.968578 11: seq: 1b, clock clock=2098115553
Receive: 51 577.953519 577.953375 11: seq: 1c, clock clock=2147346420
Receive: 52 578.937699 578.937560 11: seq: 1d, clock clock=2196554267
Receive: 53 579.921785 579.921671 11: seq: 1e, clock clock=2245757441
Receive: 54 580.506752 579.921671 13: seq: 1e, stats count=56 sum=39660 sumsq=283764
Receive: 55 580.906062 580.905943 11: seq: 1f, clock clock=2294970192
Receive: 56 581.890351 581.890199 11: seq: 10, clock clock=2344181957
Receive: 57 582.875688 582.875330 11: seq: 11, clock clock=2393442472
Receive: 58 583.859685 583.859393 11: seq: 12, clock clock=2442642748
Receive: 59 584.843962 584.843676 11: seq: 13, clock clock=2491855485
Receive: 60 585.507085 584.843676 13: seq: 13, stats count=55 sum=42026 sumsq=276276
Receive: 61 585.828123 585.827842 11: seq: 14, clock clock=2541062549
Receive: 62 586.812415 586.812124 11: seq: 15, clock clock=2590276080
Receive: 63 587.796625 587.796310 11: seq: 16, clock clock=2639485089
Receive: 64 588.781634 588.781315 11: seq: 17, clock clock=2688734528
Receive: 65 589.765839 589.765455 11: seq: 18, clock clock=2737942242
Receive: 66 590.507278 589.765455 13: seq: 18, stats count=55 sum=54144 sumsq=425399
Receive: 67 590.750408 590.750090 11: seq: 19, clock clock=2787170467
Receive: 68 591.734628 591.734292 11: seq: 1a, clock clock=2836380137
Receive: 69 592.718934 592.718614 11: seq: 1b, clock clock=2885595328
Receive: 70 593.703172 593.702851 11: seq: 1c, clock clock=2934808240
Receive: 71 594.687310 594.687115 11: seq: 1d, clock clock=2984017365
Receive: 72 595.607067 594.687115 13: seq: 1d, stats count=56 sum=50425 sumsq=397786
Receive: 73 595.671858 595.671742 11: seq: 1e, clock clock=3033244091
Receive: 74 596.656096 596.655976 11: seq: 1f, clock clock=3082454814
Receive: 75 597.640327 597.640213 11: seq: 10, clock clock=3131665496
Receive: 76 598.624667 598.624548 11: seq: 11, clock clock=3180881422
Receive: 77 599.608931 599.608819 11: seq: 12, clock clock=3230093726
Receive: 78 600.594166 600.593889 11: seq: 13, clock clock=3279351673
Receive: 79 600.607269 600.593889 13: seq: 13, stats count=56 sum=32285 sumsq=162144
Receive: 80 601.579211 601.578879 11: seq: 14, clock clock=3328602086
Receive: 81 602.563301 602.563001 11: seq: 15, clock clock=3377805511
Receive: 82 603.548088 603.547803 11: seq: 16, clock clock=3427044167
Receive: 83 604.532660 604.532412 11: seq: 17, clock clock=3476272226
Receive: 84 605.516872 605.516597 11: seq: 18, clock clock=3525479536
Receive: 85 605.607461 605.516597 13: seq: 18, stats count=55 sum=55140 sumsq=504708
Receive: 86 606.501129 606.500781 11: seq: 19, clock clock=3574692987
Receive: 87 607.485870 607.485635 11: seq: 1a, clock clock=3623930067
Receive: 88 608.470804 608.470559 11: seq: 1b, clock clock=3673175112
Receive: 89 609.455444 609.455159 11: seq: 1c, clock clock=3722406025
Receive: 90 610.440354 610.440107 11: seq: 1d, clock clock=3771651359
Receive: 91 610.607576 610.440107 13: seq: 1d, stats count=55 sum=52748 sumsq=387869
Receive: 92 611.424581 611.424306 11: seq: 1e, clock clock=3820860587
Receive: 93 612.409162 612.409035 11: seq: 1f, clock clock=3870092512
Receive: 94 613.393569 613.393389 11: seq: 10, clock clock=3919310546
Receive: 95 614.378397 614.378255 11: seq: 11, clock clock=3968552372
Receive: 96 615.362633 615.362481 11: seq: 12, clock clock=4017763293
Receive: 97 615.609419 615.362481 13: seq: 12, stats count=55 sum=34686 sumsq=187305
Receive: 98 616.346843 616.346694 11: seq: 13, clock clock=4066972909
Receive: 99 617.179065 617.178702 12: seq: 14, shutdown clock=4108576151 static_string_id=Command request
MCU 'mcu' shutdown: Command request
clocksync state: mcu_freq=180000000 last_clock=14520340828 clock_est=(590.616 9916352040 180000538.058) min_half_rtt=0.000067 min_rtt_time=550.900 time_avg=590.616(440.890) clock_avg=9916352040.128(79360516204.714) pred_variance=2577357237.490
Dumping serial stats: bytes_write=4328 bytes_read=14962 bytes_retransmit=9 bytes_invalid=0 send_seq=368 receive_seq=368 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 553.176310 553.176310 14: seq: 1c, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 1 553.180617 553.180617 19: seq: 1d, tmcuart_send oid=8 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 2 553.183266 553.183266 14: seq: 1e, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 3 553.187557 553.187557 19: seq: 1f, tmcuart_send oid=8 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 4 553.190187 553.190187 14: seq: 10, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 5 553.483477 553.483477 7: seq: 11, stepper_get_position oid=9
Sent 6 553.484272 553.484272 14: seq: 12, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 7 553.488839 553.488839 7: seq: 13, stepper_get_position oid=11
Sent 8 553.489366 553.489366 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 9 553.492708 553.492708 14: seq: 15, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 10 553.496030 553.496030 14: seq: 16, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 11 553.499323 553.499323 14: seq: 17, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 12 553.502619 553.502619 14: seq: 18, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 13 553.506481 553.506481 7: seq: 19, stepper_get_position oid=12
Sent 14 553.507077 553.507077 14: seq: 1a, tmcuart_send oid=4 write=b'\xea\x03H-\xd5' read=10
Sent 15 553.511487 553.511487 7: seq: 1b, stepper_get_position oid=15
Sent 16 553.511991 553.511991 14: seq: 1c, tmcuart_send oid=5 write=b'\xea\x03H-\xd5' read=10
Sent 17 553.516285 553.516285 7: seq: 1d, stepper_get_position oid=16
Sent 18 553.516778 553.516778 14: seq: 1e, tmcuart_send oid=6 write=b'\xea\x03H-\xd5' read=10
Sent 19 553.521058 553.521058 7: seq: 1f, stepper_get_position oid=18
Sent 20 553.521540 553.521540 14: seq: 10, tmcuart_send oid=7 write=b'\xea\x03H-\xd5' read=10
Sent 21 553.525811 553.525811 7: seq: 11, stepper_get_position oid=19
Sent 22 553.526305 553.526305 14: seq: 12, tmcuart_send oid=8 write=b'\xea\x03H-\xd5' read=10
Sent 23 553.855176 553.855176 6: seq: 13, get_clock
Sent 24 554.840122 554.840122 6: seq: 14, get_clock
Sent 25 556.141758 556.141758 6: seq: 15, get_clock
Sent 26 557.125625 557.125625 6: seq: 16, get_clock
Sent 27 558.109635 558.109635 6: seq: 17, get_clock
Sent 28 559.094243 559.094243 6: seq: 18, get_clock
Sent 29 560.078460 560.078460 6: seq: 19, get_clock
Sent 30 561.063062 561.063062 6: seq: 1a, get_clock
Sent 31 562.047278 562.047278 6: seq: 1b, get_clock
Sent 32 563.031505 563.031505 6: seq: 1c, get_clock
Sent 33 564.015762 564.015762 6: seq: 1d, get_clock
Sent 34 565.000082 565.000082 6: seq: 1e, get_clock
Sent 35 565.985001 565.985001 6: seq: 1f, get_clock
Sent 36 566.970285 566.970285 6: seq: 10, get_clock
Sent 37 567.955384 567.955384 6: seq: 11, get_clock
Sent 38 568.940070 568.940070 6: seq: 12, get_clock
Sent 39 569.923819 569.923819 6: seq: 13, get_clock
Sent 40 570.908048 570.908048 6: seq: 14, get_clock
Sent 41 571.892365 571.892365 6: seq: 15, get_clock
Sent 42 572.876666 572.876666 6: seq: 16, get_clock
Sent 43 573.860902 573.860902 6: seq: 17, get_clock
Sent 44 574.845090 574.845090 6: seq: 18, get_clock
Sent 45 575.829302 575.829302 6: seq: 19, get_clock
Sent 46 576.813555 576.813555 6: seq: 1a, get_clock
Sent 47 577.798395 577.798395 6: seq: 1b, get_clock
Sent 48 578.783010 578.783010 6: seq: 1c, get_clock
Sent 49 579.767354 579.767354 6: seq: 1d, get_clock
Sent 50 580.752060 580.752060 6: seq: 1e, get_clock
Sent 51 581.736199 581.736199 6: seq: 1f, get_clock
Sent 52 582.721152 582.721152 6: seq: 10, get_clock
Sent 53 583.705416 583.705416 6: seq: 11, get_clock
Sent 54 584.689608 584.689608 6: seq: 12, get_clock
Sent 55 585.673790 585.673790 6: seq: 13, get_clock
Sent 56 586.657983 586.657983 6: seq: 14, get_clock
Sent 57 587.642229 587.642229 6: seq: 15, get_clock
Sent 58 588.626503 588.626503 6: seq: 16, get_clock
Sent 59 589.610881 589.610881 6: seq: 17, get_clock
Sent 60 590.594988 590.594988 6: seq: 18, get_clock
Sent 61 591.580032 591.580032 6: seq: 19, get_clock
Sent 62 592.564524 592.564524 6: seq: 1a, get_clock
Sent 63 593.549451 593.549451 6: seq: 1b, get_clock
Sent 64 594.533547 594.533547 6: seq: 1c, get_clock
Sent 65 595.519122 595.519122 6: seq: 1d, get_clock
Sent 66 596.503790 596.503790 6: seq: 1e, get_clock
Sent 67 597.488471 597.488471 6: seq: 1f, get_clock
Sent 68 598.473488 598.473488 6: seq: 10, get_clock
Sent 69 599.457762 599.457762 6: seq: 11, get_clock
Sent 70 600.442752 600.442752 6: seq: 12, get_clock
Sent 71 601.426829 601.426829 6: seq: 13, get_clock
Sent 72 602.411161 602.411161 6: seq: 14, get_clock
Sent 73 603.395444 603.395444 6: seq: 15, get_clock
Sent 74 604.379802 604.379802 6: seq: 16, get_clock
Sent 75 605.364153 605.364153 6: seq: 17, get_clock
Sent 76 606.348658 606.348658 6: seq: 18, get_clock
Sent 77 607.333052 607.333052 6: seq: 19, get_clock
Sent 78 608.317857 608.317857 6: seq: 1a, get_clock
Sent 79 609.302845 609.302845 6: seq: 1b, get_clock
Sent 80 610.287447 610.287447 6: seq: 1c, get_clock
Sent 81 611.271719 611.271719 6: seq: 1d, get_clock
Sent 82 612.256237 612.256237 6: seq: 1e, get_clock
Sent 83 613.240415 613.240415 6: seq: 1f, get_clock
Sent 84 614.224623 614.224623 6: seq: 10, get_clock
Sent 85 615.208997 615.208997 6: seq: 11, get_clock
Sent 86 616.193364 616.193364 6: seq: 12, get_clock
Sent 87 617.144580 617.144580 21: seq: 13, queue_digital_out oid=24 clock=1851205558 on_ticks=0, queue_digital_out oid=25 clock=1851205558 on_ticks=0
Sent 88 617.145047 617.145047 61: seq: 14, set_next_step_dir oid=9 dir=1, set_next_step_dir oid=11 dir=1, queue_step oid=9 interval=1851389270 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=1851389270 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513
Sent 89 617.145047 617.145047 61: seq: 15, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72
Sent 90 617.145047 617.145047 60: seq: 16, queue_step oid=11 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1
Sent 91 617.145946 617.145946 40: seq: 17, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=11 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0
Sent 92 617.149091 617.149091 14: seq: 18, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 93 617.154055 617.154055 14: seq: 19, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 94 617.157803 617.157803 14: seq: 1a, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 617.161534 617.161534 14: seq: 1b, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 617.165239 617.165239 14: seq: 1c, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 617.170902 617.170902 16: seq: 1d, queue_digital_out oid=23 clock=1829340427 on_ticks=1800000
Sent 98 617.171577 617.171577 14: seq: 1e, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 617.178450 617.178450 6: seq: 1f, emergency_stop
Dumping receive queue 100 messages
Receive: 0 605.632252 605.364153 14: seq: 18, analog_in_state oid=20 next_clock=4082065408 value=7493
Receive: 1 605.642227 605.364153 15: seq: 18, analog_in_state oid=21 next_clock=4083865408 value=31500
Receive: 2 605.932262 605.364153 14: seq: 18, analog_in_state oid=20 next_clock=4136065408 value=7495
Receive: 3 605.942232 605.364153 15: seq: 18, analog_in_state oid=21 next_clock=4137865408 value=31498
Receive: 4 606.232268 605.364153 14: seq: 18, analog_in_state oid=20 next_clock=4190065408 value=7494
Receive: 5 606.242244 605.364153 15: seq: 18, analog_in_state oid=21 next_clock=4191865408 value=31497
Receive: 6 606.348987 606.348658 11: seq: 19, clock clock=4158360648
Receive: 7 606.525095 606.348658 14: seq: 19, stats count=132 sum=118642 sumsq=622059
Receive: 8 606.532248 606.348658 13: seq: 19, analog_in_state oid=20 next_clock=4244065408 value=7494
Receive: 9 606.542250 606.348658 14: seq: 19, analog_in_state oid=21 next_clock=4245865408 value=31498
Receive: 10 606.832308 606.348658 13: seq: 19, analog_in_state oid=20 next_clock=3098112 value=7498
Receive: 11 606.842298 606.348658 14: seq: 19, analog_in_state oid=21 next_clock=4898112 value=31497
Receive: 12 607.132242 606.348658 13: seq: 19, analog_in_state oid=20 next_clock=57098112 value=7492
Receive: 13 607.142210 606.348658 14: seq: 19, analog_in_state oid=21 next_clock=58898112 value=31501
Receive: 14 607.333450 607.333052 10: seq: 1a, clock clock=40596493
Receive: 15 607.432223 607.333052 13: seq: 1a, analog_in_state oid=20 next_clock=111098112 value=7498
Receive: 16 607.442211 607.333052 14: seq: 1a, analog_in_state oid=21 next_clock=112898112 value=31501
Receive: 17 607.732265 607.333052 13: seq: 1a, analog_in_state oid=20 next_clock=165098112 value=7494
Receive: 18 607.742221 607.333052 14: seq: 1a, analog_in_state oid=21 next_clock=166898112 value=31504
Receive: 19 608.032248 607.333052 14: seq: 1a, analog_in_state oid=20 next_clock=219098112 value=7492
Receive: 20 608.042221 607.333052 15: seq: 1a, analog_in_state oid=21 next_clock=220898112 value=31501
Receive: 21 608.318197 608.317857 11: seq: 1b, clock clock=217849030
Receive: 22 608.332214 608.317857 14: seq: 1b, analog_in_state oid=20 next_clock=273098112 value=7492
Receive: 23 608.342241 608.317857 15: seq: 1b, analog_in_state oid=21 next_clock=274898112 value=31503
Receive: 24 608.632220 608.317857 14: seq: 1b, analog_in_state oid=20 next_clock=327098112 value=7495
Receive: 25 608.642211 608.317857 15: seq: 1b, analog_in_state oid=21 next_clock=328898112 value=31504
Receive: 26 608.932231 608.317857 14: seq: 1b, analog_in_state oid=20 next_clock=381098112 value=7495
Receive: 27 608.942213 608.317857 15: seq: 1b, analog_in_state oid=21 next_clock=382898112 value=31500
Receive: 28 609.232224 608.317857 14: seq: 1b, analog_in_state oid=20 next_clock=435098112 value=7495
Receive: 29 609.242227 608.317857 15: seq: 1b, analog_in_state oid=21 next_clock=436898112 value=31501
Receive: 30 609.303388 609.302845 11: seq: 1c, clock clock=395148546
Receive: 31 609.532301 609.302845 14: seq: 1c, analog_in_state oid=20 next_clock=489098112 value=7491
Receive: 32 609.542217 609.302845 15: seq: 1c, analog_in_state oid=21 next_clock=490898112 value=31500
Receive: 33 609.832293 609.302845 14: seq: 1c, analog_in_state oid=20 next_clock=543098112 value=7493
Receive: 34 609.842226 609.302845 15: seq: 1c, analog_in_state oid=21 next_clock=544898112 value=31500
Receive: 35 610.132242 609.302845 14: seq: 1c, analog_in_state oid=20 next_clock=597098112 value=7495
Receive: 36 610.142202 609.302845 15: seq: 1c, analog_in_state oid=21 next_clock=598898112 value=31501
Receive: 37 610.287745 610.287447 11: seq: 1d, clock clock=572376002
Receive: 38 610.432228 610.287447 14: seq: 1d, analog_in_state oid=20 next_clock=651098112 value=7494
Receive: 39 610.442209 610.287447 15: seq: 1d, analog_in_state oid=21 next_clock=652898112 value=31503
Receive: 40 610.732247 610.287447 14: seq: 1d, analog_in_state oid=20 next_clock=705098112 value=7494
Receive: 41 610.742227 610.287447 15: seq: 1d, analog_in_state oid=21 next_clock=706898112 value=31502
Receive: 42 611.032219 610.287447 14: seq: 1d, analog_in_state oid=20 next_clock=759098112 value=7493
Receive: 43 611.042222 610.287447 15: seq: 1d, analog_in_state oid=21 next_clock=760898112 value=31504
Receive: 44 611.272020 611.271719 11: seq: 1e, clock clock=749548870
Receive: 45 611.332256 611.271719 14: seq: 1e, analog_in_state oid=20 next_clock=813098112 value=7496
Receive: 46 611.342209 611.271719 15: seq: 1e, analog_in_state oid=21 next_clock=814898112 value=31504
Receive: 47 611.625059 611.271719 14: seq: 1e, stats count=130 sum=115686 sumsq=603954
Receive: 48 611.632190 611.271719 14: seq: 1e, analog_in_state oid=20 next_clock=867098112 value=7495
Receive: 49 611.642196 611.271719 15: seq: 1e, analog_in_state oid=21 next_clock=868898112 value=31500
Receive: 50 611.932212 611.271719 14: seq: 1e, analog_in_state oid=20 next_clock=921098112 value=7492
Receive: 51 611.942204 611.271719 15: seq: 1e, analog_in_state oid=21 next_clock=922898112 value=31503
Receive: 52 612.232151 611.271719 14: seq: 1e, analog_in_state oid=20 next_clock=975098112 value=7493
Receive: 53 612.242152 611.271719 15: seq: 1e, analog_in_state oid=21 next_clock=976898112 value=31505
Receive: 54 612.256519 612.256237 11: seq: 1f, clock clock=926761341
Receive: 55 612.532157 612.256237 14: seq: 1f, analog_in_state oid=20 next_clock=1029098112 value=7493
Receive: 56 612.542143 612.256237 15: seq: 1f, analog_in_state oid=21 next_clock=1030898112 value=31502
Receive: 57 612.832188 612.256237 14: seq: 1f, analog_in_state oid=20 next_clock=1083098112 value=7492
Receive: 58 612.842166 612.256237 15: seq: 1f, analog_in_state oid=21 next_clock=1084898112 value=31501
Receive: 59 613.132181 612.256237 14: seq: 1f, analog_in_state oid=20 next_clock=1137098112 value=7496
Receive: 60 613.142181 612.256237 15: seq: 1f, analog_in_state oid=21 next_clock=1138898112 value=31503
Receive: 61 613.240598 613.240415 11: seq: 10, clock clock=1103905094
Receive: 62 613.432141 613.240415 14: seq: 10, analog_in_state oid=20 next_clock=1191098112 value=7493
Receive: 63 613.442134 613.240415 15: seq: 10, analog_in_state oid=21 next_clock=1192898112 value=31499
Receive: 64 613.732151 613.240415 14: seq: 10, analog_in_state oid=20 next_clock=1245098112 value=7496
Receive: 65 613.742186 613.240415 15: seq: 10, analog_in_state oid=21 next_clock=1246898112 value=31502
Receive: 66 614.032137 613.240415 14: seq: 10, analog_in_state oid=20 next_clock=1299098112 value=7494
Receive: 67 614.042130 613.240415 15: seq: 10, analog_in_state oid=21 next_clock=1300898112 value=31504
Receive: 68 614.224796 614.224623 11: seq: 11, clock clock=1281063816
Receive: 69 614.332171 614.224623 14: seq: 11, analog_in_state oid=20 next_clock=1353098112 value=7492
Receive: 70 614.342126 614.224623 15: seq: 11, analog_in_state oid=21 next_clock=1354898112 value=31505
Receive: 71 614.632155 614.224623 14: seq: 11, analog_in_state oid=20 next_clock=1407098112 value=7493
Receive: 72 614.642124 614.224623 15: seq: 11, analog_in_state oid=21 next_clock=1408898112 value=31507
Receive: 73 614.932144 614.224623 14: seq: 11, analog_in_state oid=20 next_clock=1461098112 value=7496
Receive: 74 614.942125 614.224623 15: seq: 11, analog_in_state oid=21 next_clock=1462898112 value=31504
Receive: 75 615.209157 615.208997 11: seq: 12, clock clock=1458251207
Receive: 76 615.232128 615.208997 14: seq: 12, analog_in_state oid=20 next_clock=1515098112 value=7497
Receive: 77 615.242139 615.208997 15: seq: 12, analog_in_state oid=21 next_clock=1516898112 value=31499
Receive: 78 615.532140 615.208997 14: seq: 12, analog_in_state oid=20 next_clock=1569098112 value=7493
Receive: 79 615.542143 615.208997 15: seq: 12, analog_in_state oid=21 next_clock=1570898112 value=31503
Receive: 80 615.832176 615.208997 14: seq: 12, analog_in_state oid=20 next_clock=1623098112 value=7494
Receive: 81 615.842183 615.208997 15: seq: 12, analog_in_state oid=21 next_clock=1624898112 value=31501
Receive: 82 616.132127 615.208997 14: seq: 12, analog_in_state oid=20 next_clock=1677098112 value=7495
Receive: 83 616.142138 615.208997 15: seq: 12, analog_in_state oid=21 next_clock=1678898112 value=31502
Receive: 84 616.193536 616.193364 11: seq: 13, clock clock=1635438940
Receive: 85 616.432155 616.193364 14: seq: 13, analog_in_state oid=20 next_clock=1731098112 value=7497
Receive: 86 616.442134 616.193364 15: seq: 13, analog_in_state oid=21 next_clock=1732898112 value=31502
Receive: 87 616.724989 616.193364 14: seq: 13, stats count=130 sum=116005 sumsq=606022
Receive: 88 616.732129 616.193364 14: seq: 13, analog_in_state oid=20 next_clock=1785098112 value=7495
Receive: 89 616.742119 616.193364 15: seq: 13, analog_in_state oid=21 next_clock=1786898112 value=31503
Receive: 90 617.032236 616.193364 14: seq: 13, analog_in_state oid=20 next_clock=1839098112 value=7491
Receive: 91 617.042282 616.193364 15: seq: 13, analog_in_state oid=21 next_clock=1840898112 value=31500
Receive: 92 617.148388 617.145946 8: seq: 18, tmcuart_response oid=2 read=b''
Receive: 93 617.153118 617.149091 18: seq: 19, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02\xc8\xa2\xa9'
Receive: 94 617.157161 617.154055 8: seq: 1a, tmcuart_response oid=3 read=b''
Receive: 95 617.160904 617.157803 8: seq: 1b, tmcuart_response oid=3 read=b''
Receive: 96 617.164625 617.161534 8: seq: 1c, tmcuart_response oid=3 read=b''
Receive: 97 617.168329 617.165239 8: seq: 1d, tmcuart_response oid=3 read=b''
Receive: 98 617.174680 617.171577 8: seq: 1f, tmcuart_response oid=3 read=b''
Receive: 99 617.178886 617.178450 12: seq: 10, shutdown clock=1812760676 static_string_id=Command request
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=5247157970 clock_est=(590.735 3617851205 63999469.294) min_half_rtt=0.000076 min_rtt_time=565.000 time_avg=590.735(431.449) clock_avg=3617851205.241(27612527402.352) pred_variance=336087098.600 clock_adj=(-1.319 63999324.250)
Dumping serial stats: bytes_write=1848 bytes_read=12120 bytes_retransmit=9 bytes_invalid=0 send_seq=221 receive_seq=221 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 552.645229 552.645229 11: seq: 1a, set_digital_out_pwm_cycle oid=10 cycle_ticks=6400000
Sent 1 552.645444 552.645444 11: seq: 1b, config_stepper oid=5 step_pin=PD0 dir_pin=PD1 invert_step=4294967295 step_pulse_ticks=0
Sent 2 552.645557 552.645557 11: seq: 1c, config_digital_out oid=11 pin=PD2 value=1 default_value=1 max_duration=0
Sent 3 552.645698 552.645698 11: seq: 1d, finalize_config crc=588137470
Sent 4 552.645844 552.645844 25: seq: 1e, query_analog_in oid=6 clock=1240246175 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=0 max_value=65535 range_check_count=4
Sent 5 552.645977 552.645977 14: seq: 1f, queue_digital_out oid=7 clock=1192691096 on_ticks=2560
Sent 6 552.646088 552.646088 13: seq: 10, queue_digital_out oid=8 clock=1192695060 on_ticks=0
Sent 7 552.646221 552.646221 26: seq: 11, query_analog_in oid=9 clock=1242166175 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=10237 max_value=16734 range_check_count=4
Sent 8 552.646435 552.646435 13: seq: 12, queue_digital_out oid=10 clock=1192713845 on_ticks=0
Sent 9 552.646601 552.646601 6: seq: 13, get_config
Sent 10 552.998978 552.998978 6: seq: 14, get_clock
Sent 11 553.195114 553.195114 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 12 553.199578 553.199578 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 13 553.202333 553.202333 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 14 553.206763 553.206763 19: seq: 18, tmcuart_send oid=2 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 15 553.209437 553.209437 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 16 553.213825 553.213825 19: seq: 1a, tmcuart_send oid=2 write=b'\xea\x03\x88=\x91\x04\x1a\x88\xae\xe7' read=0
Sent 17 553.216492 553.216492 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 18 553.220894 553.220894 19: seq: 1c, tmcuart_send oid=2 write=b'\xea\x03\x082\x80\x10\xb2\xc8\xa2\xa4' read=0
Sent 19 553.223590 553.223590 14: seq: 1d, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 20 553.227984 553.227984 19: seq: 1e, tmcuart_send oid=2 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 21 553.230672 553.230672 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 22 553.235048 553.235048 19: seq: 10, tmcuart_send oid=2 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 23 553.237708 553.237708 14: seq: 11, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 24 553.242096 553.242096 19: seq: 12, tmcuart_send oid=2 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 25 553.244766 553.244766 14: seq: 13, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 26 553.249171 553.249171 19: seq: 14, tmcuart_send oid=2 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 27 553.251847 553.251847 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 28 553.256313 553.256313 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 29 553.258985 553.258985 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 30 553.263430 553.263430 19: seq: 18, tmcuart_send oid=2 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 31 553.266134 553.266134 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 32 553.530885 553.530885 7: seq: 1a, stepper_get_position oid=5
Sent 33 553.531678 553.531678 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 34 553.983528 553.983528 6: seq: 1c, get_clock
Sent 35 554.967583 554.967583 6: seq: 1d, get_clock
Sent 36 556.142341 556.142341 6: seq: 1e, get_clock
Sent 37 557.125873 557.125873 6: seq: 1f, get_clock
Sent 38 558.109846 558.109846 6: seq: 10, get_clock
Sent 39 559.094483 559.094483 6: seq: 11, get_clock
Sent 40 560.078702 560.078702 6: seq: 12, get_clock
Sent 41 561.063175 561.063175 6: seq: 13, get_clock
Sent 42 562.047385 562.047385 6: seq: 14, get_clock
Sent 43 563.031613 563.031613 6: seq: 15, get_clock
Sent 44 564.015872 564.015872 6: seq: 16, get_clock
Sent 45 565.000189 565.000189 6: seq: 17, get_clock
Sent 46 565.985223 565.985223 6: seq: 18, get_clock
Sent 47 566.970585 566.970585 6: seq: 19, get_clock
Sent 48 567.955660 567.955660 6: seq: 1a, get_clock
Sent 49 568.939800 568.939800 6: seq: 1b, get_clock
Sent 50 569.923877 569.923877 6: seq: 1c, get_clock
Sent 51 570.908111 570.908111 6: seq: 1d, get_clock
Sent 52 571.892518 571.892518 6: seq: 1e, get_clock
Sent 53 572.876727 572.876727 6: seq: 1f, get_clock
Sent 54 573.860961 573.860961 6: seq: 10, get_clock
Sent 55 574.845158 574.845158 6: seq: 11, get_clock
Sent 56 575.829346 575.829346 6: seq: 12, get_clock
Sent 57 576.813603 576.813603 6: seq: 13, get_clock
Sent 58 577.798382 577.798382 6: seq: 14, get_clock
Sent 59 578.783033 578.783033 6: seq: 15, get_clock
Sent 60 579.767281 579.767281 6: seq: 16, get_clock
Sent 61 580.752202 580.752202 6: seq: 17, get_clock
Sent 62 581.736325 581.736325 6: seq: 18, get_clock
Sent 63 582.721898 582.721898 6: seq: 19, get_clock
Sent 64 583.706154 583.706154 6: seq: 1a, get_clock
Sent 65 584.689886 584.689886 6: seq: 1b, get_clock
Sent 66 585.674031 585.674031 6: seq: 1c, get_clock
Sent 67 586.658233 586.658233 6: seq: 1d, get_clock
Sent 68 587.643082 587.643082 6: seq: 1e, get_clock
Sent 69 588.626920 588.626920 6: seq: 1f, get_clock
Sent 70 589.611251 589.611251 6: seq: 10, get_clock
Sent 71 590.595198 590.595198 6: seq: 11, get_clock
Sent 72 591.580284 591.580284 6: seq: 12, get_clock
Sent 73 592.565029 592.565029 6: seq: 13, get_clock
Sent 74 593.550128 593.550128 6: seq: 14, get_clock
Sent 75 594.533805 594.533805 6: seq: 15, get_clock
Sent 76 595.519582 595.519582 6: seq: 16, get_clock
Sent 77 596.504019 596.504019 6: seq: 17, get_clock
Sent 78 597.488581 597.488581 6: seq: 18, get_clock
Sent 79 598.473592 598.473592 6: seq: 19, get_clock
Sent 80 599.457932 599.457932 6: seq: 1a, get_clock
Sent 81 600.442963 600.442963 6: seq: 1b, get_clock
Sent 82 601.427157 601.427157 6: seq: 1c, get_clock
Sent 83 602.411703 602.411703 6: seq: 1d, get_clock
Sent 84 603.395476 603.395476 6: seq: 1e, get_clock
Sent 85 604.379845 604.379845 6: seq: 1f, get_clock
Sent 86 605.364210 605.364210 6: seq: 10, get_clock
Sent 87 606.349480 606.349480 6: seq: 11, get_clock
Sent 88 607.333529 607.333529 6: seq: 12, get_clock
Sent 89 608.318141 608.318141 6: seq: 13, get_clock
Sent 90 609.303139 609.303139 6: seq: 14, get_clock
Sent 91 610.287702 610.287702 6: seq: 15, get_clock
Sent 92 611.271963 611.271963 6: seq: 16, get_clock
Sent 93 612.256347 612.256347 6: seq: 17, get_clock
Sent 94 613.240528 613.240528 6: seq: 18, get_clock
Sent 95 614.224729 614.224729 6: seq: 19, get_clock
Sent 96 615.209117 615.209117 6: seq: 1a, get_clock
Sent 97 616.193483 616.193483 6: seq: 1b, get_clock
Sent 98 617.180862 617.180862 6: seq: 1c, emergency_stop
Sent 99 617.195840 617.195840 6: seq: 1d, get_clock
Dumping receive queue 100 messages
Receive: 0 604.592798 604.379845 14: seq: 10, analog_in_state oid=6 next_clock=228478879 value=7436
Receive: 1 604.622755 604.379845 14: seq: 10, analog_in_state oid=9 next_clock=230398879 value=10849
Receive: 2 604.806879 604.379845 14: seq: 10, stats count=170 sum=157676 sumsq=801612
Receive: 3 604.892780 604.379845 14: seq: 10, analog_in_state oid=6 next_clock=247678879 value=7441
Receive: 4 604.922786 604.379845 14: seq: 10, analog_in_state oid=9 next_clock=249598879 value=10847
Receive: 5 605.192789 604.379845 14: seq: 10, analog_in_state oid=6 next_clock=266878879 value=7446
Receive: 6 605.222786 604.379845 14: seq: 10, analog_in_state oid=9 next_clock=268798879 value=10852
Receive: 7 605.364460 605.364210 11: seq: 11, clock clock=259120962
Receive: 8 605.492772 605.364210 14: seq: 11, analog_in_state oid=6 next_clock=286078879 value=7442
Receive: 9 605.522795 605.364210 14: seq: 11, analog_in_state oid=9 next_clock=287998879 value=10853
Receive: 10 605.792799 605.364210 14: seq: 11, analog_in_state oid=6 next_clock=305278879 value=7444
Receive: 11 605.822816 605.364210 14: seq: 11, analog_in_state oid=9 next_clock=307198879 value=10850
Receive: 12 606.092790 605.364210 14: seq: 11, analog_in_state oid=6 next_clock=324478879 value=7441
Receive: 13 606.122793 605.364210 14: seq: 11, analog_in_state oid=9 next_clock=326398879 value=10850
Receive: 14 606.349747 606.349480 11: seq: 12, clock clock=322178063
Receive: 15 606.392818 606.349480 14: seq: 12, analog_in_state oid=6 next_clock=343678879 value=7440
Receive: 16 606.422764 606.349480 14: seq: 12, analog_in_state oid=9 next_clock=345598879 value=10847
Receive: 17 606.692809 606.349480 14: seq: 12, analog_in_state oid=6 next_clock=362878879 value=7442
Receive: 18 606.722814 606.349480 14: seq: 12, analog_in_state oid=9 next_clock=364798879 value=10848
Receive: 19 606.992804 606.349480 14: seq: 12, analog_in_state oid=6 next_clock=382078879 value=7442
Receive: 20 607.022818 606.349480 14: seq: 12, analog_in_state oid=9 next_clock=383998879 value=10849
Receive: 21 607.292837 606.349480 14: seq: 12, analog_in_state oid=6 next_clock=401278879 value=7446
Receive: 22 607.322866 606.349480 14: seq: 12, analog_in_state oid=9 next_clock=403198879 value=10850
Receive: 23 607.333769 607.333529 11: seq: 13, clock clock=385157079
Receive: 24 607.592826 607.333529 14: seq: 13, analog_in_state oid=6 next_clock=420478879 value=7444
Receive: 25 607.622793 607.333529 14: seq: 13, analog_in_state oid=9 next_clock=422398879 value=10849
Receive: 26 607.892841 607.333529 14: seq: 13, analog_in_state oid=6 next_clock=439678879 value=7442
Receive: 27 607.922817 607.333529 14: seq: 13, analog_in_state oid=9 next_clock=441598879 value=10851
Receive: 28 608.192814 607.333529 14: seq: 13, analog_in_state oid=6 next_clock=458878879 value=7447
Receive: 29 608.222821 607.333529 14: seq: 13, analog_in_state oid=9 next_clock=460798879 value=10849
Receive: 30 608.318347 608.318141 11: seq: 14, clock clock=448170650
Receive: 31 608.492824 608.318141 14: seq: 14, analog_in_state oid=6 next_clock=478078879 value=7442
Receive: 32 608.522815 608.318141 14: seq: 14, analog_in_state oid=9 next_clock=479998879 value=10848
Receive: 33 608.792959 608.318141 14: seq: 14, analog_in_state oid=6 next_clock=497278879 value=7444
Receive: 34 608.822906 608.318141 14: seq: 14, analog_in_state oid=9 next_clock=499198879 value=10850
Receive: 35 609.092846 608.318141 14: seq: 14, analog_in_state oid=6 next_clock=516478879 value=7440
Receive: 36 609.122800 608.318141 14: seq: 14, analog_in_state oid=9 next_clock=518398879 value=10850
Receive: 37 609.303517 609.303139 11: seq: 15, clock clock=511211228
Receive: 38 609.392820 609.303139 14: seq: 15, analog_in_state oid=6 next_clock=535678879 value=7443
Receive: 39 609.422816 609.303139 14: seq: 15, analog_in_state oid=9 next_clock=537598879 value=10850
Receive: 40 609.694725 609.303139 14: seq: 15, analog_in_state oid=6 next_clock=554878879 value=7443
Receive: 41 609.722814 609.303139 14: seq: 15, analog_in_state oid=9 next_clock=556798879 value=10851
Receive: 42 609.906984 609.303139 14: seq: 15, stats count=170 sum=159108 sumsq=824293
Receive: 43 609.992832 609.303139 14: seq: 15, analog_in_state oid=6 next_clock=574078879 value=7444
Receive: 44 610.022804 609.303139 14: seq: 15, analog_in_state oid=9 next_clock=575998879 value=10852
Receive: 45 610.287992 610.287702 11: seq: 16, clock clock=574222067
Receive: 46 610.292849 610.287702 14: seq: 16, analog_in_state oid=6 next_clock=593278879 value=7446
Receive: 47 610.322878 610.287702 14: seq: 16, analog_in_state oid=9 next_clock=595198879 value=10846
Receive: 48 610.592940 610.287702 14: seq: 16, analog_in_state oid=6 next_clock=612478879 value=7447
Receive: 49 610.622851 610.287702 14: seq: 16, analog_in_state oid=9 next_clock=614398879 value=10850
Receive: 50 610.893000 610.287702 14: seq: 16, analog_in_state oid=6 next_clock=631678879 value=7444
Receive: 51 610.922899 610.287702 14: seq: 16, analog_in_state oid=9 next_clock=633598879 value=10850
Receive: 52 611.192857 610.287702 14: seq: 16, analog_in_state oid=6 next_clock=650878879 value=7442
Receive: 53 611.222844 610.287702 14: seq: 16, analog_in_state oid=9 next_clock=652798879 value=10850
Receive: 54 611.272220 611.271963 11: seq: 17, clock clock=637213676
Receive: 55 611.492852 611.271963 14: seq: 17, analog_in_state oid=6 next_clock=670078879 value=7444
Receive: 56 611.522829 611.271963 14: seq: 17, analog_in_state oid=9 next_clock=671998879 value=10847
Receive: 57 611.792917 611.271963 14: seq: 17, analog_in_state oid=6 next_clock=689278879 value=7444
Receive: 58 611.822896 611.271963 14: seq: 17, analog_in_state oid=9 next_clock=691198879 value=10847
Receive: 59 612.092856 611.271963 14: seq: 17, analog_in_state oid=6 next_clock=708478879 value=7440
Receive: 60 612.122793 611.271963 14: seq: 17, analog_in_state oid=9 next_clock=710398879 value=10852
Receive: 61 612.256540 612.256347 11: seq: 18, clock clock=700212526
Receive: 62 612.392848 612.256347 14: seq: 18, analog_in_state oid=6 next_clock=727678879 value=7446
Receive: 63 612.422768 612.256347 14: seq: 18, analog_in_state oid=9 next_clock=729598879 value=10845
Receive: 64 612.692806 612.256347 14: seq: 18, analog_in_state oid=6 next_clock=746878879 value=7446
Receive: 65 612.722770 612.256347 14: seq: 18, analog_in_state oid=9 next_clock=748798879 value=10854
Receive: 66 612.992813 612.256347 14: seq: 18, analog_in_state oid=6 next_clock=766078879 value=7445
Receive: 67 613.022776 612.256347 14: seq: 18, analog_in_state oid=9 next_clock=767998879 value=10848
Receive: 68 613.240796 613.240528 11: seq: 19, clock clock=763199739
Receive: 69 613.292785 613.240528 14: seq: 19, analog_in_state oid=6 next_clock=785278879 value=7444
Receive: 70 613.322844 613.240528 14: seq: 19, analog_in_state oid=9 next_clock=787198879 value=10848
Receive: 71 613.592821 613.240528 14: seq: 19, analog_in_state oid=6 next_clock=804478879 value=7444
Receive: 72 613.622793 613.240528 14: seq: 19, analog_in_state oid=9 next_clock=806398879 value=10847
Receive: 73 613.892835 613.240528 14: seq: 19, analog_in_state oid=6 next_clock=823678879 value=7443
Receive: 74 613.922775 613.240528 14: seq: 19, analog_in_state oid=9 next_clock=825598879 value=10848
Receive: 75 614.192813 613.240528 14: seq: 19, analog_in_state oid=6 next_clock=842878879 value=7443
Receive: 76 614.222810 613.240528 14: seq: 19, analog_in_state oid=9 next_clock=844798879 value=10846
Receive: 77 614.224893 614.224729 11: seq: 1a, clock clock=826187790
Receive: 78 614.492810 614.224729 14: seq: 1a, analog_in_state oid=6 next_clock=862078879 value=7441
Receive: 79 614.522784 614.224729 14: seq: 1a, analog_in_state oid=9 next_clock=863998879 value=10850
Receive: 80 614.792876 614.224729 14: seq: 1a, analog_in_state oid=6 next_clock=881278879 value=7445
Receive: 81 614.822818 614.224729 14: seq: 1a, analog_in_state oid=9 next_clock=883198879 value=10850
Receive: 82 615.006900 614.224729 14: seq: 1a, stats count=170 sum=159099 sumsq=824171
Receive: 83 615.092855 614.224729 14: seq: 1a, analog_in_state oid=6 next_clock=900478879 value=7444
Receive: 84 615.122815 614.224729 14: seq: 1a, analog_in_state oid=9 next_clock=902398879 value=10851
Receive: 85 615.209299 615.209117 11: seq: 1b, clock clock=889188650
Receive: 86 615.392826 615.209117 14: seq: 1b, analog_in_state oid=6 next_clock=919678879 value=7447
Receive: 87 615.422813 615.209117 14: seq: 1b, analog_in_state oid=9 next_clock=921598879 value=10849
Receive: 88 615.692842 615.209117 14: seq: 1b, analog_in_state oid=6 next_clock=938878879 value=7444
Receive: 89 615.722856 615.209117 14: seq: 1b, analog_in_state oid=9 next_clock=940798879 value=10848
Receive: 90 615.992830 615.209117 14: seq: 1b, analog_in_state oid=6 next_clock=958078879 value=7446
Receive: 91 616.022818 615.209117 14: seq: 1b, analog_in_state oid=9 next_clock=959998879 value=10849
Receive: 92 616.193725 616.193483 11: seq: 1c, clock clock=952190674
Receive: 93 616.292814 616.193483 14: seq: 1c, analog_in_state oid=6 next_clock=977278879 value=7443
Receive: 94 616.322878 616.193483 14: seq: 1c, analog_in_state oid=9 next_clock=979198879 value=10854
Receive: 95 616.592865 616.193483 14: seq: 1c, analog_in_state oid=6 next_clock=996478879 value=7445
Receive: 96 616.622863 616.193483 14: seq: 1c, analog_in_state oid=9 next_clock=998398879 value=10850
Receive: 97 616.892862 616.193483 14: seq: 1c, analog_in_state oid=6 next_clock=1015678879 value=7441
Receive: 98 616.922873 616.193483 14: seq: 1c, analog_in_state oid=9 next_clock=1017598879 value=10848
Receive: 99 617.181358 617.180862 12: seq: 1d, shutdown clock=1015381655 static_string_id=Command request
MCU 'beacon' shutdown: Emergency stop
clocksync state: mcu_freq=32000000 last_clock=2620965582 clock_est=(590.798 1808317888 31999790.850) min_half_rtt=0.000183 min_rtt_time=596.504 time_avg=590.798(426.583) clock_avg=1808317888.391(13650557797.433) pred_variance=88885412.769 clock_adj=(-1.237 31999698.250)
Dumping serial stats: bytes_write=742 bytes_read=24706 bytes_retransmit=9 bytes_invalid=0 send_seq=125 receive_seq=125 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 552.211822 552.211822 9: seq: 1a, identify offset=400 count=40
Sent 1 552.212521 552.212521 9: seq: 1b, identify offset=440 count=40
Sent 2 552.213237 552.213237 9: seq: 1c, identify offset=480 count=40
Sent 3 552.213945 552.213945 9: seq: 1d, identify offset=520 count=40
Sent 4 552.214618 552.214618 9: seq: 1e, identify offset=560 count=40
Sent 5 552.215335 552.215335 9: seq: 1f, identify offset=600 count=40
Sent 6 552.216036 552.216036 9: seq: 10, identify offset=640 count=40
Sent 7 552.216726 552.216726 9: seq: 11, identify offset=680 count=40
Sent 8 552.217455 552.217455 9: seq: 12, identify offset=720 count=40
Sent 9 552.218194 552.218194 9: seq: 13, identify offset=760 count=40
Sent 10 552.218879 552.218879 9: seq: 14, identify offset=800 count=40
Sent 11 552.219566 552.219566 9: seq: 15, identify offset=840 count=40
Sent 12 552.220284 552.220284 9: seq: 16, identify offset=880 count=40
Sent 13 552.220995 552.220995 9: seq: 17, identify offset=920 count=40
Sent 14 552.221631 552.221631 9: seq: 18, identify offset=937 count=40
Sent 15 552.223941 552.223941 6: seq: 19, get_uptime
Sent 16 552.274792 552.274792 6: seq: 1a, get_clock
Sent 17 552.326083 552.326083 6: seq: 1b, get_clock
Sent 18 552.377173 552.377173 6: seq: 1c, get_clock
Sent 19 552.428056 552.428056 6: seq: 1d, get_clock
Sent 20 552.478896 552.478896 6: seq: 1e, get_clock
Sent 21 552.529765 552.529765 6: seq: 1f, get_clock
Sent 22 552.580782 552.580782 6: seq: 10, get_clock
Sent 23 552.631735 552.631735 6: seq: 11, get_clock
Sent 24 552.633307 552.633307 6: seq: 12, get_clock
Sent 25 553.270530 553.270530 6: seq: 13, get_config
Sent 26 553.477614 553.477614 10: seq: 14, beacon_nvm_read len=8 offset=65534
Sent 27 553.478637 553.478637 8: seq: 15, beacon_nvm_read len=20 offset=0
Sent 28 553.480193 553.480193 7: seq: 16, beacon_stream en=0
Sent 29 553.480892 553.480892 8: seq: 17, beacon_accel_stream en=0 scale=0
Sent 30 553.481556 553.481556 7: seq: 18, allocate_oids count=1
Sent 31 553.481739 553.481739 7: seq: 19, config_trsync oid=0
Sent 32 553.481889 553.481889 11: seq: 1a, finalize_config crc=2501485974
Sent 33 553.482060 553.482060 6: seq: 1b, get_config
Sent 34 553.618260 553.618260 6: seq: 1c, get_clock
Sent 35 554.602623 554.602623 6: seq: 1d, get_clock
Sent 36 556.143049 556.143049 6: seq: 1e, get_clock
Sent 37 557.126110 557.126110 6: seq: 1f, get_clock
Sent 38 558.110433 558.110433 6: seq: 10, get_clock
Sent 39 559.095204 559.095204 6: seq: 11, get_clock
Sent 40 560.078919 560.078919 6: seq: 12, get_clock
Sent 41 561.063408 561.063408 6: seq: 13, get_clock
Sent 42 562.047714 562.047714 6: seq: 14, get_clock
Sent 43 563.031949 563.031949 6: seq: 15, get_clock
Sent 44 564.016202 564.016202 6: seq: 16, get_clock
Sent 45 565.000542 565.000542 6: seq: 17, get_clock
Sent 46 565.985904 565.985904 6: seq: 18, get_clock
Sent 47 566.971247 566.971247 6: seq: 19, get_clock
Sent 48 567.955890 567.955890 6: seq: 1a, get_clock
Sent 49 568.940702 568.940702 6: seq: 1b, get_clock
Sent 50 569.924363 569.924363 6: seq: 1c, get_clock
Sent 51 570.908475 570.908475 6: seq: 1d, get_clock
Sent 52 571.892823 571.892823 6: seq: 1e, get_clock
Sent 53 572.877118 572.877118 6: seq: 1f, get_clock
Sent 54 573.861183 573.861183 6: seq: 10, get_clock
Sent 55 574.845186 574.845186 6: seq: 11, get_clock
Sent 56 575.829610 575.829610 6: seq: 12, get_clock
Sent 57 576.813796 576.813796 6: seq: 13, get_clock
Sent 58 577.798392 577.798392 6: seq: 14, get_clock
Sent 59 578.783128 578.783128 6: seq: 15, get_clock
Sent 60 579.767476 579.767476 6: seq: 16, get_clock
Sent 61 580.752278 580.752278 6: seq: 17, get_clock
Sent 62 581.736782 581.736782 6: seq: 18, get_clock
Sent 63 582.722287 582.722287 6: seq: 19, get_clock
Sent 64 583.706407 583.706407 6: seq: 1a, get_clock
Sent 65 584.690954 584.690954 6: seq: 1b, get_clock
Sent 66 585.674271 585.674271 6: seq: 1c, get_clock
Sent 67 586.658246 586.658246 6: seq: 1d, get_clock
Sent 68 587.643121 587.643121 6: seq: 1e, get_clock
Sent 69 588.627306 588.627306 6: seq: 1f, get_clock
Sent 70 589.611648 589.611648 6: seq: 10, get_clock
Sent 71 590.595396 590.595396 6: seq: 11, get_clock
Sent 72 591.580517 591.580517 6: seq: 12, get_clock
Sent 73 592.565219 592.565219 6: seq: 13, get_clock
Sent 74 593.550741 593.550741 6: seq: 14, get_clock
Sent 75 594.534039 594.534039 6: seq: 15, get_clock
Sent 76 595.519671 595.519671 6: seq: 16, get_clock
Sent 77 596.504048 596.504048 6: seq: 17, get_clock
Sent 78 597.488682 597.488682 6: seq: 18, get_clock
Sent 79 598.473961 598.473961 6: seq: 19, get_clock
Sent 80 599.458132 599.458132 6: seq: 1a, get_clock
Sent 81 600.443188 600.443188 6: seq: 1b, get_clock
Sent 82 601.427613 601.427613 6: seq: 1c, get_clock
Sent 83 602.411970 602.411970 6: seq: 1d, get_clock
Sent 84 603.395668 603.395668 6: seq: 1e, get_clock
Sent 85 604.380044 604.380044 6: seq: 1f, get_clock
Sent 86 605.364611 605.364611 6: seq: 10, get_clock
Sent 87 606.350146 606.350146 6: seq: 11, get_clock
Sent 88 607.333178 607.333178 6: seq: 12, get_clock
Sent 89 608.318153 608.318153 6: seq: 13, get_clock
Sent 90 609.304165 609.304165 6: seq: 14, get_clock
Sent 91 610.287924 610.287924 6: seq: 15, get_clock
Sent 92 611.272182 611.272182 6: seq: 16, get_clock
Sent 93 612.256447 612.256447 6: seq: 17, get_clock
Sent 94 613.240867 613.240867 6: seq: 18, get_clock
Sent 95 614.225001 614.225001 6: seq: 19, get_clock
Sent 96 615.209213 615.209213 6: seq: 1a, get_clock
Sent 97 616.193581 616.193581 6: seq: 1b, get_clock
Sent 98 617.182134 617.182134 6: seq: 1c, emergency_stop
Sent 99 617.188132 617.188132 7: seq: 1d, beacon_stream en=0
Dumping receive queue 100 messages
Receive: 0 612.418700 612.256447 16: seq: 18, beacon_status mcu_temp=44365 supply_voltage=48788 coil_temp=55072 status=1
Receive: 1 612.493498 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2502513982 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 2 612.518922 612.256447 16: seq: 18, beacon_status mcu_temp=44365 supply_voltage=48788 coil_temp=55072 status=1
Receive: 3 612.593397 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2505714775 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 4 612.619121 612.256447 16: seq: 18, beacon_status mcu_temp=44365 supply_voltage=48788 coil_temp=55072 status=1
Receive: 5 612.693380 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2508915552 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 6 612.719317 612.256447 16: seq: 18, beacon_status mcu_temp=44365 supply_voltage=48788 coil_temp=55072 status=1
Receive: 7 612.793505 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2512116349 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 8 612.819499 612.256447 16: seq: 18, beacon_status mcu_temp=44367 supply_voltage=48788 coil_temp=55072 status=1
Receive: 9 612.893426 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2515317127 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 10 612.919670 612.256447 16: seq: 18, beacon_status mcu_temp=44367 supply_voltage=48787 coil_temp=55072 status=1
Receive: 11 612.993448 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2518517914 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 12 613.019846 612.256447 16: seq: 18, beacon_status mcu_temp=44367 supply_voltage=48787 coil_temp=55072 status=1
Receive: 13 613.093520 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2521718700 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 14 613.120041 612.256447 16: seq: 18, beacon_status mcu_temp=44367 supply_voltage=48787 coil_temp=55072 status=1
Receive: 15 613.193531 612.256447 18: seq: 18, beacon_data samples=1 start_clock=2524919482 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 16 613.220238 612.256447 16: seq: 18, beacon_status mcu_temp=44367 supply_voltage=48787 coil_temp=55072 status=1
Receive: 17 613.241288 613.240867 11: seq: 19, clock clock=2526479322
Receive: 18 613.293585 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2528120269 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 19 613.320482 613.240867 16: seq: 19, beacon_status mcu_temp=44368 supply_voltage=48786 coil_temp=55072 status=1
Receive: 20 613.393590 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2531321056 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 21 613.420649 613.240867 16: seq: 19, beacon_status mcu_temp=44368 supply_voltage=48786 coil_temp=55072 status=1
Receive: 22 613.493561 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2534521841 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 23 613.520807 613.240867 16: seq: 19, beacon_status mcu_temp=44368 supply_voltage=48786 coil_temp=55072 status=1
Receive: 24 613.593582 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2537722623 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 25 613.620991 613.240867 16: seq: 19, beacon_status mcu_temp=44368 supply_voltage=48786 coil_temp=55072 status=1
Receive: 26 613.693611 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2540923404 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 27 613.721192 613.240867 16: seq: 19, beacon_status mcu_temp=44368 supply_voltage=48786 coil_temp=55072 status=1
Receive: 28 613.793624 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2544124185 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 29 613.821380 613.240867 16: seq: 19, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 30 613.893654 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2547324973 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 31 613.921590 613.240867 16: seq: 19, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 32 613.993703 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2550525760 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 33 614.021803 613.240867 16: seq: 19, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 34 614.093748 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2553726544 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 35 614.121989 613.240867 16: seq: 19, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 36 614.193736 613.240867 18: seq: 19, beacon_data samples=1 start_clock=2556927320 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 37 614.222144 613.240867 16: seq: 19, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 38 614.225411 614.225001 11: seq: 1a, clock clock=2557971366
Receive: 39 614.293753 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2560128096 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 40 614.322385 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 41 614.393803 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2563328882 delta_clock=0 data=b'\x82\x8en)'
Receive: 42 614.422534 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 43 614.493816 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2566529660 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 44 614.522741 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 45 614.593875 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2569730449 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 46 614.622958 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 47 614.693881 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2572931232 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 48 614.723111 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 49 614.793892 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2576132023 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 50 614.823286 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 51 614.893950 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2579332802 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 52 614.923487 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 53 614.993952 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2582533586 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 54 615.023688 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 55 615.093971 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2585734371 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 56 615.123880 614.225001 16: seq: 1a, beacon_status mcu_temp=44369 supply_voltage=48786 coil_temp=55072 status=1
Receive: 57 615.194040 614.225001 18: seq: 1a, beacon_data samples=1 start_clock=2588935162 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 58 615.209624 615.209213 11: seq: 1b, clock clock=2589466005
Receive: 59 615.224084 615.209213 16: seq: 1b, beacon_status mcu_temp=44369 supply_voltage=48787 coil_temp=55072 status=1
Receive: 60 615.294002 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2592135942 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 61 615.324311 615.209213 16: seq: 1b, beacon_status mcu_temp=44369 supply_voltage=48787 coil_temp=55072 status=1
Receive: 62 615.394043 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2595336725 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 63 615.424430 615.209213 16: seq: 1b, beacon_status mcu_temp=44369 supply_voltage=48787 coil_temp=55072 status=1
Receive: 64 615.494057 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2598537517 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 65 615.524626 615.209213 16: seq: 1b, beacon_status mcu_temp=44369 supply_voltage=48787 coil_temp=55072 status=1
Receive: 66 615.594146 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2601738300 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 67 615.624847 615.209213 16: seq: 1b, beacon_status mcu_temp=44370 supply_voltage=48787 coil_temp=55072 status=1
Receive: 68 615.694110 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2604939075 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 69 615.725049 615.209213 16: seq: 1b, beacon_status mcu_temp=44370 supply_voltage=48787 coil_temp=55072 status=1
Receive: 70 615.794143 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2608139858 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 71 615.825244 615.209213 16: seq: 1b, beacon_status mcu_temp=44370 supply_voltage=48787 coil_temp=55072 status=1
Receive: 72 615.894187 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2611340641 delta_clock=0 data=b'\x82\x8en)'
Receive: 73 615.925465 615.209213 16: seq: 1b, beacon_status mcu_temp=44370 supply_voltage=48787 coil_temp=55072 status=1
Receive: 74 615.994186 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2614541420 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 75 616.025620 615.209213 16: seq: 1b, beacon_status mcu_temp=44370 supply_voltage=48787 coil_temp=55072 status=1
Receive: 76 616.094268 615.209213 18: seq: 1b, beacon_data samples=1 start_clock=2617742199 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 77 616.125797 615.209213 16: seq: 1b, beacon_status mcu_temp=44371 supply_voltage=48787 coil_temp=55072 status=1
Receive: 78 616.193989 616.193581 11: seq: 1c, clock clock=2620965582
Receive: 79 616.194316 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2620942979 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 80 616.226012 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48787 coil_temp=55072 status=1
Receive: 81 616.294260 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2624143767 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 82 616.326196 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48787 coil_temp=55072 status=1
Receive: 83 616.394336 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2627344553 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 84 616.426419 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48787 coil_temp=55072 status=1
Receive: 85 616.494327 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2630545332 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 86 616.526579 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48787 coil_temp=55072 status=1
Receive: 87 616.594351 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2633746116 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 88 616.626767 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48788 coil_temp=55072 status=1
Receive: 89 616.694416 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2636946906 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 90 616.726955 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48788 coil_temp=55072 status=1
Receive: 91 616.794392 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2640147683 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 92 616.827136 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48788 coil_temp=55072 status=1
Receive: 93 616.894415 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2643348467 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 94 616.927423 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48788 coil_temp=55072 status=1
Receive: 95 616.994533 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2646549253 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 96 617.027706 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48788 coil_temp=55072 status=1
Receive: 97 617.094569 616.193581 18: seq: 1c, beacon_data samples=1 start_clock=2649750037 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 98 617.127887 616.193581 16: seq: 1c, beacon_status mcu_temp=44371 supply_voltage=48789 coil_temp=55072 status=1
Receive: 99 617.182646 617.182134 12: seq: 1d, shutdown clock=2652600593 static_string_id=Emergency stop
Requested toolhead position at shutdown time 81.653681: (200.0, 200.0, 200.0)
Stats 618.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4517 bytes_read=15201 bytes_retransmit=9 bytes_invalid=0 send_seq=374 receive_seq=374 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000536 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1242 bytes_read=5929 bytes_retransmit=0 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998898 adj=49998807 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1854 bytes_read=12220 bytes_retransmit=9 bytes_invalid=0 send_seq=222 receive_seq=222 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999470 adj=63999324 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=755 bytes_read=25067 bytes_retransmit=9 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999790 adj=31999698 coil_temp=22.5 refs=0 mcu_temp=22.42 supply_voltage=2.978 sysload=0.19 cputime=33.585 memavail=3402212 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 619.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4567 bytes_read=15373 bytes_retransmit=9 bytes_invalid=0 send_seq=378 receive_seq=378 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000537 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1248 bytes_read=5945 bytes_retransmit=0 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998905 adj=49998851 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1866 bytes_read=12336 bytes_retransmit=9 bytes_invalid=0 send_seq=224 receive_seq=224 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999469 adj=63999339 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=767 bytes_read=25439 bytes_retransmit=9 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999793 adj=31999699 coil_temp=22.5 refs=0 mcu_temp=22.42 supply_voltage=2.978 sysload=0.19 cputime=33.638 memavail=3401988 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 620.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4611 bytes_read=15500 bytes_retransmit=9 bytes_invalid=0 send_seq=381 receive_seq=381 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000536 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1254 bytes_read=5961 bytes_retransmit=0 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998911 adj=49998902 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1872 bytes_read=12450 bytes_retransmit=9 bytes_invalid=0 send_seq=225 receive_seq=225 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999468 adj=63999304 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=773 bytes_read=25795 bytes_retransmit=9 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999793 adj=31999733 coil_temp=22.5 refs=0 mcu_temp=22.41 supply_voltage=2.978 sysload=0.19 cputime=33.691 memavail=3401988 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 621.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4655 bytes_read=15627 bytes_retransmit=9 bytes_invalid=0 send_seq=384 receive_seq=384 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000537 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1260 bytes_read=5989 bytes_retransmit=0 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998916 adj=49998948 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1878 bytes_read=12578 bytes_retransmit=9 bytes_invalid=0 send_seq=226 receive_seq=226 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999467 adj=63999288 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=779 bytes_read=26151 bytes_retransmit=9 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999793 adj=31999726 coil_temp=22.5 refs=0 mcu_temp=22.40 supply_voltage=2.978 sysload=0.17 cputime=33.741 memavail=3402048 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 622.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4699 bytes_read=15798 bytes_retransmit=9 bytes_invalid=0 send_seq=387 receive_seq=387 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000548 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1266 bytes_read=6004 bytes_retransmit=0 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998921 adj=49998959 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1884 bytes_read=12678 bytes_retransmit=9 bytes_invalid=0 send_seq=227 receive_seq=227 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999468 adj=63999275 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=785 bytes_read=26507 bytes_retransmit=9 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999793 adj=31999711 coil_temp=22.5 refs=0 mcu_temp=22.39 supply_voltage=2.978 sysload=0.17 cputime=33.791 memavail=3402048 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 623.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4705 bytes_read=15901 bytes_retransmit=9 bytes_invalid=0 send_seq=388 receive_seq=388 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000546 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1272 bytes_read=6019 bytes_retransmit=0 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998926 adj=49998931 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1890 bytes_read=12778 bytes_retransmit=9 bytes_invalid=0 send_seq=228 receive_seq=228 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999467 adj=63999234 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=791 bytes_read=26863 bytes_retransmit=9 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999793 adj=31999683 coil_temp=22.5 refs=0 mcu_temp=22.36 supply_voltage=2.978 sysload=0.17 cputime=33.840 memavail=3402048 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 624.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4711 bytes_read=16004 bytes_retransmit=9 bytes_invalid=0 send_seq=389 receive_seq=389 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000020 bytes_write=1278 bytes_read=6034 bytes_retransmit=0 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49998929 adj=49998965 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1896 bytes_read=12906 bytes_retransmit=9 bytes_invalid=0 send_seq=229 receive_seq=229 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999467 adj=63999249 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=797 bytes_read=27219 bytes_retransmit=9 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999792 adj=31999692 coil_temp=22.5 refs=0 mcu_temp=22.33 supply_voltage=2.978 sysload=0.17 cputime=33.891 memavail=3402048 print_time=82.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 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 4103190320: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:13:15 2025 (1751044395.9 625.8)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4124617096: New connection
webhooks client 4124617096: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 633.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3650 bytes_read=7587 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=179999157 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=49998939 adj=49990086 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5028 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=63999329 adj=64000026 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=2031 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=32001065 adj=32001523 coil_temp=22.5 refs=0 mcu_temp=21.99 supply_voltage=2.978 sysload=0.22 cputime=38.734 memavail=3397320 print_time=7.555 buffer_time=0.248 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4124617096
webhooks: registering remote method 'reboot_machine' for connection id: 4124617096
webhooks: registering remote method 'pause_job_queue' for connection id: 4124617096
webhooks: registering remote method 'start_job_queue' for connection id: 4124617096
Stats 634.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3656 bytes_read=7690 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=180002545 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=49999159 adj=50005567 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1464 bytes_read=5156 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=63999747 adj=63999418 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2387 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=32000178 adj=32001099 coil_temp=22.5 refs=0 mcu_temp=21.96 supply_voltage=2.978 sysload=0.22 cputime=38.845 memavail=3401112 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 636.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3668 bytes_read=7896 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=180001220 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 mcu_task_stddev=0.000012 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=49999750 adj=50002902 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1476 bytes_read=5343 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=63999830 adj=63997787 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2981 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=31999970 adj=31998535 coil_temp=22.5 refs=0 mcu_temp=21.92 supply_voltage=2.978 sysload=0.28 cputime=38.966 memavail=3398728 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 637.0: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3674 bytes_read=8014 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=180000851 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999409 adj=50003289 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1482 bytes_read=5443 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=63999616 adj=63999518 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3337 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=31999873 adj=31999177 coil_temp=22.5 refs=0 mcu_temp=21.91 supply_voltage=2.978 sysload=0.28 cputime=38.993 memavail=3398728 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 638.0: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3680 bytes_read=8117 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=180000715 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999247 adj=50001733 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1488 bytes_read=5571 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=63999532 adj=63999329 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3693 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=31999879 adj=31999277 coil_temp=22.5 refs=0 mcu_temp=21.90 supply_voltage=2.978 sysload=0.28 cputime=39.017 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 639.0: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3686 bytes_read=8249 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=180000590 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999158 adj=50000756 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1494 bytes_read=5671 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=63999484 adj=63999246 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4049 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=31999836 adj=31999473 coil_temp=22.5 refs=0 mcu_temp=21.91 supply_voltage=2.977 sysload=0.28 cputime=39.041 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 640.0: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3692 bytes_read=8352 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=180000530 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999116 adj=50000170 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=5785 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=63999451 adj=63999253 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4405 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=31999824 adj=31999504 coil_temp=22.5 refs=0 mcu_temp=21.91 supply_voltage=2.978 sysload=0.28 cputime=39.064 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 641.0: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3698 bytes_read=8455 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=180000612 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 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=49999077 adj=49999799 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=5913 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=63999481 adj=63999229 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4761 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=31999839 adj=31999561 coil_temp=22.5 refs=0 mcu_temp=21.92 supply_voltage=2.978 sysload=0.26 cputime=39.101 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 642.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3704 bytes_read=8601 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=180000648 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 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=49999243 adj=49999377 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=6013 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=63999492 adj=63999232 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5117 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=31999850 adj=31999599 coil_temp=22.5 refs=0 mcu_temp=21.93 supply_voltage=2.978 sysload=0.26 cputime=39.151 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 643.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3710 bytes_read=8704 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=180000655 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 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=49999347 adj=49999826 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6113 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=63999502 adj=63999232 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5473 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=31999972 adj=31999646 coil_temp=22.5 refs=0 mcu_temp=21.96 supply_voltage=2.978 sysload=0.26 cputime=39.200 memavail=3398740 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 644.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3716 bytes_read=8807 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=180000679 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 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=49999391 adj=50000032 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6241 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=63999512 adj=63999266 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5829 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=31999934 adj=32000100 coil_temp=22.5 refs=0 mcu_temp=21.99 supply_voltage=2.978 sysload=0.26 cputime=39.250 memavail=3398740 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 645.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3722 bytes_read=8939 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=180000679 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000018 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=49999382 adj=49999965 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=6355 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=63999517 adj=63999271 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6185 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=31999967 adj=31999877 coil_temp=22.5 refs=0 mcu_temp=22.01 supply_voltage=2.978 sysload=0.26 cputime=39.299 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 646.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3728 bytes_read=9042 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=180000680 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 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=49999362 adj=49999739 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=6455 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=63999520 adj=63999293 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6541 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=31999937 adj=31999995 coil_temp=22.5 refs=0 mcu_temp=22.03 supply_voltage=2.978 sysload=0.24 cputime=39.349 memavail=3398732 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 647.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3734 bytes_read=9159 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=180000640 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 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=49999306 adj=49999511 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=6583 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=63999516 adj=63999299 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6897 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=31999911 adj=31999827 coil_temp=22.5 refs=0 mcu_temp=22.03 supply_voltage=2.977 sysload=0.24 cputime=39.388 memavail=3391216 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 648.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3740 bytes_read=9291 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=180000614 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 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=49999262 adj=49999218 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=6683 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=63999509 adj=63999347 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7253 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=31999892 adj=31999747 coil_temp=22.5 refs=0 mcu_temp=22.04 supply_voltage=2.978 sysload=0.24 cputime=39.413 memavail=3399700 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 649.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3746 bytes_read=9394 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=180000584 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 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=49999228 adj=49999017 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1554 bytes_read=6783 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=63999508 adj=63999343 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=7609 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=31999874 adj=31999691 coil_temp=22.5 refs=0 mcu_temp=22.05 supply_voltage=2.978 sysload=0.24 cputime=39.436 memavail=3399700 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 650.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3752 bytes_read=9492 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=180000556 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000021 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=49999201 adj=49998905 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1560 bytes_read=6925 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=63999508 adj=63999379 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=7965 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=31999862 adj=31999657 coil_temp=22.5 refs=0 mcu_temp=22.06 supply_voltage=2.978 sysload=0.24 cputime=39.471 memavail=3398952 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 651.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3758 bytes_read=9617 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=180000536 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 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=49999187 adj=49998846 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1566 bytes_read=7025 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=63999506 adj=63999416 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=8321 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=31999848 adj=31999652 coil_temp=22.5 refs=0 mcu_temp=22.06 supply_voltage=2.978 sysload=0.22 cputime=39.496 memavail=3397612 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 652.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3764 bytes_read=9734 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=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 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=49999194 adj=49998849 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1572 bytes_read=7125 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=63999508 adj=63999420 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=8677 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=31999842 adj=31999623 coil_temp=22.5 refs=0 mcu_temp=22.06 supply_voltage=2.978 sysload=0.22 cputime=39.531 memavail=3397612 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 653.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3770 bytes_read=9837 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=180000587 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 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=49999197 adj=49998879 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1578 bytes_read=7253 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=63999593 adj=63999328 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=9033 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=31999836 adj=31999590 coil_temp=22.5 refs=0 mcu_temp=22.08 supply_voltage=2.978 sysload=0.22 cputime=39.580 memavail=3397612 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 654.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3776 bytes_read=9969 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=180000589 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 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=49999222 adj=49998914 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1584 bytes_read=7353 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=63999591 adj=63999780 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=9389 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=31999831 adj=31999577 coil_temp=22.5 refs=0 mcu_temp=22.10 supply_voltage=2.978 sysload=0.22 cputime=39.629 memavail=3397612 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 655.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3782 bytes_read=10072 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=180000600 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000014 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=49999241 adj=49999091 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1590 bytes_read=7467 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=63999576 adj=63999661 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=9745 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=31999829 adj=31999582 coil_temp=22.5 refs=0 mcu_temp=22.11 supply_voltage=2.978 sysload=0.22 cputime=39.678 memavail=3397612 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 656.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3788 bytes_read=10175 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=180000607 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999244 adj=49999180 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1596 bytes_read=7595 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=63999562 adj=63999481 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=10101 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=31999826 adj=31999597 coil_temp=22.5 refs=0 mcu_temp=22.13 supply_voltage=2.977 sysload=0.20 cputime=39.726 memavail=3397612 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 657.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3794 bytes_read=10321 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=180000608 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999243 adj=49999160 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1602 bytes_read=7695 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=63999552 adj=63999345 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=10457 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=31999826 adj=31999602 coil_temp=22.5 refs=0 mcu_temp=22.15 supply_voltage=2.977 sysload=0.20 cputime=39.778 memavail=3397628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 658.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3800 bytes_read=10424 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=180000614 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999257 adj=49999131 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1608 bytes_read=7795 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=63999550 adj=63999278 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=10813 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=31999826 adj=31999630 coil_temp=22.5 refs=0 mcu_temp=22.16 supply_voltage=2.977 sysload=0.20 cputime=39.827 memavail=3397628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 659.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3806 bytes_read=10527 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=180000628 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999267 adj=49999204 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1614 bytes_read=7923 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=63999542 adj=63999262 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=11169 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=31999823 adj=31999640 coil_temp=22.5 refs=0 mcu_temp=22.19 supply_voltage=2.977 sysload=0.20 cputime=39.877 memavail=3397628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 660.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3812 bytes_read=10659 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=180000632 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999270 adj=49999212 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1620 bytes_read=8037 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=63999538 adj=63999193 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.8 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=11525 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=31999822 adj=31999627 coil_temp=22.5 refs=0 mcu_temp=22.20 supply_voltage=2.977 sysload=0.20 cputime=39.926 memavail=3397628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 661.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3818 bytes_read=10762 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=180000639 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999267 adj=49999198 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1626 bytes_read=8137 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=63999550 adj=63999181 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=11881 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=31999826 adj=31999629 coil_temp=22.5 refs=0 mcu_temp=22.23 supply_voltage=2.977 sysload=0.27 cputime=39.974 memavail=3397628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 662.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3824 bytes_read=10879 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=180000645 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999276 adj=49999133 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1632 bytes_read=8265 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=63999541 adj=63999285 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=12237 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=31999824 adj=31999670 coil_temp=22.5 refs=0 mcu_temp=22.24 supply_voltage=2.977 sysload=0.27 cputime=40.021 memavail=3397392 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 663.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3830 bytes_read=11011 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=180000660 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999271 adj=49999180 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1638 bytes_read=8365 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=63999538 adj=63999215 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=12593 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=31999825 adj=31999663 coil_temp=22.5 refs=0 mcu_temp=22.25 supply_voltage=2.977 sysload=0.27 cputime=40.071 memavail=3397392 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 664.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3836 bytes_read=11114 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=180000663 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999290 adj=49999092 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1644 bytes_read=8465 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=63999535 adj=63999175 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=12949 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=31999823 adj=31999658 coil_temp=22.5 refs=0 mcu_temp=22.26 supply_voltage=2.977 sysload=0.27 cputime=40.118 memavail=3390848 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 665.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3842 bytes_read=11217 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=180000639 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999267 adj=49999225 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1650 bytes_read=8607 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=63999524 adj=63999173 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.8 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=13305 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=31999817 adj=31999649 coil_temp=22.5 refs=0 mcu_temp=22.27 supply_voltage=2.977 sysload=0.27 cputime=40.143 memavail=3398528 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 666.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3848 bytes_read=11349 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=180000620 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999253 adj=49999073 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1656 bytes_read=8707 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=63999514 adj=63999185 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=13661 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=31999811 adj=31999654 coil_temp=22.5 refs=0 mcu_temp=22.28 supply_voltage=2.978 sysload=0.24 cputime=40.167 memavail=3398528 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 667.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3854 bytes_read=11466 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=180000602 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999241 adj=49999007 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1662 bytes_read=8807 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=63999509 adj=63999188 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=14017 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=31999808 adj=31999656 coil_temp=22.5 refs=0 mcu_temp=22.28 supply_voltage=2.978 sysload=0.24 cputime=40.190 memavail=3400412 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 668.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3860 bytes_read=11569 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=180000586 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999229 adj=49998967 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1668 bytes_read=8935 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=63999517 adj=63999233 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=14373 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=31999813 adj=31999665 coil_temp=22.5 refs=0 mcu_temp=22.28 supply_voltage=2.978 sysload=0.24 cputime=40.214 memavail=3399656 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 669.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3866 bytes_read=11701 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=180000575 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999220 adj=49998931 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1674 bytes_read=9035 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=63999509 adj=63999361 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=14729 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=31999810 adj=31999743 coil_temp=22.5 refs=0 mcu_temp=22.29 supply_voltage=2.978 sysload=0.24 cputime=40.244 memavail=3399656 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 670.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3872 bytes_read=11804 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=180000579 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49999225 adj=49998913 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1680 bytes_read=9149 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=63999504 adj=63999310 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=15085 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=31999813 adj=31999724 coil_temp=22.5 refs=0 mcu_temp=22.29 supply_voltage=2.978 sysload=0.24 cputime=40.293 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 671.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3878 bytes_read=11907 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=180000579 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999228 adj=49998982 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1686 bytes_read=9277 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=63999502 adj=63999258 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=15441 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=31999812 adj=31999740 coil_temp=22.5 refs=0 mcu_temp=22.30 supply_voltage=2.978 sysload=0.22 cputime=40.344 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 672.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3884 bytes_read=12053 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=180000585 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999231 adj=49999026 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1692 bytes_read=9377 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=63999498 adj=63999244 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=15797 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=31999812 adj=31999720 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.978 sysload=0.22 cputime=40.393 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 673.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3890 bytes_read=12156 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=180000586 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999235 adj=49999051 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1698 bytes_read=9491 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=63999495 adj=63999211 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=16153 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=31999810 adj=31999713 coil_temp=22.5 refs=0 mcu_temp=22.33 supply_voltage=2.978 sysload=0.22 cputime=40.442 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 674.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3896 bytes_read=12252 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=180000591 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999239 adj=49999090 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1704 bytes_read=9605 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=63999493 adj=63999197 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=16509 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=31999809 adj=31999690 coil_temp=22.5 refs=0 mcu_temp=22.33 supply_voltage=2.978 sysload=0.22 cputime=40.492 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 675.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3902 bytes_read=12379 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=180000592 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999240 adj=49999112 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1710 bytes_read=9719 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=63999492 adj=63999186 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=16865 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=31999807 adj=31999676 coil_temp=22.6 refs=0 mcu_temp=22.34 supply_voltage=2.978 sysload=0.22 cputime=40.542 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 676.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3908 bytes_read=12482 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=180000612 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000023 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=49999243 adj=49999110 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1716 bytes_read=9833 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=63999497 adj=63999191 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=17221 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=31999807 adj=31999666 coil_temp=22.6 refs=0 mcu_temp=22.36 supply_voltage=2.978 sysload=0.21 cputime=40.592 memavail=3399432 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 677.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3914 bytes_read=12599 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=180000618 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000023 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=49999240 adj=49999073 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1722 bytes_read=9947 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=63999503 adj=63999202 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=17577 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=31999808 adj=31999642 coil_temp=22.6 refs=0 mcu_temp=22.37 supply_voltage=2.978 sysload=0.21 cputime=40.642 memavail=3399192 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 678.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3920 bytes_read=12731 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=180000619 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000023 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=49999239 adj=49999030 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1728 bytes_read=10047 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=63999504 adj=63999256 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=17933 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=31999808 adj=31999650 coil_temp=22.6 refs=0 mcu_temp=22.38 supply_voltage=2.978 sysload=0.21 cputime=40.691 memavail=3399192 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 679.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3926 bytes_read=12834 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=180000618 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000023 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=49999242 adj=49999031 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1734 bytes_read=10161 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=63999504 adj=63999266 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=18289 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=31999810 adj=31999659 coil_temp=22.6 refs=0 mcu_temp=22.39 supply_voltage=2.978 sysload=0.21 cputime=40.740 memavail=3399224 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 680.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3932 bytes_read=12937 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=180000617 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000023 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=49999245 adj=49999064 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1740 bytes_read=10275 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=63999500 adj=63999271 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=18645 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=31999810 adj=31999698 coil_temp=22.6 refs=0 mcu_temp=22.42 supply_voltage=2.978 sysload=0.21 cputime=40.789 memavail=3399224 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 681.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3938 bytes_read=13069 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=180000617 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49999249 adj=49999106 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1746 bytes_read=10389 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=63999498 adj=63999245 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=19001 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=31999810 adj=31999696 coil_temp=22.6 refs=0 mcu_temp=22.44 supply_voltage=2.978 sysload=0.19 cputime=40.840 memavail=3397964 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 682.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3944 bytes_read=13186 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000605 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49999242 adj=49999135 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1752 bytes_read=10503 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=63999492 adj=63999229 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=19357 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=31999808 adj=31999696 coil_temp=22.6 refs=0 mcu_temp=22.44 supply_voltage=2.978 sysload=0.19 cputime=40.866 memavail=3399872 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 683.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3950 bytes_read=13289 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000593 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49999238 adj=49999088 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1758 bytes_read=10617 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=63999486 adj=63999225 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=19713 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=31999809 adj=31999695 coil_temp=22.6 refs=0 mcu_temp=22.46 supply_voltage=2.978 sysload=0.19 cputime=40.889 memavail=3399872 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 684.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3956 bytes_read=13421 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000582 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49999233 adj=49999074 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1764 bytes_read=10717 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=63999481 adj=63999225 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=20069 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=31999806 adj=31999732 coil_temp=22.6 refs=0 mcu_temp=22.46 supply_voltage=2.978 sysload=0.19 cputime=40.913 memavail=3399880 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 685.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3962 bytes_read=13524 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000578 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49999226 adj=49999056 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1770 bytes_read=10831 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=63999480 adj=63999223 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=20425 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=31999804 adj=31999713 coil_temp=22.6 refs=0 mcu_temp=22.47 supply_voltage=2.978 sysload=0.19 cputime=40.936 memavail=3399880 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 686.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3968 bytes_read=13627 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000012 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=49999221 adj=49998996 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1776 bytes_read=10959 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=63999476 adj=63999242 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=20781 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=31999801 adj=31999698 coil_temp=22.6 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.17 cputime=40.962 memavail=3399880 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 687.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3974 bytes_read=13773 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000571 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000012 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=49999224 adj=49998977 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1782 bytes_read=11059 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=63999475 adj=63999231 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=21137 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=31999801 adj=31999705 coil_temp=22.6 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.17 cputime=41.012 memavail=3399880 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 688.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3980 bytes_read=13876 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000581 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000012 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=49999226 adj=49999036 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1788 bytes_read=11173 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=63999475 adj=63999235 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=21493 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=31999801 adj=31999698 coil_temp=22.6 refs=0 mcu_temp=22.51 supply_voltage=2.978 sysload=0.17 cputime=41.061 memavail=3399880 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 689.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3986 bytes_read=13979 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000581 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000012 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=49999230 adj=49999035 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1794 bytes_read=11287 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=63999474 adj=63999207 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=21849 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=31999805 adj=31999680 coil_temp=22.6 refs=0 mcu_temp=22.52 supply_voltage=2.978 sysload=0.17 cputime=41.109 memavail=3399628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 690.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3992 bytes_read=14111 bytes_retransmit=9 bytes_invalid=0 send_seq=359 receive_seq=359 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000591 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000012 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=49999231 adj=49999083 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1800 bytes_read=11387 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=63999480 adj=63999209 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=45.3 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=22205 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=31999806 adj=31999734 coil_temp=22.6 refs=0 mcu_temp=22.53 supply_voltage=2.978 sysload=0.17 cputime=41.159 memavail=3399628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 691.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3998 bytes_read=14214 bytes_retransmit=9 bytes_invalid=0 send_seq=360 receive_seq=360 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000594 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 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=49999232 adj=49999063 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1806 bytes_read=11512 bytes_retransmit=9 bytes_invalid=0 send_seq=214 receive_seq=214 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999485 adj=63999249 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=708 bytes_read=22561 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=31999806 adj=31999714 coil_temp=22.6 refs=0 mcu_temp=22.53 supply_voltage=2.978 sysload=0.16 cputime=41.208 memavail=3399628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 692.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4004 bytes_read=14331 bytes_retransmit=9 bytes_invalid=0 send_seq=361 receive_seq=361 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000609 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 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=49999241 adj=49999064 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1812 bytes_read=11618 bytes_retransmit=9 bytes_invalid=0 send_seq=215 receive_seq=215 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999485 adj=63999295 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=714 bytes_read=22917 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=31999804 adj=31999701 coil_temp=22.6 refs=0 mcu_temp=22.54 supply_voltage=2.978 sysload=0.16 cputime=41.256 memavail=3399628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 693.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4010 bytes_read=14463 bytes_retransmit=9 bytes_invalid=0 send_seq=362 receive_seq=362 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000609 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 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=49999244 adj=49999114 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1818 bytes_read=11711 bytes_retransmit=9 bytes_invalid=0 send_seq=216 receive_seq=216 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999485 adj=63999236 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=720 bytes_read=23273 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=31999808 adj=31999656 coil_temp=22.6 refs=0 mcu_temp=22.55 supply_voltage=2.978 sysload=0.16 cputime=41.308 memavail=3399628 print_time=7.555 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
RatOS | DEBUG:: Debugging enabled.
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 1313.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7796 bytes_read=85940 bytes_retransmit=9 bytes_invalid=0 send_seq=993 receive_seq=993 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000483 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=4992 bytes_read=17451 bytes_retransmit=0 bytes_invalid=0 send_seq=806 receive_seq=806 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999252 adj=49999268 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5604 bytes_read=81113 bytes_retransmit=9 bytes_invalid=0 send_seq=847 receive_seq=847 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999436 adj=63999285 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=29.4 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4506 bytes_read=243627 bytes_retransmit=0 bytes_invalid=0 send_seq=751 receive_seq=751 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999769 adj=31999664 coil_temp=23.0 refs=0 mcu_temp=23.37 supply_voltage=2.978 sysload=0.24 cputime=66.726 memavail=3402440 print_time=687.328 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1314.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7802 bytes_read=86043 bytes_retransmit=9 bytes_invalid=0 send_seq=994 receive_seq=994 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000484 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=4998 bytes_read=17466 bytes_retransmit=0 bytes_invalid=0 send_seq=807 receive_seq=807 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999253 adj=49999275 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5610 bytes_read=81255 bytes_retransmit=9 bytes_invalid=0 send_seq=848 receive_seq=848 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999437 adj=63999290 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=29.5 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4512 bytes_read=243983 bytes_retransmit=0 bytes_invalid=0 send_seq=752 receive_seq=752 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999769 adj=31999666 coil_temp=23.0 refs=0 mcu_temp=23.36 supply_voltage=2.978 sysload=0.24 cputime=66.778 memavail=3402440 print_time=687.328 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1315.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7808 bytes_read=86175 bytes_retransmit=9 bytes_invalid=0 send_seq=995 receive_seq=995 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000486 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000019 bytes_write=5004 bytes_read=17481 bytes_retransmit=0 bytes_invalid=0 send_seq=808 receive_seq=808 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999256 adj=49999243 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5616 bytes_read=81355 bytes_retransmit=9 bytes_invalid=0 send_seq=849 receive_seq=849 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999283 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=29.4 raspberry_pi: temp=45.3 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4518 bytes_read=244339 bytes_retransmit=0 bytes_invalid=0 send_seq=753 receive_seq=753 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999768 adj=31999664 coil_temp=23.0 refs=0 mcu_temp=23.36 supply_voltage=2.978 sysload=0.24 cputime=66.827 memavail=3402440 print_time=687.328 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1316.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7814 bytes_read=86292 bytes_retransmit=9 bytes_invalid=0 send_seq=996 receive_seq=996 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000489 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=5010 bytes_read=17510 bytes_retransmit=0 bytes_invalid=0 send_seq=809 receive_seq=809 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999256 adj=49999252 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5622 bytes_read=81455 bytes_retransmit=9 bytes_invalid=0 send_seq=850 receive_seq=850 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999439 adj=63999281 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=29.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4524 bytes_read=244695 bytes_retransmit=0 bytes_invalid=0 send_seq=754 receive_seq=754 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999657 coil_temp=23.0 refs=0 mcu_temp=23.36 supply_voltage=2.977 sysload=0.22 cputime=66.880 memavail=3402440 print_time=687.328 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4124617096
Received 634.775852: b'{"id":4090249856,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 634.777201: b'{"id":4081615080,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 635.263745: b'{"id":4081616328,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 762.305049: b'{"id":4046380672,"method":"objects/query","params":{"objects":{"gcode":["commands"]}}}'
Received 762.309139: b'{"id":4046379880,"method":"info","params":{}}'
Received 762.309139: b'{"id":4046378824,"method":"objects/list","params":{}}'
Received 762.340090: b'{"id":4046355592,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 763.752387: b'{"id":4046356192,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 796.734293: b'{"id":4046174816,"method":"objects/query","params":{"objects":{"gcode":["commands"]}}}'
Received 796.734293: b'{"id":4046172224,"method":"info","params":{}}'
Received 796.734293: b'{"id":4046174000,"method":"objects/list","params":{}}'
Received 797.973780: b'{"id":4046378008,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 848.994486: b'{"id":4046355592,"method":"objects/query","params":{"objects":{"gcode":["commands"]}}}'
Received 848.994486: b'{"id":4046173688,"method":"info","params":{}}'
Received 848.994486: b'{"id":4046354944,"method":"objects/list","params":{}}'
Received 850.276131: b'{"id":4081183856,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 851.782600: b'{"id":4046354128,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 1306.721379: b'{"id":4090617280,"method":"gcode/script","params":{"script":"ENABLE_DEBUG"}}'
Received 1313.068401: b'{"id":4045943040,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 1316.367701: b'{"id":4045945656,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 X-10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[190.0, 200.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
MCU 'mcu' shutdown: Command request
clocksync state: mcu_freq=180000000 last_clock=124239481506 clock_est=(1287.672 119100674220 180000489.083) min_half_rtt=0.000067 min_rtt_time=632.648 time_avg=1287.672(843.144) clock_avg=119100674220.551(151766253362.533) pred_variance=12846218.405
Dumping serial stats: bytes_write=8147 bytes_read=86425 bytes_retransmit=9 bytes_invalid=0 send_seq=1008 receive_seq=1008 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1230.573497 1230.573497 6: seq: 1c, get_clock
Sent 1 1231.557784 1231.557784 6: seq: 1d, get_clock
Sent 2 1232.542126 1232.542126 6: seq: 1e, get_clock
Sent 3 1233.526599 1233.526599 6: seq: 1f, get_clock
Sent 4 1234.510766 1234.510766 6: seq: 10, get_clock
Sent 5 1235.494830 1235.494830 6: seq: 11, get_clock
Sent 6 1236.479133 1236.479133 6: seq: 12, get_clock
Sent 7 1237.463400 1237.463400 6: seq: 13, get_clock
Sent 8 1238.448132 1238.448132 6: seq: 14, get_clock
Sent 9 1239.432338 1239.432338 6: seq: 15, get_clock
Sent 10 1240.416631 1240.416631 6: seq: 16, get_clock
Sent 11 1241.401273 1241.401273 6: seq: 17, get_clock
Sent 12 1242.385339 1242.385339 6: seq: 18, get_clock
Sent 13 1243.369601 1243.369601 6: seq: 19, get_clock
Sent 14 1244.353992 1244.353992 6: seq: 1a, get_clock
Sent 15 1245.338198 1245.338198 6: seq: 1b, get_clock
Sent 16 1246.322456 1246.322456 6: seq: 1c, get_clock
Sent 17 1247.306695 1247.306695 6: seq: 1d, get_clock
Sent 18 1248.291393 1248.291393 6: seq: 1e, get_clock
Sent 19 1249.276421 1249.276421 6: seq: 1f, get_clock
Sent 20 1250.262330 1250.262330 6: seq: 10, get_clock
Sent 21 1251.246691 1251.246691 6: seq: 11, get_clock
Sent 22 1252.230985 1252.230985 6: seq: 12, get_clock
Sent 23 1253.215270 1253.215270 6: seq: 13, get_clock
Sent 24 1254.199649 1254.199649 6: seq: 14, get_clock
Sent 25 1255.183849 1255.183849 6: seq: 15, get_clock
Sent 26 1256.168700 1256.168700 6: seq: 16, get_clock
Sent 27 1257.153390 1257.153390 6: seq: 17, get_clock
Sent 28 1258.138277 1258.138277 6: seq: 18, get_clock
Sent 29 1259.122436 1259.122436 6: seq: 19, get_clock
Sent 30 1260.106803 1260.106803 6: seq: 1a, get_clock
Sent 31 1261.091790 1261.091790 6: seq: 1b, get_clock
Sent 32 1262.076867 1262.076867 6: seq: 1c, get_clock
Sent 33 1263.061092 1263.061092 6: seq: 1d, get_clock
Sent 34 1264.045671 1264.045671 6: seq: 1e, get_clock
Sent 35 1265.029847 1265.029847 6: seq: 1f, get_clock
Sent 36 1266.014075 1266.014075 6: seq: 10, get_clock
Sent 37 1266.998622 1266.998622 6: seq: 11, get_clock
Sent 38 1267.983102 1267.983102 6: seq: 12, get_clock
Sent 39 1268.967318 1268.967318 6: seq: 13, get_clock
Sent 40 1269.951584 1269.951584 6: seq: 14, get_clock
Sent 41 1270.935819 1270.935819 6: seq: 15, get_clock
Sent 42 1271.920146 1271.920146 6: seq: 16, get_clock
Sent 43 1272.904902 1272.904902 6: seq: 17, get_clock
Sent 44 1273.889899 1273.889899 6: seq: 18, get_clock
Sent 45 1274.874177 1274.874177 6: seq: 19, get_clock
Sent 46 1275.858432 1275.858432 6: seq: 1a, get_clock
Sent 47 1276.844383 1276.844383 6: seq: 1b, get_clock
Sent 48 1277.829203 1277.829203 6: seq: 1c, get_clock
Sent 49 1278.813434 1278.813434 6: seq: 1d, get_clock
Sent 50 1279.797516 1279.797516 6: seq: 1e, get_clock
Sent 51 1280.781831 1280.781831 6: seq: 1f, get_clock
Sent 52 1281.766020 1281.766020 6: seq: 10, get_clock
Sent 53 1282.750234 1282.750234 6: seq: 11, get_clock
Sent 54 1283.734528 1283.734528 6: seq: 12, get_clock
Sent 55 1284.719538 1284.719538 6: seq: 13, get_clock
Sent 56 1285.703761 1285.703761 6: seq: 14, get_clock
Sent 57 1286.687961 1286.687961 6: seq: 15, get_clock
Sent 58 1287.672249 1287.672249 6: seq: 16, get_clock
Sent 59 1288.656616 1288.656616 6: seq: 17, get_clock
Sent 60 1289.640661 1289.640661 6: seq: 18, get_clock
Sent 61 1290.625370 1290.625370 6: seq: 19, get_clock
Sent 62 1291.609794 1291.609794 6: seq: 1a, get_clock
Sent 63 1292.593896 1292.593896 6: seq: 1b, get_clock
Sent 64 1293.578162 1293.578162 6: seq: 1c, get_clock
Sent 65 1294.562549 1294.562549 6: seq: 1d, get_clock
Sent 66 1295.546602 1295.546602 6: seq: 1e, get_clock
Sent 67 1296.530835 1296.530835 6: seq: 1f, get_clock
Sent 68 1297.515935 1297.515935 6: seq: 10, get_clock
Sent 69 1298.500170 1298.500170 6: seq: 11, get_clock
Sent 70 1299.485166 1299.485166 6: seq: 12, get_clock
Sent 71 1300.469709 1300.469709 6: seq: 13, get_clock
Sent 72 1301.453936 1301.453936 6: seq: 14, get_clock
Sent 73 1302.438597 1302.438597 6: seq: 15, get_clock
Sent 74 1303.422834 1303.422834 6: seq: 16, get_clock
Sent 75 1304.407275 1304.407275 6: seq: 17, get_clock
Sent 76 1305.391459 1305.391459 6: seq: 18, get_clock
Sent 77 1306.375677 1306.375677 6: seq: 19, get_clock
Sent 78 1307.360503 1307.360503 6: seq: 1a, get_clock
Sent 79 1308.344749 1308.344749 6: seq: 1b, get_clock
Sent 80 1309.329002 1309.329002 6: seq: 1c, get_clock
Sent 81 1310.313498 1310.313498 6: seq: 1d, get_clock
Sent 82 1311.298015 1311.298015 6: seq: 1e, get_clock
Sent 83 1312.282091 1312.282091 6: seq: 1f, get_clock
Sent 84 1313.266188 1313.266188 6: seq: 10, get_clock
Sent 85 1314.250468 1314.250468 6: seq: 11, get_clock
Sent 86 1315.234850 1315.234850 6: seq: 12, get_clock
Sent 87 1316.220347 1316.220347 6: seq: 13, get_clock
Sent 88 1316.471581 1316.471581 21: seq: 14, queue_digital_out oid=24 clock=4070333307 on_ticks=0, queue_digital_out oid=25 clock=4070333307 on_ticks=0
Sent 89 1316.473741 1316.473741 61: seq: 15, set_next_step_dir oid=9 dir=0, set_next_step_dir oid=11 dir=0, queue_step oid=9 interval=4070517019 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=4070517019 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513
Sent 90 1316.473741 1316.473741 61: seq: 16, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72
Sent 91 1316.473741 1316.473741 60: seq: 17, queue_step oid=11 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1
Sent 92 1316.474754 1316.474754 40: seq: 18, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=11 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0
Sent 93 1316.478443 1316.478443 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 94 1316.483432 1316.483432 14: seq: 1a, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 1316.487232 1316.487232 14: seq: 1b, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 1316.491108 1316.491108 14: seq: 1c, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 1316.494912 1316.494912 14: seq: 1d, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 98 1316.498690 1316.498690 14: seq: 1e, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 1316.505954 1316.505954 6: seq: 1f, emergency_stop
Dumping receive queue 100 messages
Receive: 0 1304.918396 1304.407275 15: seq: 18, analog_in_state oid=21 next_clock=1998715712 value=31486
Receive: 1 1305.208437 1304.407275 14: seq: 18, analog_in_state oid=20 next_clock=2050915712 value=7526
Receive: 2 1305.218400 1304.407275 15: seq: 18, analog_in_state oid=21 next_clock=2052715712 value=31486
Receive: 3 1305.391621 1305.391459 11: seq: 19, clock clock=2031184658
Receive: 4 1305.508427 1305.391459 14: seq: 19, analog_in_state oid=20 next_clock=2104915712 value=7529
Receive: 5 1305.518409 1305.391459 15: seq: 19, analog_in_state oid=21 next_clock=2106715712 value=31488
Receive: 6 1305.701272 1305.391459 14: seq: 19, stats count=130 sum=116009 sumsq=605968
Receive: 7 1305.808406 1305.391459 14: seq: 19, analog_in_state oid=20 next_clock=2158915712 value=7531
Receive: 8 1305.818388 1305.391459 15: seq: 19, analog_in_state oid=21 next_clock=2160715712 value=31491
Receive: 9 1306.108403 1305.391459 14: seq: 19, analog_in_state oid=20 next_clock=2212915712 value=7529
Receive: 10 1306.118404 1305.391459 15: seq: 19, analog_in_state oid=21 next_clock=2214715712 value=31490
Receive: 11 1306.375830 1306.375677 11: seq: 1a, clock clock=2208344513
Receive: 12 1306.408371 1306.375677 14: seq: 1a, analog_in_state oid=20 next_clock=2266915712 value=7527
Receive: 13 1306.418396 1306.375677 15: seq: 1a, analog_in_state oid=21 next_clock=2268715712 value=31490
Receive: 14 1306.708417 1306.375677 14: seq: 1a, analog_in_state oid=20 next_clock=2320915712 value=7525
Receive: 15 1306.718400 1306.375677 15: seq: 1a, analog_in_state oid=21 next_clock=2322715712 value=31487
Receive: 16 1307.008451 1306.375677 14: seq: 1a, analog_in_state oid=20 next_clock=2374915712 value=7527
Receive: 17 1307.018431 1306.375677 15: seq: 1a, analog_in_state oid=21 next_clock=2376715712 value=31489
Receive: 18 1307.308450 1306.375677 14: seq: 1a, analog_in_state oid=20 next_clock=2428915712 value=7523
Receive: 19 1307.318437 1306.375677 15: seq: 1a, analog_in_state oid=21 next_clock=2430715712 value=31488
Receive: 20 1307.360756 1307.360503 11: seq: 1b, clock clock=2385618642
Receive: 21 1307.608477 1307.360503 14: seq: 1b, analog_in_state oid=20 next_clock=2482915712 value=7526
Receive: 22 1307.618462 1307.360503 15: seq: 1b, analog_in_state oid=21 next_clock=2484715712 value=31487
Receive: 23 1307.908557 1307.360503 14: seq: 1b, analog_in_state oid=20 next_clock=2536915712 value=7526
Receive: 24 1307.918501 1307.360503 15: seq: 1b, analog_in_state oid=21 next_clock=2538715712 value=31486
Receive: 25 1308.208587 1307.360503 14: seq: 1b, analog_in_state oid=20 next_clock=2590915712 value=7527
Receive: 26 1308.218548 1307.360503 15: seq: 1b, analog_in_state oid=21 next_clock=2592715712 value=31487
Receive: 27 1308.344996 1308.344749 11: seq: 1c, clock clock=2562783462
Receive: 28 1308.508525 1308.344749 14: seq: 1c, analog_in_state oid=20 next_clock=2644915712 value=7527
Receive: 29 1308.518464 1308.344749 15: seq: 1c, analog_in_state oid=21 next_clock=2646715712 value=31483
Receive: 30 1308.808476 1308.344749 14: seq: 1c, analog_in_state oid=20 next_clock=2698915712 value=7526
Receive: 31 1308.818459 1308.344749 15: seq: 1c, analog_in_state oid=21 next_clock=2700715712 value=31483
Receive: 32 1309.108531 1308.344749 14: seq: 1c, analog_in_state oid=20 next_clock=2752915712 value=7525
Receive: 33 1309.118453 1308.344749 15: seq: 1c, analog_in_state oid=21 next_clock=2754715712 value=31481
Receive: 34 1309.329353 1309.329002 11: seq: 1d, clock clock=2739949321
Receive: 35 1309.408458 1309.329002 14: seq: 1d, analog_in_state oid=20 next_clock=2806915712 value=7527
Receive: 36 1309.418443 1309.329002 15: seq: 1d, analog_in_state oid=21 next_clock=2808715712 value=31479
Receive: 37 1309.708549 1309.329002 14: seq: 1d, analog_in_state oid=20 next_clock=2860915712 value=7525
Receive: 38 1309.718497 1309.329002 15: seq: 1d, analog_in_state oid=21 next_clock=2862715712 value=31479
Receive: 39 1310.008465 1309.329002 14: seq: 1d, analog_in_state oid=20 next_clock=2914915712 value=7527
Receive: 40 1310.018470 1309.329002 15: seq: 1d, analog_in_state oid=21 next_clock=2916715712 value=31475
Receive: 41 1310.308458 1309.329002 14: seq: 1d, analog_in_state oid=20 next_clock=2968915712 value=7527
Receive: 42 1310.313807 1310.313498 11: seq: 1e, clock clock=2917158912
Receive: 43 1310.318454 1310.313498 15: seq: 1e, analog_in_state oid=21 next_clock=2970715712 value=31471
Receive: 44 1310.608466 1310.313498 14: seq: 1e, analog_in_state oid=20 next_clock=3022915712 value=7525
Receive: 45 1310.618435 1310.313498 15: seq: 1e, analog_in_state oid=21 next_clock=3024715712 value=31472
Receive: 46 1310.801290 1310.313498 14: seq: 1e, stats count=130 sum=115895 sumsq=606969
Receive: 47 1310.908459 1310.313498 14: seq: 1e, analog_in_state oid=20 next_clock=3076915712 value=7527
Receive: 48 1310.918438 1310.313498 15: seq: 1e, analog_in_state oid=21 next_clock=3078715712 value=31470
Receive: 49 1311.208523 1310.313498 14: seq: 1e, analog_in_state oid=20 next_clock=3130915712 value=7528
Receive: 50 1311.218451 1310.313498 15: seq: 1e, analog_in_state oid=21 next_clock=3132715712 value=31465
Receive: 51 1311.298286 1311.298015 11: seq: 1f, clock clock=3094371975
Receive: 52 1311.508486 1311.298015 14: seq: 1f, analog_in_state oid=20 next_clock=3184915712 value=7527
Receive: 53 1311.518444 1311.298015 15: seq: 1f, analog_in_state oid=21 next_clock=3186715712 value=31463
Receive: 54 1311.808637 1311.298015 14: seq: 1f, analog_in_state oid=20 next_clock=3238915712 value=7525
Receive: 55 1311.818455 1311.298015 15: seq: 1f, analog_in_state oid=21 next_clock=3240715712 value=31461
Receive: 56 1312.108455 1311.298015 14: seq: 1f, analog_in_state oid=20 next_clock=3292915712 value=7522
Receive: 57 1312.118444 1311.298015 15: seq: 1f, analog_in_state oid=21 next_clock=3294715712 value=31457
Receive: 58 1312.282320 1312.282091 11: seq: 10, clock clock=3271505959
Receive: 59 1312.408460 1312.282091 14: seq: 10, analog_in_state oid=20 next_clock=3346915712 value=7528
Receive: 60 1312.418448 1312.282091 15: seq: 10, analog_in_state oid=21 next_clock=3348715712 value=31459
Receive: 61 1312.708549 1312.282091 14: seq: 10, analog_in_state oid=20 next_clock=3400915712 value=7525
Receive: 62 1312.718497 1312.282091 15: seq: 10, analog_in_state oid=21 next_clock=3402715712 value=31459
Receive: 63 1313.008477 1312.282091 14: seq: 10, analog_in_state oid=20 next_clock=3454915712 value=7527
Receive: 64 1313.018435 1312.282091 15: seq: 10, analog_in_state oid=21 next_clock=3456715712 value=31458
Receive: 65 1313.266410 1313.266188 11: seq: 11, clock clock=3448643460
Receive: 66 1313.308444 1313.266188 14: seq: 11, analog_in_state oid=20 next_clock=3508915712 value=7526
Receive: 67 1313.318434 1313.266188 15: seq: 11, analog_in_state oid=21 next_clock=3510715712 value=31456
Receive: 68 1313.608459 1313.266188 14: seq: 11, analog_in_state oid=20 next_clock=3562915712 value=7527
Receive: 69 1313.618428 1313.266188 15: seq: 11, analog_in_state oid=21 next_clock=3564715712 value=31452
Receive: 70 1313.908461 1313.266188 14: seq: 11, analog_in_state oid=20 next_clock=3616915712 value=7527
Receive: 71 1313.918445 1313.266188 15: seq: 11, analog_in_state oid=21 next_clock=3618715712 value=31452
Receive: 72 1314.208512 1313.266188 14: seq: 11, analog_in_state oid=20 next_clock=3670915712 value=7528
Receive: 73 1314.218506 1313.266188 15: seq: 11, analog_in_state oid=21 next_clock=3672715712 value=31448
Receive: 74 1314.250755 1314.250468 11: seq: 12, clock clock=3625816549
Receive: 75 1314.508537 1314.250468 14: seq: 12, analog_in_state oid=20 next_clock=3724915712 value=7526
Receive: 76 1314.518477 1314.250468 15: seq: 12, analog_in_state oid=21 next_clock=3726715712 value=31448
Receive: 77 1314.808456 1314.250468 14: seq: 12, analog_in_state oid=20 next_clock=3778915712 value=7523
Receive: 78 1314.818435 1314.250468 15: seq: 12, analog_in_state oid=21 next_clock=3780715712 value=31448
Receive: 79 1315.108463 1314.250468 14: seq: 12, analog_in_state oid=20 next_clock=3832915712 value=7530
Receive: 80 1315.118432 1314.250468 15: seq: 12, analog_in_state oid=21 next_clock=3834715712 value=31447
Receive: 81 1315.235155 1315.234850 11: seq: 13, clock clock=3803005774
Receive: 82 1315.408446 1315.234850 14: seq: 13, analog_in_state oid=20 next_clock=3886915712 value=7528
Receive: 83 1315.418426 1315.234850 15: seq: 13, analog_in_state oid=21 next_clock=3888715712 value=31449
Receive: 84 1315.708449 1315.234850 14: seq: 13, analog_in_state oid=20 next_clock=3940915712 value=7527
Receive: 85 1315.718546 1315.234850 15: seq: 13, analog_in_state oid=21 next_clock=3942715712 value=31447
Receive: 86 1315.901306 1315.234850 14: seq: 13, stats count=130 sum=116006 sumsq=605966
Receive: 87 1316.008464 1315.234850 14: seq: 13, analog_in_state oid=20 next_clock=3994915712 value=7530
Receive: 88 1316.018417 1315.234850 15: seq: 13, analog_in_state oid=21 next_clock=3996715712 value=31445
Receive: 89 1316.220677 1316.220347 11: seq: 14, clock clock=3980397218
Receive: 90 1316.308425 1316.220347 14: seq: 14, analog_in_state oid=20 next_clock=4048915712 value=7528
Receive: 91 1316.318409 1316.220347 15: seq: 14, analog_in_state oid=21 next_clock=4050715712 value=31445
Receive: 92 1316.477638 1316.474754 8: seq: 19, tmcuart_response oid=2 read=b''
Receive: 93 1316.482466 1316.478443 18: seq: 1a, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02(\xa4\xec'
Receive: 94 1316.486542 1316.483432 8: seq: 1b, tmcuart_response oid=3 read=b''
Receive: 95 1316.490350 1316.487232 8: seq: 1c, tmcuart_response oid=3 read=b''
Receive: 96 1316.494219 1316.491108 8: seq: 1d, tmcuart_response oid=3 read=b''
Receive: 97 1316.498017 1316.494912 8: seq: 1e, tmcuart_response oid=3 read=b''
Receive: 98 1316.501896 1316.498690 8: seq: 1f, tmcuart_response oid=3 read=b''
Receive: 99 1316.506375 1316.505954 12: seq: 10, shutdown clock=4031809419 static_string_id=Command request
Reactor garbage collection: (1316.47573427, 1274.110111425, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
MCU 'beacon' shutdown: Emergency stop
clocksync state: mcu_freq=32000000 last_clock=22126616644 clock_est=(1287.672 21213047323 31999767.791) min_half_rtt=0.000182 min_rtt_time=1200.057 time_avg=1287.672(843.147) clock_avg=21213047323.734(26980494338.215) pred_variance=3627835.107 clock_adj=(-1.244 31999643.500)
Dumping serial stats: bytes_write=4530 bytes_read=244736 bytes_retransmit=0 bytes_invalid=0 send_seq=755 receive_seq=755 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1220.728328 1220.728328 6: seq: 10, get_clock
Sent 1 1221.713240 1221.713240 6: seq: 11, get_clock
Sent 2 1222.698426 1222.698426 6: seq: 12, get_clock
Sent 3 1223.683929 1223.683929 6: seq: 13, get_clock
Sent 4 1224.668516 1224.668516 6: seq: 14, get_clock
Sent 5 1225.652587 1225.652587 6: seq: 15, get_clock
Sent 6 1226.636435 1226.636435 6: seq: 16, get_clock
Sent 7 1227.621199 1227.621199 6: seq: 17, get_clock
Sent 8 1228.604904 1228.604904 6: seq: 18, get_clock
Sent 9 1229.589586 1229.589586 6: seq: 19, get_clock
Sent 10 1230.574077 1230.574077 6: seq: 1a, get_clock
Sent 11 1231.558212 1231.558212 6: seq: 1b, get_clock
Sent 12 1232.542378 1232.542378 6: seq: 1c, get_clock
Sent 13 1233.527167 1233.527167 6: seq: 1d, get_clock
Sent 14 1234.511334 1234.511334 6: seq: 1e, get_clock
Sent 15 1235.495464 1235.495464 6: seq: 1f, get_clock
Sent 16 1236.479946 1236.479946 6: seq: 10, get_clock
Sent 17 1237.463622 1237.463622 6: seq: 11, get_clock
Sent 18 1238.448613 1238.448613 6: seq: 12, get_clock
Sent 19 1239.432802 1239.432802 6: seq: 13, get_clock
Sent 20 1240.417556 1240.417556 6: seq: 14, get_clock
Sent 21 1241.402317 1241.402317 6: seq: 15, get_clock
Sent 22 1242.386385 1242.386385 6: seq: 16, get_clock
Sent 23 1243.370768 1243.370768 6: seq: 17, get_clock
Sent 24 1244.354936 1244.354936 6: seq: 18, get_clock
Sent 25 1245.338463 1245.338463 6: seq: 19, get_clock
Sent 26 1246.322563 1246.322563 6: seq: 1a, get_clock
Sent 27 1247.307158 1247.307158 6: seq: 1b, get_clock
Sent 28 1248.291684 1248.291684 6: seq: 1c, get_clock
Sent 29 1249.275917 1249.275917 6: seq: 1d, get_clock
Sent 30 1250.262390 1250.262390 6: seq: 1e, get_clock
Sent 31 1251.246737 1251.246737 6: seq: 1f, get_clock
Sent 32 1252.231193 1252.231193 6: seq: 10, get_clock
Sent 33 1253.215611 1253.215611 6: seq: 11, get_clock
Sent 34 1254.199859 1254.199859 6: seq: 12, get_clock
Sent 35 1255.184053 1255.184053 6: seq: 13, get_clock
Sent 36 1256.170017 1256.170017 6: seq: 14, get_clock
Sent 37 1257.154550 1257.154550 6: seq: 15, get_clock
Sent 38 1258.139597 1258.139597 6: seq: 16, get_clock
Sent 39 1259.123130 1259.123130 6: seq: 17, get_clock
Sent 40 1260.108071 1260.108071 6: seq: 18, get_clock
Sent 41 1261.092443 1261.092443 6: seq: 19, get_clock
Sent 42 1262.077865 1262.077865 6: seq: 1a, get_clock
Sent 43 1263.061671 1263.061671 6: seq: 1b, get_clock
Sent 44 1264.046956 1264.046956 6: seq: 1c, get_clock
Sent 45 1265.031060 1265.031060 6: seq: 1d, get_clock
Sent 46 1266.015412 1266.015412 6: seq: 1e, get_clock
Sent 47 1266.999712 1266.999712 6: seq: 1f, get_clock
Sent 48 1267.983236 1267.983236 6: seq: 10, get_clock
Sent 49 1268.967449 1268.967449 6: seq: 11, get_clock
Sent 50 1269.951732 1269.951732 6: seq: 12, get_clock
Sent 51 1270.935952 1270.935952 6: seq: 13, get_clock
Sent 52 1271.920280 1271.920280 6: seq: 14, get_clock
Sent 53 1272.905213 1272.905213 6: seq: 15, get_clock
Sent 54 1273.890206 1273.890206 6: seq: 16, get_clock
Sent 55 1274.874509 1274.874509 6: seq: 17, get_clock
Sent 56 1275.858771 1275.858771 6: seq: 18, get_clock
Sent 57 1276.845026 1276.845026 6: seq: 19, get_clock
Sent 58 1277.829647 1277.829647 6: seq: 1a, get_clock
Sent 59 1278.814223 1278.814223 6: seq: 1b, get_clock
Sent 60 1279.798193 1279.798193 6: seq: 1c, get_clock
Sent 61 1280.782568 1280.782568 6: seq: 1d, get_clock
Sent 62 1281.766632 1281.766632 6: seq: 1e, get_clock
Sent 63 1282.750799 1282.750799 6: seq: 1f, get_clock
Sent 64 1283.734991 1283.734991 6: seq: 10, get_clock
Sent 65 1284.720229 1284.720229 6: seq: 11, get_clock
Sent 66 1285.703911 1285.703911 6: seq: 12, get_clock
Sent 67 1286.688188 1286.688188 6: seq: 13, get_clock
Sent 68 1287.672490 1287.672490 6: seq: 14, get_clock
Sent 69 1288.656773 1288.656773 6: seq: 15, get_clock
Sent 70 1289.640816 1289.640816 6: seq: 16, get_clock
Sent 71 1290.625653 1290.625653 6: seq: 17, get_clock
Sent 72 1291.610082 1291.610082 6: seq: 18, get_clock
Sent 73 1292.595268 1292.595268 6: seq: 19, get_clock
Sent 74 1293.578274 1293.578274 6: seq: 1a, get_clock
Sent 75 1294.563360 1294.563360 6: seq: 1b, get_clock
Sent 76 1295.546860 1295.546860 6: seq: 1c, get_clock
Sent 77 1296.531204 1296.531204 6: seq: 1d, get_clock
Sent 78 1297.516597 1297.516597 6: seq: 1e, get_clock
Sent 79 1298.501290 1298.501290 6: seq: 1f, get_clock
Sent 80 1299.485915 1299.485915 6: seq: 10, get_clock
Sent 81 1300.470118 1300.470118 6: seq: 11, get_clock
Sent 82 1301.454947 1301.454947 6: seq: 12, get_clock
Sent 83 1302.438706 1302.438706 6: seq: 13, get_clock
Sent 84 1303.422950 1303.422950 6: seq: 14, get_clock
Sent 85 1304.407713 1304.407713 6: seq: 15, get_clock
Sent 86 1305.391578 1305.391578 6: seq: 16, get_clock
Sent 87 1306.375881 1306.375881 6: seq: 17, get_clock
Sent 88 1307.361424 1307.361424 6: seq: 18, get_clock
Sent 89 1308.345372 1308.345372 6: seq: 19, get_clock
Sent 90 1309.329647 1309.329647 6: seq: 1a, get_clock
Sent 91 1310.314487 1310.314487 6: seq: 1b, get_clock
Sent 92 1311.298452 1311.298452 6: seq: 1c, get_clock
Sent 93 1312.283166 1312.283166 6: seq: 1d, get_clock
Sent 94 1313.267268 1313.267268 6: seq: 1e, get_clock
Sent 95 1314.251621 1314.251621 6: seq: 1f, get_clock
Sent 96 1315.235154 1315.235154 6: seq: 10, get_clock
Sent 97 1316.221368 1316.221368 6: seq: 11, get_clock
Sent 98 1316.509193 1316.509193 6: seq: 12, emergency_stop
Sent 99 1316.515270 1316.515270 7: seq: 13, beacon_stream en=0
Dumping receive queue 100 messages
Receive: 0 1311.818474 1311.298452 18: seq: 1d, beacon_data samples=1 start_clock=510843556 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 1 1311.860607 1311.298452 16: seq: 1d, beacon_status mcu_temp=44519 supply_voltage=48786 coil_temp=54879 status=1
Receive: 2 1311.918528 1311.298452 18: seq: 1d, beacon_data samples=1 start_clock=514044338 delta_clock=0 data=b'\x82\x8en)'
Receive: 3 1311.960853 1311.298452 16: seq: 1d, beacon_status mcu_temp=44519 supply_voltage=48786 coil_temp=54879 status=1
Receive: 4 1312.018553 1311.298452 18: seq: 1d, beacon_data samples=1 start_clock=517245125 delta_clock=0 data=b'\x82\x8en)'
Receive: 5 1312.060971 1311.298452 16: seq: 1d, beacon_status mcu_temp=44519 supply_voltage=48786 coil_temp=54879 status=1
Receive: 6 1312.118550 1311.298452 18: seq: 1d, beacon_data samples=1 start_clock=520445906 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 7 1312.161163 1311.298452 16: seq: 1d, beacon_status mcu_temp=44519 supply_voltage=48786 coil_temp=54879 status=1
Receive: 8 1312.218675 1311.298452 18: seq: 1d, beacon_data samples=1 start_clock=523646684 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 9 1312.261333 1311.298452 16: seq: 1d, beacon_status mcu_temp=44519 supply_voltage=48786 coil_temp=54878 status=1
Receive: 10 1312.283624 1312.283166 11: seq: 1e, clock clock=525758958
Receive: 11 1312.318598 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=526847467 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 12 1312.361551 1312.283166 16: seq: 1e, beacon_status mcu_temp=44519 supply_voltage=48786 coil_temp=54878 status=1
Receive: 13 1312.418668 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=530048246 delta_clock=0 data=b'\x82\x8en)'
Receive: 14 1312.461827 1312.283166 16: seq: 1e, beacon_status mcu_temp=44518 supply_voltage=48786 coil_temp=54878 status=1
Receive: 15 1312.518756 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=533249024 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 16 1312.561938 1312.283166 16: seq: 1e, beacon_status mcu_temp=44518 supply_voltage=48786 coil_temp=54878 status=1
Receive: 17 1312.618758 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=536449801 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 18 1312.662093 1312.283166 16: seq: 1e, beacon_status mcu_temp=44518 supply_voltage=48786 coil_temp=54879 status=1
Receive: 19 1312.718757 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=539650589 delta_clock=0 data=b'\x82\x8en)'
Receive: 20 1312.762294 1312.283166 16: seq: 1e, beacon_status mcu_temp=44518 supply_voltage=48786 coil_temp=54879 status=1
Receive: 21 1312.818774 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=542851370 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 22 1312.862512 1312.283166 16: seq: 1e, beacon_status mcu_temp=44518 supply_voltage=48786 coil_temp=54878 status=1
Receive: 23 1312.918773 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=546052153 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 24 1312.962764 1312.283166 16: seq: 1e, beacon_status mcu_temp=44517 supply_voltage=48786 coil_temp=54878 status=1
Receive: 25 1313.018789 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=549252941 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 26 1313.062897 1312.283166 16: seq: 1e, beacon_status mcu_temp=44517 supply_voltage=48786 coil_temp=54878 status=1
Receive: 27 1313.118869 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=552453721 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 28 1313.163065 1312.283166 16: seq: 1e, beacon_status mcu_temp=44517 supply_voltage=48786 coil_temp=54879 status=1
Receive: 29 1313.218893 1312.283166 18: seq: 1e, beacon_data samples=1 start_clock=555654511 delta_clock=0 data=b'\x82\x8en)'
Receive: 30 1313.263302 1312.283166 16: seq: 1e, beacon_status mcu_temp=44517 supply_voltage=48786 coil_temp=54878 status=1
Receive: 31 1313.267748 1313.267268 11: seq: 1f, clock clock=557250055
Receive: 32 1313.318858 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=558855300 delta_clock=0 data=b'\x82\x8en)'
Receive: 33 1313.363465 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48786 coil_temp=54878 status=1
Receive: 34 1313.418921 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=562056089 delta_clock=0 data=b'\x82\x8en)'
Receive: 35 1313.463722 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54877 status=1
Receive: 36 1313.518980 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=565256868 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 37 1313.563870 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54876 status=1
Receive: 38 1313.618938 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=568457643 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 39 1313.664128 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54876 status=1
Receive: 40 1313.719064 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=571658423 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 41 1313.764348 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54877 status=1
Receive: 42 1313.819001 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=574859212 delta_clock=0 data=b'\x82\x8en)'
Receive: 43 1313.864503 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54877 status=1
Receive: 44 1313.919023 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=578059996 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 45 1313.964779 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54877 status=1
Receive: 46 1314.019044 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=581260773 delta_clock=0 data=b'\x82\x8en)'
Receive: 47 1314.064887 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54876 status=1
Receive: 48 1314.119074 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=584461554 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 49 1314.165082 1313.267268 16: seq: 1f, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54877 status=1
Receive: 50 1314.219138 1313.267268 18: seq: 1f, beacon_data samples=1 start_clock=587662333 delta_clock=0 data=b'\x82\x8en)'
Receive: 51 1314.252103 1314.251621 11: seq: 10, clock clock=588749302
Receive: 52 1314.265326 1314.251621 16: seq: 10, beacon_status mcu_temp=44518 supply_voltage=48785 coil_temp=54877 status=1
Receive: 53 1314.319128 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=590863121 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 54 1314.365450 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54877 status=1
Receive: 55 1314.419169 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=594063908 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 56 1314.465653 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54878 status=1
Receive: 57 1314.519183 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=597264696 delta_clock=0 data=b'\x82\x8en)'
Receive: 58 1314.565787 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54877 status=1
Receive: 59 1314.619184 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=600465483 delta_clock=0 data=b'\x82\x8en)'
Receive: 60 1314.666017 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54877 status=1
Receive: 61 1314.719302 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=603666269 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 62 1314.766370 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54877 status=1
Receive: 63 1314.819228 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=606867054 delta_clock=0 data=b'\x82\x8en)'
Receive: 64 1314.866435 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54877 status=1
Receive: 65 1314.919289 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=610067831 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 66 1314.966726 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54878 status=1
Receive: 67 1315.019277 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=613268608 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 68 1315.066778 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54876 status=1
Receive: 69 1315.119317 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=616469391 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 70 1315.166933 1314.251621 16: seq: 10, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54876 status=1
Receive: 71 1315.219414 1314.251621 18: seq: 10, beacon_data samples=1 start_clock=619670179 delta_clock=0 data=b'\x82\x8en)'
Receive: 72 1315.235617 1315.235154 11: seq: 11, clock clock=620221775
Receive: 73 1315.267221 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54876 status=1
Receive: 74 1315.319371 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=622870969 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 75 1315.367376 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54877 status=1
Receive: 76 1315.419408 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=626071748 delta_clock=0 data=b'\x82\x8en)'
Receive: 77 1315.467656 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54876 status=1
Receive: 78 1315.519481 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=629272542 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 79 1315.567705 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54876 status=1
Receive: 80 1315.619469 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=632473333 delta_clock=0 data=b'\x82\x8en)'
Receive: 81 1315.667878 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48785 coil_temp=54876 status=1
Receive: 82 1315.719528 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=635674120 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 83 1315.768155 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54876 status=1
Receive: 84 1315.819489 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=638874903 delta_clock=0 data=b'\x82\x8en)'
Receive: 85 1315.868260 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54876 status=1
Receive: 86 1315.919559 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=642075690 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 87 1315.969229 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54877 status=1
Receive: 88 1316.019543 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=645276479 delta_clock=0 data=b'\x82\x8en)'
Receive: 89 1316.068806 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54878 status=1
Receive: 90 1316.119584 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=648477261 delta_clock=0 data=b'\x82\x8en)'
Receive: 91 1316.168868 1315.235154 16: seq: 11, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54878 status=1
Receive: 92 1316.219883 1315.235154 18: seq: 11, beacon_data samples=1 start_clock=651678044 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 93 1316.221837 1316.221368 11: seq: 12, clock clock=651780164
Receive: 94 1316.269113 1316.221368 16: seq: 12, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54878 status=1
Receive: 95 1316.319645 1316.221368 18: seq: 12, beacon_data samples=1 start_clock=654878822 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 96 1316.369245 1316.221368 16: seq: 12, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54879 status=1
Receive: 97 1316.419693 1316.221368 18: seq: 12, beacon_data samples=1 start_clock=658079596 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 98 1316.469472 1316.221368 16: seq: 12, beacon_status mcu_temp=44517 supply_voltage=48784 coil_temp=54880 status=1
Receive: 99 1316.509685 1316.509193 12: seq: 13, shutdown clock=660991341 static_string_id=Emergency stop
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=34566194350 clock_est=(1287.748 33136586912 49999256.837) min_half_rtt=0.000046 min_rtt_time=630.988 time_avg=1287.748(850.795) clock_avg=33136586912.892(42539103829.636) pred_variance=8883717.460 clock_adj=(-0.995 49999211.750)
Dumping serial stats: bytes_write=5016 bytes_read=17522 bytes_retransmit=0 bytes_invalid=0 send_seq=810 receive_seq=810 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1219.858886 1219.858886 6: seq: 16, get_clock
Sent 1 1220.843891 1220.843891 6: seq: 17, get_clock
Sent 2 1221.828160 1221.828160 6: seq: 18, get_clock
Sent 3 1222.812413 1222.812413 6: seq: 19, get_clock
Sent 4 1223.796902 1223.796902 6: seq: 1a, get_clock
Sent 5 1224.781835 1224.781835 6: seq: 1b, get_clock
Sent 6 1225.766181 1225.766181 6: seq: 1c, get_clock
Sent 7 1226.750859 1226.750859 6: seq: 1d, get_clock
Sent 8 1227.734952 1227.734952 6: seq: 1e, get_clock
Sent 9 1228.719079 1228.719079 6: seq: 1f, get_clock
Sent 10 1229.704007 1229.704007 6: seq: 10, get_clock
Sent 11 1230.688432 1230.688432 6: seq: 11, get_clock
Sent 12 1231.672780 1231.672780 6: seq: 12, get_clock
Sent 13 1232.657714 1232.657714 6: seq: 13, get_clock
Sent 14 1233.642422 1233.642422 6: seq: 14, get_clock
Sent 15 1234.626601 1234.626601 6: seq: 15, get_clock
Sent 16 1235.610863 1235.610863 6: seq: 16, get_clock
Sent 17 1236.595360 1236.595360 6: seq: 17, get_clock
Sent 18 1237.579629 1237.579629 6: seq: 18, get_clock
Sent 19 1238.564502 1238.564502 6: seq: 19, get_clock
Sent 20 1239.548797 1239.548797 6: seq: 1a, get_clock
Sent 21 1240.532993 1240.532993 6: seq: 1b, get_clock
Sent 22 1241.517324 1241.517324 6: seq: 1c, get_clock
Sent 23 1242.501812 1242.501812 6: seq: 1d, get_clock
Sent 24 1243.486545 1243.486545 6: seq: 1e, get_clock
Sent 25 1244.470774 1244.470774 6: seq: 1f, get_clock
Sent 26 1245.455687 1245.455687 6: seq: 10, get_clock
Sent 27 1246.440309 1246.440309 6: seq: 11, get_clock
Sent 28 1247.424407 1247.424407 6: seq: 12, get_clock
Sent 29 1248.408645 1248.408645 6: seq: 13, get_clock
Sent 30 1249.392880 1249.392880 6: seq: 14, get_clock
Sent 31 1250.377207 1250.377207 6: seq: 15, get_clock
Sent 32 1251.361960 1251.361960 6: seq: 16, get_clock
Sent 33 1252.346166 1252.346166 6: seq: 17, get_clock
Sent 34 1253.330525 1253.330525 6: seq: 18, get_clock
Sent 35 1254.314765 1254.314765 6: seq: 19, get_clock
Sent 36 1255.298992 1255.298992 6: seq: 1a, get_clock
Sent 37 1256.287051 1256.287051 6: seq: 1b, get_clock
Sent 38 1257.271036 1257.271036 6: seq: 1c, get_clock
Sent 39 1258.255312 1258.255312 6: seq: 1d, get_clock
Sent 40 1259.239775 1259.239775 6: seq: 1e, get_clock
Sent 41 1260.224792 1260.224792 6: seq: 1f, get_clock
Sent 42 1261.208946 1261.208946 6: seq: 10, get_clock
Sent 43 1262.193304 1262.193304 6: seq: 11, get_clock
Sent 44 1263.177496 1263.177496 6: seq: 12, get_clock
Sent 45 1264.161656 1264.161656 6: seq: 13, get_clock
Sent 46 1265.146143 1265.146143 6: seq: 14, get_clock
Sent 47 1266.130441 1266.130441 6: seq: 15, get_clock
Sent 48 1267.114752 1267.114752 6: seq: 16, get_clock
Sent 49 1268.098894 1268.098894 6: seq: 17, get_clock
Sent 50 1269.082965 1269.082965 6: seq: 18, get_clock
Sent 51 1270.067706 1270.067706 6: seq: 19, get_clock
Sent 52 1271.051869 1271.051869 6: seq: 1a, get_clock
Sent 53 1272.035970 1272.035970 6: seq: 1b, get_clock
Sent 54 1273.020886 1273.020886 6: seq: 1c, get_clock
Sent 55 1274.005273 1274.005273 6: seq: 1d, get_clock
Sent 56 1274.990315 1274.990315 6: seq: 1e, get_clock
Sent 57 1275.974574 1275.974574 6: seq: 1f, get_clock
Sent 58 1276.958886 1276.958886 6: seq: 10, get_clock
Sent 59 1277.943121 1277.943121 6: seq: 11, get_clock
Sent 60 1278.927398 1278.927398 6: seq: 12, get_clock
Sent 61 1279.911506 1279.911506 6: seq: 13, get_clock
Sent 62 1280.895666 1280.895666 6: seq: 14, get_clock
Sent 63 1281.879909 1281.879909 6: seq: 15, get_clock
Sent 64 1282.864241 1282.864241 6: seq: 16, get_clock
Sent 65 1283.848709 1283.848709 6: seq: 17, get_clock
Sent 66 1284.833628 1284.833628 6: seq: 18, get_clock
Sent 67 1285.818465 1285.818465 6: seq: 19, get_clock
Sent 68 1286.802990 1286.802990 6: seq: 1a, get_clock
Sent 69 1287.787143 1287.787143 6: seq: 1b, get_clock
Sent 70 1288.771289 1288.771289 6: seq: 1c, get_clock
Sent 71 1289.756120 1289.756120 6: seq: 1d, get_clock
Sent 72 1290.740694 1290.740694 6: seq: 1e, get_clock
Sent 73 1291.724830 1291.724830 6: seq: 1f, get_clock
Sent 74 1292.709750 1292.709750 6: seq: 10, get_clock
Sent 75 1293.694705 1293.694705 6: seq: 11, get_clock
Sent 76 1294.678965 1294.678965 6: seq: 12, get_clock
Sent 77 1295.663922 1295.663922 6: seq: 13, get_clock
Sent 78 1296.648839 1296.648839 6: seq: 14, get_clock
Sent 79 1297.633015 1297.633015 6: seq: 15, get_clock
Sent 80 1298.617242 1298.617242 6: seq: 16, get_clock
Sent 81 1299.601635 1299.601635 6: seq: 17, get_clock
Sent 82 1300.586243 1300.586243 6: seq: 18, get_clock
Sent 83 1301.571164 1301.571164 6: seq: 19, get_clock
Sent 84 1302.556028 1302.556028 6: seq: 1a, get_clock
Sent 85 1303.540141 1303.540141 6: seq: 1b, get_clock
Sent 86 1304.524455 1304.524455 6: seq: 1c, get_clock
Sent 87 1305.509243 1305.509243 6: seq: 1d, get_clock
Sent 88 1306.493481 1306.493481 6: seq: 1e, get_clock
Sent 89 1307.477912 1307.477912 6: seq: 1f, get_clock
Sent 90 1308.462497 1308.462497 6: seq: 10, get_clock
Sent 91 1309.449340 1309.449340 6: seq: 11, get_clock
Sent 92 1310.434317 1310.434317 6: seq: 12, get_clock
Sent 93 1311.419016 1311.419016 6: seq: 13, get_clock
Sent 94 1312.402759 1312.402759 6: seq: 14, get_clock
Sent 95 1313.387333 1313.387333 6: seq: 15, get_clock
Sent 96 1314.372238 1314.372238 6: seq: 16, get_clock
Sent 97 1315.356534 1315.356534 6: seq: 17, get_clock
Sent 98 1316.340707 1316.340707 6: seq: 18, get_clock
Sent 99 1316.508482 1316.508482 6: seq: 19, emergency_stop
Dumping receive queue 100 messages
Receive: 0 1235.815917 1235.610863 13: seq: 17, stats count=56 sum=38923 sumsq=248121
Receive: 1 1236.595508 1236.595360 11: seq: 18, clock clock=514210783
Receive: 2 1237.579754 1237.579629 11: seq: 19, clock clock=563423862
Receive: 3 1238.564729 1238.564502 11: seq: 1a, clock clock=612669213
Receive: 4 1239.549047 1239.548797 11: seq: 1b, clock clock=661884167
Receive: 5 1240.533223 1240.532993 11: seq: 1c, clock clock=711092155
Receive: 6 1240.816196 1240.532993 13: seq: 1c, stats count=55 sum=40795 sumsq=243792
Receive: 7 1241.517589 1241.517324 11: seq: 1d, clock clock=760308999
Receive: 8 1242.502115 1242.501812 11: seq: 1e, clock clock=809534295
Receive: 9 1243.486900 1243.486545 11: seq: 1f, clock clock=858771392
Receive: 10 1244.471055 1244.470774 11: seq: 10, clock clock=907979957
Receive: 11 1245.455993 1245.455687 11: seq: 11, clock clock=957224483
Receive: 12 1245.916160 1245.455687 13: seq: 11, stats count=56 sum=56264 sumsq=461444
Receive: 13 1246.440579 1246.440309 11: seq: 12, clock clock=1006454900
Receive: 14 1247.424630 1247.424407 11: seq: 13, clock clock=1055657366
Receive: 15 1248.408930 1248.408645 11: seq: 14, clock clock=1104872159
Receive: 16 1249.393176 1249.392880 11: seq: 15, clock clock=1154083570
Receive: 17 1250.377431 1250.377207 11: seq: 16, clock clock=1203295741
Receive: 18 1251.016206 1250.377207 13: seq: 16, stats count=56 sum=49233 sumsq=340016
Receive: 19 1251.362119 1251.361960 11: seq: 17, clock clock=1252529713
Receive: 20 1252.346306 1252.346166 11: seq: 18, clock clock=1301738890
Receive: 21 1253.330670 1253.330525 11: seq: 19, clock clock=1350956310
Receive: 22 1254.314883 1254.314765 11: seq: 1a, clock clock=1400167701
Receive: 23 1255.299307 1255.298992 11: seq: 1b, clock clock=1449384791
Receive: 24 1256.016334 1255.298992 13: seq: 1b, stats count=55 sum=31316 sumsq=163413
Receive: 25 1256.287407 1256.287051 11: seq: 1c, clock clock=1498786980
Receive: 26 1257.271346 1257.271036 11: seq: 1d, clock clock=1547983665
Receive: 27 1258.255717 1258.255312 11: seq: 1e, clock clock=1597197947
Receive: 28 1259.240131 1259.239775 11: seq: 1f, clock clock=1646418073
Receive: 29 1260.225102 1260.224792 11: seq: 10, clock clock=1695668899
Receive: 30 1261.016486 1260.224792 13: seq: 10, stats count=55 sum=54967 sumsq=447710
Receive: 31 1261.209307 1261.208946 11: seq: 11, clock clock=1744875957
Receive: 32 1262.193603 1262.193304 11: seq: 12, clock clock=1794091587
Receive: 33 1263.177795 1263.177496 11: seq: 13, clock clock=1843300474
Receive: 34 1264.161963 1264.161656 11: seq: 14, clock clock=1892508120
Receive: 35 1265.146410 1265.146143 11: seq: 15, clock clock=1941732177
Receive: 36 1266.016535 1265.146143 13: seq: 15, stats count=55 sum=52630 sumsq=376925
Receive: 37 1266.130713 1266.130441 11: seq: 16, clock clock=1990946402
Receive: 38 1267.115073 1267.114752 11: seq: 17, clock clock=2040161837
Receive: 39 1268.099076 1268.098894 11: seq: 18, clock clock=2089364535
Receive: 40 1269.083143 1269.082965 11: seq: 19, clock clock=2138567190
Receive: 41 1270.067879 1270.067706 11: seq: 1a, clock clock=2187803327
Receive: 42 1271.052053 1271.051869 11: seq: 1b, clock clock=2237010927
Receive: 43 1271.052070 1271.051869 13: seq: 1b, stats count=56 sum=37822 sumsq=230880
Receive: 44 1272.036123 1272.035970 11: seq: 1c, clock clock=2286214276
Receive: 45 1273.021241 1273.020886 11: seq: 1d, clock clock=2335463375
Receive: 46 1274.005547 1274.005273 11: seq: 1e, clock clock=2384682073
Receive: 47 1274.990616 1274.990315 11: seq: 1f, clock clock=2433932801
Receive: 48 1275.974869 1275.974574 11: seq: 10, clock clock=2483144817
Receive: 49 1276.116695 1275.974574 13: seq: 10, stats count=56 sum=44813 sumsq=297628
Receive: 50 1276.959152 1276.958886 11: seq: 11, clock clock=2532360206
Receive: 51 1277.943389 1277.943121 11: seq: 12, clock clock=2581571593
Receive: 52 1278.927670 1278.927398 11: seq: 13, clock clock=2630784581
Receive: 53 1279.911805 1279.911506 11: seq: 14, clock clock=2679990418
Receive: 54 1280.896016 1280.895666 11: seq: 15, clock clock=2729199337
Receive: 55 1281.116795 1280.895666 13: seq: 15, stats count=55 sum=52163 sumsq=372844
Receive: 56 1281.880259 1281.879909 11: seq: 16, clock clock=2778410804
Receive: 57 1282.864717 1282.864241 11: seq: 17, clock clock=2827627348
Receive: 58 1283.849031 1283.848709 11: seq: 18, clock clock=2876848171
Receive: 59 1284.833798 1284.833628 11: seq: 19, clock clock=2926089715
Receive: 60 1285.818607 1285.818465 11: seq: 1a, clock clock=2975329601
Receive: 61 1286.216685 1285.818465 13: seq: 1a, stats count=56 sum=48899 sumsq=478672
Receive: 62 1286.803140 1286.802990 11: seq: 1b, clock clock=3024555617
Receive: 63 1287.787279 1287.787143 11: seq: 1c, clock clock=3073762108
Receive: 64 1288.771435 1288.771289 11: seq: 1d, clock clock=3122968095
Receive: 65 1289.756416 1289.756120 11: seq: 1e, clock clock=3172211986
Receive: 66 1290.740939 1290.740694 11: seq: 1f, clock clock=3221440958
Receive: 67 1291.216882 1290.740694 13: seq: 1f, stats count=55 sum=34477 sumsq=184514
Receive: 68 1291.725068 1291.724830 11: seq: 10, clock clock=3270646657
Receive: 69 1292.710045 1292.709750 11: seq: 11, clock clock=3319893806
Receive: 70 1293.695021 1293.694705 11: seq: 12, clock clock=3369141661
Receive: 71 1294.679292 1294.678965 11: seq: 13, clock clock=3418354422
Receive: 72 1295.664468 1295.663922 11: seq: 14, clock clock=3467612535
Receive: 73 1296.216980 1295.663922 13: seq: 14, stats count=55 sum=53996 sumsq=446942
Receive: 74 1296.649101 1296.648839 11: seq: 15, clock clock=3516844025
Receive: 75 1297.633234 1297.633015 11: seq: 16, clock clock=3566051014
Receive: 76 1298.617487 1298.617242 11: seq: 17, clock clock=3615262397
Receive: 77 1299.601894 1299.601635 11: seq: 18, clock clock=3664481938
Receive: 78 1300.586497 1300.586243 11: seq: 19, clock clock=3713711663
Receive: 79 1301.217421 1300.586243 13: seq: 19, stats count=55 sum=51600 sumsq=359525
Receive: 80 1301.571413 1301.571164 11: seq: 1a, clock clock=3762956638
Receive: 81 1302.556162 1302.556028 11: seq: 1b, clock clock=3812195996
Receive: 82 1303.540261 1303.540141 11: seq: 1c, clock clock=3861400310
Receive: 83 1304.524582 1304.524455 11: seq: 1d, clock clock=3910615600
Receive: 84 1305.509383 1305.509243 11: seq: 1e, clock clock=3959855141
Receive: 85 1306.316960 1305.509243 13: seq: 1e, stats count=56 sum=31665 sumsq=159321
Receive: 86 1306.493622 1306.493481 11: seq: 1f, clock clock=4009066502
Receive: 87 1307.478183 1307.477912 11: seq: 10, clock clock=4058290970
Receive: 88 1308.462775 1308.462497 11: seq: 11, clock clock=4107519851
Receive: 89 1309.449681 1309.449340 11: seq: 12, clock clock=4156863291
Receive: 90 1310.434622 1310.434317 11: seq: 13, clock clock=4206110267
Receive: 91 1311.317151 1310.434317 13: seq: 13, stats count=55 sum=49180 sumsq=360868
Receive: 92 1311.419352 1311.419016 10: seq: 14, clock clock=4255343189
Receive: 93 1312.403027 1312.402759 10: seq: 15, clock clock=9562019
Receive: 94 1313.387625 1313.387333 10: seq: 16, clock clock=58791143
Receive: 95 1314.372498 1314.372238 10: seq: 17, clock clock=108034237
Receive: 96 1315.356812 1315.356534 10: seq: 18, clock clock=157250162
Receive: 97 1316.317213 1315.356534 13: seq: 18, stats count=55 sum=53398 sumsq=418743
Receive: 98 1316.341037 1316.340707 11: seq: 19, clock clock=206455982
Receive: 99 1316.508928 1316.508482 12: seq: 1a, shutdown clock=214847438 static_string_id=Command request
Requested toolhead position at shutdown time 690.504965: (200.0, 200.0, 200.0)
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=44258828593 clock_est=(1287.672 42431676885 63999439.310) min_half_rtt=0.000079 min_rtt_time=685.181 time_avg=1287.672(843.146) clock_avg=42431676885.260(53960862318.626) pred_variance=939672.570 clock_adj=(-1.332 63999281.000)
Dumping serial stats: bytes_write=5628 bytes_read=81495 bytes_retransmit=9 bytes_invalid=0 send_seq=851 receive_seq=851 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1219.744033 1219.744033 6: seq: 1f, get_clock
Sent 1 1220.728230 1220.728230 6: seq: 10, get_clock
Sent 2 1221.713049 1221.713049 6: seq: 11, get_clock
Sent 3 1222.697724 1222.697724 6: seq: 12, get_clock
Sent 4 1223.683175 1223.683175 6: seq: 13, get_clock
Sent 5 1224.667890 1224.667890 6: seq: 14, get_clock
Sent 6 1225.652194 1225.652194 6: seq: 15, get_clock
Sent 7 1226.636389 1226.636389 6: seq: 16, get_clock
Sent 8 1227.620619 1227.620619 6: seq: 17, get_clock
Sent 9 1228.604665 1228.604665 6: seq: 18, get_clock
Sent 10 1229.589368 1229.589368 6: seq: 19, get_clock
Sent 11 1230.573716 1230.573716 6: seq: 1a, get_clock
Sent 12 1231.558009 1231.558009 6: seq: 1b, get_clock
Sent 13 1232.542179 1232.542179 6: seq: 1c, get_clock
Sent 14 1233.527023 1233.527023 6: seq: 1d, get_clock
Sent 15 1234.511122 1234.511122 6: seq: 1e, get_clock
Sent 16 1235.495246 1235.495246 6: seq: 1f, get_clock
Sent 17 1236.479649 1236.479649 6: seq: 10, get_clock
Sent 18 1237.463517 1237.463517 6: seq: 11, get_clock
Sent 19 1238.448383 1238.448383 6: seq: 12, get_clock
Sent 20 1239.432583 1239.432583 6: seq: 13, get_clock
Sent 21 1240.417176 1240.417176 6: seq: 14, get_clock
Sent 22 1241.401823 1241.401823 6: seq: 15, get_clock
Sent 23 1242.385879 1242.385879 6: seq: 16, get_clock
Sent 24 1243.370232 1243.370232 6: seq: 17, get_clock
Sent 25 1244.354517 1244.354517 6: seq: 18, get_clock
Sent 26 1245.338423 1245.338423 6: seq: 19, get_clock
Sent 27 1246.322748 1246.322748 6: seq: 1a, get_clock
Sent 28 1247.306746 1247.306746 6: seq: 1b, get_clock
Sent 29 1248.291452 1248.291452 6: seq: 1c, get_clock
Sent 30 1249.275751 1249.275751 6: seq: 1d, get_clock
Sent 31 1250.262385 1250.262385 6: seq: 1e, get_clock
Sent 32 1251.246717 1251.246717 6: seq: 1f, get_clock
Sent 33 1252.231125 1252.231125 6: seq: 10, get_clock
Sent 34 1253.215429 1253.215429 6: seq: 11, get_clock
Sent 35 1254.199764 1254.199764 6: seq: 12, get_clock
Sent 36 1255.183959 1255.183959 6: seq: 13, get_clock
Sent 37 1256.169376 1256.169376 6: seq: 14, get_clock
Sent 38 1257.154005 1257.154005 6: seq: 15, get_clock
Sent 39 1258.138918 1258.138918 6: seq: 16, get_clock
Sent 40 1259.123098 1259.123098 6: seq: 17, get_clock
Sent 41 1260.107550 1260.107550 6: seq: 18, get_clock
Sent 42 1261.092410 1261.092410 6: seq: 19, get_clock
Sent 43 1262.077620 1262.077620 6: seq: 1a, get_clock
Sent 44 1263.061366 1263.061366 6: seq: 1b, get_clock
Sent 45 1264.046339 1264.046339 6: seq: 1c, get_clock
Sent 46 1265.030441 1265.030441 6: seq: 1d, get_clock
Sent 47 1266.014772 1266.014772 6: seq: 1e, get_clock
Sent 48 1266.999204 1266.999204 6: seq: 1f, get_clock
Sent 49 1267.983218 1267.983218 6: seq: 10, get_clock
Sent 50 1268.967477 1268.967477 6: seq: 11, get_clock
Sent 51 1269.951731 1269.951731 6: seq: 12, get_clock
Sent 52 1270.935957 1270.935957 6: seq: 13, get_clock
Sent 53 1271.920290 1271.920290 6: seq: 14, get_clock
Sent 54 1272.905174 1272.905174 6: seq: 15, get_clock
Sent 55 1273.890170 1273.890170 6: seq: 16, get_clock
Sent 56 1274.874523 1274.874523 6: seq: 17, get_clock
Sent 57 1275.858740 1275.858740 6: seq: 18, get_clock
Sent 58 1276.844798 1276.844798 6: seq: 19, get_clock
Sent 59 1277.829476 1277.829476 6: seq: 1a, get_clock
Sent 60 1278.814182 1278.814182 6: seq: 1b, get_clock
Sent 61 1279.798164 1279.798164 6: seq: 1c, get_clock
Sent 62 1280.782075 1280.782075 6: seq: 1d, get_clock
Sent 63 1281.766582 1281.766582 6: seq: 1e, get_clock
Sent 64 1282.750607 1282.750607 6: seq: 1f, get_clock
Sent 65 1283.734785 1283.734785 6: seq: 10, get_clock
Sent 66 1284.719829 1284.719829 6: seq: 11, get_clock
Sent 67 1285.703904 1285.703904 6: seq: 12, get_clock
Sent 68 1286.688087 1286.688087 6: seq: 13, get_clock
Sent 69 1287.672388 1287.672388 6: seq: 14, get_clock
Sent 70 1288.656654 1288.656654 6: seq: 15, get_clock
Sent 71 1289.640697 1289.640697 6: seq: 16, get_clock
Sent 72 1290.625428 1290.625428 6: seq: 17, get_clock
Sent 73 1291.609834 1291.609834 6: seq: 18, get_clock
Sent 74 1292.594621 1292.594621 6: seq: 19, get_clock
Sent 75 1293.578458 1293.578458 6: seq: 1a, get_clock
Sent 76 1294.562851 1294.562851 6: seq: 1b, get_clock
Sent 77 1295.546863 1295.546863 6: seq: 1c, get_clock
Sent 78 1296.531173 1296.531173 6: seq: 1d, get_clock
Sent 79 1297.516262 1297.516262 6: seq: 1e, get_clock
Sent 80 1298.500455 1298.500455 6: seq: 1f, get_clock
Sent 81 1299.485561 1299.485561 6: seq: 10, get_clock
Sent 82 1300.469961 1300.469961 6: seq: 11, get_clock
Sent 83 1301.454607 1301.454607 6: seq: 12, get_clock
Sent 84 1302.438686 1302.438686 6: seq: 13, get_clock
Sent 85 1303.422913 1303.422913 6: seq: 14, get_clock
Sent 86 1304.407381 1304.407381 6: seq: 15, get_clock
Sent 87 1305.391485 1305.391485 6: seq: 16, get_clock
Sent 88 1306.375787 1306.375787 6: seq: 17, get_clock
Sent 89 1307.360749 1307.360749 6: seq: 18, get_clock
Sent 90 1308.345148 1308.345148 6: seq: 19, get_clock
Sent 91 1309.329219 1309.329219 6: seq: 1a, get_clock
Sent 92 1310.313974 1310.313974 6: seq: 1b, get_clock
Sent 93 1311.298265 1311.298265 6: seq: 1c, get_clock
Sent 94 1312.282641 1312.282641 6: seq: 1d, get_clock
Sent 95 1313.266732 1313.266732 6: seq: 1e, get_clock
Sent 96 1314.251117 1314.251117 6: seq: 1f, get_clock
Sent 97 1315.235135 1315.235135 6: seq: 10, get_clock
Sent 98 1316.221322 1316.221322 6: seq: 11, get_clock
Sent 99 1316.508945 1316.508945 6: seq: 12, emergency_stop
Dumping receive queue 100 messages
Receive: 0 1304.176002 1303.422913 14: seq: 15, analog_in_state oid=6 next_clock=556994388 value=7481
Receive: 1 1304.206046 1303.422913 14: seq: 15, analog_in_state oid=9 next_clock=558914388 value=10858
Receive: 2 1304.407571 1304.407381 11: seq: 16, clock clock=553068716
Receive: 3 1304.476033 1304.407381 14: seq: 16, analog_in_state oid=6 next_clock=576194388 value=7484
Receive: 4 1304.506063 1304.407381 14: seq: 16, analog_in_state oid=9 next_clock=578114388 value=10865
Receive: 5 1304.776037 1304.407381 14: seq: 16, analog_in_state oid=6 next_clock=595394388 value=7485
Receive: 6 1304.806004 1304.407381 14: seq: 16, analog_in_state oid=9 next_clock=597314388 value=10857
Receive: 7 1305.076017 1304.407381 14: seq: 16, analog_in_state oid=6 next_clock=614594388 value=7480
Receive: 8 1305.106002 1304.407381 14: seq: 16, analog_in_state oid=9 next_clock=616514388 value=10858
Receive: 9 1305.376031 1304.407381 14: seq: 16, analog_in_state oid=6 next_clock=633794388 value=7488
Receive: 10 1305.391656 1305.391485 11: seq: 17, clock clock=616050169
Receive: 11 1305.406025 1305.391485 14: seq: 17, analog_in_state oid=9 next_clock=635714388 value=10859
Receive: 12 1305.676060 1305.391485 14: seq: 17, analog_in_state oid=6 next_clock=652994388 value=7487
Receive: 13 1305.706075 1305.391485 14: seq: 17, analog_in_state oid=9 next_clock=654914388 value=10859
Receive: 14 1305.976010 1305.391485 14: seq: 17, analog_in_state oid=6 next_clock=672194388 value=7482
Receive: 15 1306.006010 1305.391485 14: seq: 17, analog_in_state oid=9 next_clock=674114388 value=10857
Receive: 16 1306.276047 1305.391485 14: seq: 17, analog_in_state oid=6 next_clock=691394388 value=7486
Receive: 17 1306.306017 1305.391485 14: seq: 17, analog_in_state oid=9 next_clock=693314388 value=10863
Receive: 18 1306.375957 1306.375787 11: seq: 18, clock clock=679044406
Receive: 19 1306.576020 1306.375787 14: seq: 18, analog_in_state oid=6 next_clock=710594388 value=7490
Receive: 20 1306.606019 1306.375787 14: seq: 18, analog_in_state oid=9 next_clock=712514388 value=10857
Receive: 21 1306.876060 1306.375787 14: seq: 18, analog_in_state oid=6 next_clock=729794388 value=7485
Receive: 22 1306.906012 1306.375787 14: seq: 18, analog_in_state oid=9 next_clock=731714388 value=10861
Receive: 23 1307.176105 1306.375787 14: seq: 18, analog_in_state oid=6 next_clock=748994388 value=7483
Receive: 24 1307.206125 1306.375787 14: seq: 18, analog_in_state oid=9 next_clock=750914388 value=10859
Receive: 25 1307.361031 1307.360749 11: seq: 19, clock clock=742083285
Receive: 26 1307.476180 1307.360749 14: seq: 19, analog_in_state oid=6 next_clock=768194388 value=7485
Receive: 27 1307.506180 1307.360749 14: seq: 19, analog_in_state oid=9 next_clock=770114388 value=10856
Receive: 28 1307.776120 1307.360749 14: seq: 19, analog_in_state oid=6 next_clock=787394388 value=7484
Receive: 29 1307.806083 1307.360749 14: seq: 19, analog_in_state oid=9 next_clock=789314388 value=10858
Receive: 30 1308.076185 1307.360749 14: seq: 19, analog_in_state oid=6 next_clock=806594388 value=7485
Receive: 31 1308.106112 1307.360749 14: seq: 19, analog_in_state oid=9 next_clock=808514388 value=10859
Receive: 32 1308.345502 1308.345148 11: seq: 1a, clock clock=805083646
Receive: 33 1308.376125 1308.345148 14: seq: 1a, analog_in_state oid=6 next_clock=825794388 value=7482
Receive: 34 1308.406109 1308.345148 14: seq: 1a, analog_in_state oid=9 next_clock=827714388 value=10863
Receive: 35 1308.676148 1308.345148 14: seq: 1a, analog_in_state oid=6 next_clock=844994388 value=7482
Receive: 36 1308.706210 1308.345148 14: seq: 1a, analog_in_state oid=9 next_clock=846914388 value=10853
Receive: 37 1308.877386 1308.345148 14: seq: 1a, stats count=170 sum=159100 sumsq=824189
Receive: 38 1308.976130 1308.345148 14: seq: 1a, analog_in_state oid=6 next_clock=864194388 value=7484
Receive: 39 1309.006120 1308.345148 14: seq: 1a, analog_in_state oid=9 next_clock=866114388 value=10859
Receive: 40 1309.276118 1308.345148 14: seq: 1a, analog_in_state oid=6 next_clock=883394388 value=7487
Receive: 41 1309.306102 1308.345148 14: seq: 1a, analog_in_state oid=9 next_clock=885314388 value=10859
Receive: 42 1309.329468 1309.329219 11: seq: 1b, clock clock=868063420
Receive: 43 1309.576140 1309.329219 14: seq: 1b, analog_in_state oid=6 next_clock=902594388 value=7485
Receive: 44 1309.606109 1309.329219 14: seq: 1b, analog_in_state oid=9 next_clock=904514388 value=10863
Receive: 45 1309.876161 1309.329219 14: seq: 1b, analog_in_state oid=6 next_clock=921794388 value=7489
Receive: 46 1309.906130 1309.329219 14: seq: 1b, analog_in_state oid=9 next_clock=923714388 value=10858
Receive: 47 1310.176152 1309.329219 14: seq: 1b, analog_in_state oid=6 next_clock=940994388 value=7482
Receive: 48 1310.206186 1309.329219 14: seq: 1b, analog_in_state oid=9 next_clock=942914388 value=10859
Receive: 49 1310.314207 1310.313974 11: seq: 1c, clock clock=931087733
Receive: 50 1310.476148 1310.313974 14: seq: 1c, analog_in_state oid=6 next_clock=960194388 value=7483
Receive: 51 1310.506149 1310.313974 14: seq: 1c, analog_in_state oid=9 next_clock=962114388 value=10859
Receive: 52 1310.776133 1310.313974 14: seq: 1c, analog_in_state oid=6 next_clock=979394388 value=7486
Receive: 53 1310.806115 1310.313974 14: seq: 1c, analog_in_state oid=9 next_clock=981314388 value=10863
Receive: 54 1311.076152 1310.313974 14: seq: 1c, analog_in_state oid=6 next_clock=998594388 value=7485
Receive: 55 1311.106142 1310.313974 14: seq: 1c, analog_in_state oid=9 next_clock=1000514388 value=10860
Receive: 56 1311.298499 1311.298265 11: seq: 1d, clock clock=994081553
Receive: 57 1311.376166 1311.298265 14: seq: 1d, analog_in_state oid=6 next_clock=1017794388 value=7484
Receive: 58 1311.406153 1311.298265 14: seq: 1d, analog_in_state oid=9 next_clock=1019714388 value=10859
Receive: 59 1311.676156 1311.298265 14: seq: 1d, analog_in_state oid=6 next_clock=1036994388 value=7484
Receive: 60 1311.706220 1311.298265 14: seq: 1d, analog_in_state oid=9 next_clock=1038914388 value=10857
Receive: 61 1311.976174 1311.298265 14: seq: 1d, analog_in_state oid=6 next_clock=1056194388 value=7485
Receive: 62 1312.006144 1311.298265 14: seq: 1d, analog_in_state oid=9 next_clock=1058114388 value=10859
Receive: 63 1312.276160 1311.298265 14: seq: 1d, analog_in_state oid=6 next_clock=1075394388 value=7486
Receive: 64 1312.282882 1312.282641 11: seq: 1e, clock clock=1057081274
Receive: 65 1312.306138 1312.282641 14: seq: 1e, analog_in_state oid=9 next_clock=1077314388 value=10863
Receive: 66 1312.576204 1312.282641 14: seq: 1e, analog_in_state oid=6 next_clock=1094594388 value=7482
Receive: 67 1312.606187 1312.282641 14: seq: 1e, analog_in_state oid=9 next_clock=1096514388 value=10861
Receive: 68 1312.876170 1312.282641 14: seq: 1e, analog_in_state oid=6 next_clock=1113794388 value=7485
Receive: 69 1312.906154 1312.282641 14: seq: 1e, analog_in_state oid=9 next_clock=1115714388 value=10859
Receive: 70 1313.176165 1312.282641 14: seq: 1e, analog_in_state oid=6 next_clock=1132994388 value=7484
Receive: 71 1313.206217 1312.282641 14: seq: 1e, analog_in_state oid=9 next_clock=1134914388 value=10857
Receive: 72 1313.266967 1313.266732 11: seq: 1f, clock clock=1120062525
Receive: 73 1313.476191 1313.266732 14: seq: 1f, analog_in_state oid=6 next_clock=1152194388 value=7487
Receive: 74 1313.506524 1313.266732 14: seq: 1f, analog_in_state oid=9 next_clock=1154114388 value=10858
Receive: 75 1313.776213 1313.266732 14: seq: 1f, analog_in_state oid=6 next_clock=1171394388 value=7488
Receive: 76 1313.806136 1313.266732 14: seq: 1f, analog_in_state oid=9 next_clock=1173314388 value=10859
Receive: 77 1313.977410 1313.266732 14: seq: 1f, stats count=170 sum=159100 sumsq=824189
Receive: 78 1314.076172 1313.266732 14: seq: 1f, analog_in_state oid=6 next_clock=1190594388 value=7484
Receive: 79 1314.106165 1313.266732 14: seq: 1f, analog_in_state oid=9 next_clock=1192514388 value=10857
Receive: 80 1314.251453 1314.251117 11: seq: 10, clock clock=1183062922
Receive: 81 1314.376173 1314.251117 14: seq: 10, analog_in_state oid=6 next_clock=1209794388 value=7486
Receive: 82 1314.406161 1314.251117 14: seq: 10, analog_in_state oid=9 next_clock=1211714388 value=10859
Receive: 83 1314.676174 1314.251117 14: seq: 10, analog_in_state oid=6 next_clock=1228994388 value=7482
Receive: 84 1314.706171 1314.251117 14: seq: 10, analog_in_state oid=9 next_clock=1230914388 value=10857
Receive: 85 1314.976170 1314.251117 14: seq: 10, analog_in_state oid=6 next_clock=1248194388 value=7481
Receive: 86 1315.006155 1314.251117 14: seq: 10, analog_in_state oid=9 next_clock=1250114388 value=10862
Receive: 87 1315.235436 1315.235135 11: seq: 11, clock clock=1246039554
Receive: 88 1315.276166 1315.235135 14: seq: 11, analog_in_state oid=6 next_clock=1267394388 value=7483
Receive: 89 1315.306150 1315.235135 14: seq: 11, analog_in_state oid=9 next_clock=1269314388 value=10859
Receive: 90 1315.576201 1315.235135 14: seq: 11, analog_in_state oid=6 next_clock=1286594388 value=7487
Receive: 91 1315.606173 1315.235135 14: seq: 11, analog_in_state oid=9 next_clock=1288514388 value=10858
Receive: 92 1315.876181 1315.235135 14: seq: 11, analog_in_state oid=6 next_clock=1305794388 value=7483
Receive: 93 1315.906154 1315.235135 14: seq: 11, analog_in_state oid=9 next_clock=1307714388 value=10864
Receive: 94 1316.176200 1315.235135 14: seq: 11, analog_in_state oid=6 next_clock=1324994388 value=7490
Receive: 95 1316.206180 1315.235135 14: seq: 11, analog_in_state oid=9 next_clock=1326914388 value=10858
Receive: 96 1316.221616 1316.221322 11: seq: 12, clock clock=1309155633
Receive: 97 1316.476198 1316.221322 14: seq: 12, analog_in_state oid=6 next_clock=1344194388 value=7484
Receive: 98 1316.506256 1316.221322 14: seq: 12, analog_in_state oid=9 next_clock=1346114388 value=10856
Receive: 99 1316.509480 1316.508945 12: seq: 13, shutdown clock=1327566889 static_string_id=Command request
Stats 1317.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=8336 bytes_read=86664 bytes_retransmit=9 bytes_invalid=0 send_seq=1014 receive_seq=1014 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000488 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=5022 bytes_read=17538 bytes_retransmit=0 bytes_invalid=0 send_seq=811 receive_seq=811 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999257 adj=49999211 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5634 bytes_read=81567 bytes_retransmit=9 bytes_invalid=0 send_seq=852 receive_seq=852 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999281 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=29.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4543 bytes_read=245081 bytes_retransmit=0 bytes_invalid=0 send_seq=757 receive_seq=757 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999643 coil_temp=23.0 refs=0 mcu_temp=23.35 supply_voltage=2.977 sysload=0.22 cputime=67.016 memavail=3402292 print_time=690.852 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 1318.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=8396 bytes_read=86823 bytes_retransmit=9 bytes_invalid=0 send_seq=1018 receive_seq=1018 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000488 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=5028 bytes_read=17554 bytes_retransmit=0 bytes_invalid=0 send_seq=812 receive_seq=812 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999259 adj=49999210 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5640 bytes_read=81667 bytes_retransmit=9 bytes_invalid=0 send_seq=853 receive_seq=853 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999295 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=29.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4549 bytes_read=245437 bytes_retransmit=0 bytes_invalid=0 send_seq=758 receive_seq=758 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999646 coil_temp=23.0 refs=0 mcu_temp=23.35 supply_voltage=2.977 sysload=0.22 cputime=67.070 memavail=3400604 print_time=690.852 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1319.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=8440 bytes_read=86948 bytes_retransmit=9 bytes_invalid=0 send_seq=1021 receive_seq=1021 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000492 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=5034 bytes_read=17570 bytes_retransmit=0 bytes_invalid=0 send_seq=813 receive_seq=813 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999256 adj=49999206 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5646 bytes_read=81781 bytes_retransmit=9 bytes_invalid=0 send_seq=854 receive_seq=854 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999293 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=29.4 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4555 bytes_read=245793 bytes_retransmit=0 bytes_invalid=0 send_seq=759 receive_seq=759 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999658 coil_temp=23.0 refs=0 mcu_temp=23.35 supply_voltage=2.977 sysload=0.22 cputime=67.120 memavail=3394808 print_time=690.852 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 1320.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=8484 bytes_read=87075 bytes_retransmit=9 bytes_invalid=0 send_seq=1024 receive_seq=1024 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000498 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=5040 bytes_read=17586 bytes_retransmit=0 bytes_invalid=0 send_seq=814 receive_seq=814 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999254 adj=49999133 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5652 bytes_read=81909 bytes_retransmit=9 bytes_invalid=0 send_seq=855 receive_seq=855 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999269 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=29.3 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4561 bytes_read=246149 bytes_retransmit=0 bytes_invalid=0 send_seq=760 receive_seq=760 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999648 coil_temp=23.0 refs=0 mcu_temp=23.32 supply_voltage=2.978 sysload=0.22 cputime=67.145 memavail=3401484 print_time=690.852 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1321.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=8528 bytes_read=87246 bytes_retransmit=9 bytes_invalid=0 send_seq=1027 receive_seq=1027 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000491 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 bytes_write=5046 bytes_read=17615 bytes_retransmit=0 bytes_invalid=0 send_seq=815 receive_seq=815 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999251 adj=49999064 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5658 bytes_read=82009 bytes_retransmit=9 bytes_invalid=0 send_seq=856 receive_seq=856 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999227 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=29.4 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4567 bytes_read=246505 bytes_retransmit=0 bytes_invalid=0 send_seq=761 receive_seq=761 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999616 coil_temp=23.0 refs=0 mcu_temp=23.28 supply_voltage=2.978 sysload=0.20 cputime=67.171 memavail=3401484 print_time=690.852 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1322.4: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=8534 bytes_read=87349 bytes_retransmit=9 bytes_invalid=0 send_seq=1028 receive_seq=1028 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000486 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 bytes_write=5052 bytes_read=17631 bytes_retransmit=0 bytes_invalid=0 send_seq=816 receive_seq=816 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999249 adj=49999067 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=5664 bytes_read=82109 bytes_retransmit=9 bytes_invalid=0 send_seq=857 receive_seq=857 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999437 adj=63999249 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=29.3 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=4573 bytes_read=246861 bytes_retransmit=0 bytes_invalid=0 send_seq=762 receive_seq=762 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999632 coil_temp=23.0 refs=0 mcu_temp=23.24 supply_voltage=2.978 sysload=0.20 cputime=67.195 memavail=3401484 print_time=690.852 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 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 4124617096: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:24:53 2025 (1751045093.7 1323.6)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4124411552: New connection
webhooks client 4124411552: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 1331.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3660 bytes_read=7597 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=180000100 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=49999007 adj=49991879 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5028 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=63998597 adj=63997860 Octopus_V1.1_F446: temp=28.5 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=49.2 heater_bed: target=0 temp=22.3 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=32001193 adj=32001949 coil_temp=22.8 refs=0 mcu_temp=22.70 supply_voltage=2.978 sysload=0.24 cputime=72.014 memavail=3400264 print_time=7.538 buffer_time=0.248 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4124411552
webhooks: registering remote method 'reboot_machine' for connection id: 4124411552
webhooks: registering remote method 'pause_job_queue' for connection id: 4124411552
webhooks: registering remote method 'start_job_queue' for connection id: 4124411552
Stats 1332.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3666 bytes_read=7700 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=180000603 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=49999357 adj=50003859 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1464 bytes_read=5142 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=63999147 adj=63998910 Octopus_V1.1_F446: temp=26.7 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.3 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=32000281 adj=32000859 coil_temp=22.8 refs=0 mcu_temp=22.64 supply_voltage=2.978 sysload=0.24 cputime=72.101 memavail=3395548 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1333.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3678 bytes_read=7877 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=180000928 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999166 adj=50003312 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1476 bytes_read=5343 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=63999472 adj=63999431 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2981 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=32000113 adj=31999311 coil_temp=22.8 refs=0 mcu_temp=22.58 supply_voltage=2.978 sysload=0.24 cputime=72.200 memavail=3399524 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1334.7: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3684 bytes_read=8024 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=180001187 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999105 adj=50001014 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1482 bytes_read=5443 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=63999572 adj=63999642 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3337 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=32000064 adj=31999193 coil_temp=22.8 refs=0 mcu_temp=22.55 supply_voltage=2.978 sysload=0.24 cputime=72.236 memavail=3399864 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1335.7: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3690 bytes_read=8127 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=180001162 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999291 adj=50000151 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1488 bytes_read=5571 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=63999562 adj=63999510 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3693 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=32000021 adj=31999155 coil_temp=22.8 refs=0 mcu_temp=22.53 supply_voltage=2.978 sysload=0.24 cputime=72.287 memavail=3399864 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1336.8: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3696 bytes_read=8230 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=180000962 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999470 adj=50000332 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1494 bytes_read=5671 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=63999593 adj=63999420 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4049 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=31999966 adj=31999238 coil_temp=22.8 refs=0 mcu_temp=22.51 supply_voltage=2.978 sysload=0.22 cputime=72.331 memavail=3393816 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1337.8: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3702 bytes_read=8362 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=180000811 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999567 adj=50000690 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=5785 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=63999544 adj=63999656 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4405 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=31999889 adj=31999343 coil_temp=22.8 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.22 cputime=72.356 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1338.8: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3708 bytes_read=8465 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=180000713 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000013 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=49999458 adj=50000765 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=5913 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=63999523 adj=63999583 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4761 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=31999859 adj=31999323 coil_temp=22.8 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.22 cputime=72.380 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1339.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3714 bytes_read=8582 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=180000650 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000013 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=49999361 adj=50000132 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=6013 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=63999495 adj=63999554 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5117 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=31999839 adj=31999394 coil_temp=22.8 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.22 cputime=72.404 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1340.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3720 bytes_read=8714 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=180000614 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000013 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=49999327 adj=49999629 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6113 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=63999584 adj=63999469 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=49.2 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5473 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=31999830 adj=31999454 coil_temp=22.8 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.22 cputime=72.428 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1341.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3726 bytes_read=8817 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=180000649 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000013 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=49999306 adj=49999424 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6241 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=63999564 adj=63999798 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5829 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=31999824 adj=31999515 coil_temp=22.8 refs=0 mcu_temp=22.49 supply_voltage=2.978 sysload=0.21 cputime=72.457 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1342.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3732 bytes_read=8920 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=180000670 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000013 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=49999402 adj=49999232 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1530 bytes_read=6355 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=63999559 adj=63999560 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.5 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6185 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=31999819 adj=31999518 coil_temp=22.8 refs=0 mcu_temp=22.50 supply_voltage=2.978 sysload=0.21 cputime=72.506 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1343.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3738 bytes_read=9052 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=180000698 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000017 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=49999450 adj=49999589 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1536 bytes_read=6455 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=63999553 adj=63999450 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.5 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6541 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=31999837 adj=31999529 coil_temp=22.8 refs=0 mcu_temp=22.52 supply_voltage=2.978 sysload=0.21 cputime=72.556 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1344.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3744 bytes_read=9169 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=180000707 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000017 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=49999460 adj=49999676 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1542 bytes_read=6583 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=63999537 adj=63999347 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6897 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=31999832 adj=31999627 coil_temp=22.8 refs=0 mcu_temp=22.53 supply_voltage=2.978 sysload=0.21 cputime=72.604 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1345.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3750 bytes_read=9272 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=180000822 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000017 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=49999461 adj=49999606 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1548 bytes_read=6683 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=63999547 adj=63999246 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7253 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=31999835 adj=31999617 coil_temp=22.8 refs=0 mcu_temp=22.55 supply_voltage=2.978 sysload=0.21 cputime=72.653 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1346.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3756 bytes_read=9404 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=180000837 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000017 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=49999484 adj=49999368 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1554 bytes_read=6783 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=63999540 adj=63999100 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=7609 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=31999836 adj=31999554 coil_temp=22.8 refs=0 mcu_temp=22.56 supply_voltage=2.978 sysload=0.19 cputime=72.702 memavail=3400328 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 1347.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3762 bytes_read=9502 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=180000843 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000017 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=49999461 adj=49999427 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1560 bytes_read=6925 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=63999541 adj=63999077 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=7965 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=31999838 adj=31999578 coil_temp=22.8 refs=0 mcu_temp=22.57 supply_voltage=2.978 sysload=0.19 cputime=72.751 memavail=3399824 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1348.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3768 bytes_read=9612 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=180000847 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 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=49999448 adj=49999255 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1566 bytes_read=7025 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=63999537 adj=63999116 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=8321 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=31999840 adj=31999610 coil_temp=22.8 refs=0 mcu_temp=22.59 supply_voltage=2.978 sysload=0.19 cputime=72.800 memavail=3399852 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1349.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3774 bytes_read=9744 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=180000828 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 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=49999440 adj=49999174 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1572 bytes_read=7125 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=63999533 adj=63999118 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=8677 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=31999837 adj=31999636 coil_temp=22.8 refs=0 mcu_temp=22.60 supply_voltage=2.978 sysload=0.19 cputime=72.849 memavail=3399628 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1350.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3780 bytes_read=9847 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=180000810 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 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=49999428 adj=49999168 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1578 bytes_read=7253 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=63999562 adj=63999161 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=9033 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=31999832 adj=31999651 coil_temp=22.8 refs=0 mcu_temp=22.60 supply_voltage=2.978 sysload=0.19 cputime=72.913 memavail=3399628 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1351.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3786 bytes_read=9964 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=180000793 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 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=49999413 adj=49999134 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1584 bytes_read=7353 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=63999549 adj=63999386 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=9389 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=31999855 adj=31999655 coil_temp=22.8 refs=0 mcu_temp=22.61 supply_voltage=2.978 sysload=0.41 cputime=72.960 memavail=3399636 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1352.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3792 bytes_read=10082 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=180000765 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000028 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=49999416 adj=49999095 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1590 bytes_read=7467 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=63999537 adj=63999321 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.9 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=9745 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=31999864 adj=31999811 coil_temp=22.8 refs=0 mcu_temp=22.62 supply_voltage=2.978 sysload=0.41 cputime=73.010 memavail=3399644 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1353.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3798 bytes_read=10185 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=180000754 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000017 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=49999432 adj=49999185 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1596 bytes_read=7595 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=63999526 adj=63999297 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=10101 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=31999862 adj=31999875 coil_temp=22.8 refs=0 mcu_temp=22.63 supply_voltage=2.978 sysload=0.41 cputime=73.060 memavail=3398636 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1354.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3804 bytes_read=10316 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=180000715 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000017 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=49999412 adj=49999309 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1602 bytes_read=7695 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=63999510 adj=63999242 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=10457 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=31999863 adj=31999841 coil_temp=22.8 refs=0 mcu_temp=22.64 supply_voltage=2.978 sysload=0.41 cputime=73.086 memavail=3401276 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1355.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3810 bytes_read=10434 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=180000682 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000017 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=49999389 adj=49999228 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1608 bytes_read=7795 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=63999501 adj=63999237 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=10813 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=31999849 adj=31999861 coil_temp=22.8 refs=0 mcu_temp=22.65 supply_voltage=2.978 sysload=0.41 cputime=73.110 memavail=3401276 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1356.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3816 bytes_read=10537 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=180000654 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000017 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=49999370 adj=49999136 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1614 bytes_read=7923 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=63999493 adj=63999263 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=11169 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=31999840 adj=31999778 coil_temp=22.8 refs=0 mcu_temp=22.68 supply_voltage=2.978 sysload=0.38 cputime=73.133 memavail=3401036 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1357.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3822 bytes_read=10654 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=180000631 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000017 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=49999360 adj=49999074 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1620 bytes_read=8023 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=63999489 adj=63999273 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=11525 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=31999836 adj=31999742 coil_temp=22.8 refs=0 mcu_temp=22.69 supply_voltage=2.978 sysload=0.38 cputime=73.157 memavail=3400028 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1358.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3828 bytes_read=10772 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=180000607 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=49999352 adj=49999080 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1626 bytes_read=8137 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=63999510 adj=63999300 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=11881 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=31999829 adj=31999738 coil_temp=22.8 refs=0 mcu_temp=22.70 supply_voltage=2.978 sysload=0.38 cputime=73.182 memavail=3400032 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1359.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3834 bytes_read=10889 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=180000630 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=49999362 adj=49999090 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1632 bytes_read=8265 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=63999506 adj=63999508 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=12237 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=31999825 adj=31999718 coil_temp=22.8 refs=0 mcu_temp=22.70 supply_voltage=2.977 sysload=0.38 cputime=73.230 memavail=3400032 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1360.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3840 bytes_read=11006 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=180000632 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=49999370 adj=49999147 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1638 bytes_read=8365 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=63999502 adj=63999365 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=12593 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=31999821 adj=31999658 coil_temp=22.8 refs=0 mcu_temp=22.72 supply_voltage=2.977 sysload=0.38 cputime=73.278 memavail=3400032 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1361.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3846 bytes_read=11124 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=180000633 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=49999372 adj=49999208 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1644 bytes_read=8465 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=63999511 adj=63999310 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=12949 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=31999817 adj=31999637 coil_temp=22.8 refs=0 mcu_temp=22.73 supply_voltage=2.978 sysload=0.35 cputime=73.325 memavail=3400032 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1362.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3852 bytes_read=11227 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=180000631 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=49999370 adj=49999223 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1650 bytes_read=8593 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=63999507 adj=63999365 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=13305 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=31999816 adj=31999625 coil_temp=22.8 refs=0 mcu_temp=22.73 supply_voltage=2.978 sysload=0.35 cputime=73.374 memavail=3399808 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1363.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3858 bytes_read=11344 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=180000640 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999369 adj=49999206 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1656 bytes_read=8707 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=63999511 adj=63999323 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=13661 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=31999813 adj=31999637 coil_temp=22.8 refs=0 mcu_temp=22.74 supply_voltage=2.978 sysload=0.35 cputime=73.422 memavail=3399808 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1364.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3864 bytes_read=11476 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=180000632 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999366 adj=49999169 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1662 bytes_read=8807 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=63999504 adj=63999316 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=14017 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=31999812 adj=31999624 coil_temp=22.8 refs=0 mcu_temp=22.75 supply_voltage=2.978 sysload=0.35 cputime=73.470 memavail=3399808 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1365.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3870 bytes_read=11579 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=180000626 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999370 adj=49999172 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1668 bytes_read=8935 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=63999503 adj=63999279 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=14357 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=31999809 adj=31999640 coil_temp=22.8 refs=0 mcu_temp=22.75 supply_voltage=2.978 sysload=0.35 cputime=73.519 memavail=3399808 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1366.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3876 bytes_read=11696 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=180000620 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999374 adj=49999220 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1674 bytes_read=9035 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=63999499 adj=63999289 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=14713 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=31999808 adj=31999640 coil_temp=22.8 refs=0 mcu_temp=22.76 supply_voltage=2.978 sysload=0.40 cputime=73.568 memavail=3399808 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1367.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3882 bytes_read=11814 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=180000618 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999378 adj=49999267 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1680 bytes_read=9135 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=63999495 adj=63999270 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=15069 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=31999811 adj=31999660 coil_temp=22.8 refs=0 mcu_temp=22.77 supply_voltage=2.978 sysload=0.40 cputime=73.614 memavail=3399564 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1368.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3888 bytes_read=11917 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=180000611 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 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=49999390 adj=49999290 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1686 bytes_read=9277 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=63999491 adj=63999243 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=15425 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=31999808 adj=31999699 coil_temp=22.8 refs=0 mcu_temp=22.76 supply_voltage=2.978 sysload=0.40 cputime=73.664 memavail=3399580 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1369.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3894 bytes_read=12048 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=180000614 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 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=49999390 adj=49999390 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1692 bytes_read=9377 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=63999489 adj=63999234 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=15781 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=31999810 adj=31999682 coil_temp=22.8 refs=0 mcu_temp=22.77 supply_voltage=2.978 sysload=0.40 cputime=73.712 memavail=3399592 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1370.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3900 bytes_read=12166 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=180000620 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 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=49999390 adj=49999343 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1698 bytes_read=9477 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=63999489 adj=63999224 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=16137 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=31999809 adj=31999699 coil_temp=22.8 refs=0 mcu_temp=22.78 supply_voltage=2.978 sysload=0.40 cputime=73.761 memavail=3399592 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1371.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3906 bytes_read=12263 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=180000606 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 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=49999381 adj=49999299 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1704 bytes_read=9605 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=63999494 adj=63999208 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=16493 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=31999808 adj=31999685 coil_temp=22.8 refs=0 mcu_temp=22.79 supply_voltage=2.978 sysload=0.45 cputime=73.796 memavail=3399832 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1372.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3912 bytes_read=12390 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=180000598 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000019 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=49999369 adj=49999230 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1710 bytes_read=9705 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=63999500 adj=63999316 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.4 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=16849 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=31999807 adj=31999695 coil_temp=22.8 refs=0 mcu_temp=22.79 supply_voltage=2.978 sysload=0.45 cputime=73.819 memavail=3399964 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1373.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3918 bytes_read=12493 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=180000583 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49999359 adj=49999136 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1716 bytes_read=9819 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=63999493 adj=63999399 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=17205 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=31999804 adj=31999710 coil_temp=22.8 refs=0 mcu_temp=22.80 supply_voltage=2.978 sysload=0.45 cputime=73.843 memavail=3399964 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1374.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3924 bytes_read=12610 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=180000566 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49999349 adj=49999099 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1722 bytes_read=9947 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=63999487 adj=63999355 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=17561 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=31999802 adj=31999696 coil_temp=22.8 refs=0 mcu_temp=22.80 supply_voltage=2.978 sysload=0.45 cputime=73.866 memavail=3399468 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1375.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3930 bytes_read=12742 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=180000552 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49999341 adj=49999073 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1728 bytes_read=10047 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=63999480 adj=63999333 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=17917 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=31999800 adj=31999712 coil_temp=22.8 refs=0 mcu_temp=22.80 supply_voltage=2.978 sysload=0.45 cputime=73.890 memavail=3399472 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1376.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3936 bytes_read=12845 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=180000553 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49999345 adj=49999060 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1734 bytes_read=10147 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=63999481 adj=63999300 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=18273 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=31999800 adj=31999709 coil_temp=22.8 refs=0 mcu_temp=22.81 supply_voltage=2.978 sysload=0.41 cputime=73.930 memavail=3399472 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1377.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3942 bytes_read=12948 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000555 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49999346 adj=49999127 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1740 bytes_read=10275 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=63999479 adj=63999303 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=18629 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=31999799 adj=31999708 coil_temp=22.8 refs=0 mcu_temp=22.82 supply_voltage=2.978 sysload=0.41 cputime=73.979 memavail=3398224 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 1378.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3948 bytes_read=13080 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000556 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=49999348 adj=49999145 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1746 bytes_read=10389 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=63999477 adj=63999273 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=18985 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=31999799 adj=31999701 coil_temp=22.8 refs=0 mcu_temp=22.83 supply_voltage=2.978 sysload=0.41 cputime=74.028 memavail=3398224 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1379.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3954 bytes_read=13197 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000558 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=49999354 adj=49999178 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1752 bytes_read=10489 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=63999475 adj=63999252 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=19341 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=31999799 adj=31999689 coil_temp=22.8 refs=0 mcu_temp=22.83 supply_voltage=2.978 sysload=0.41 cputime=74.076 memavail=3398224 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1380.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3960 bytes_read=13300 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000557 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=49999357 adj=49999233 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1758 bytes_read=10617 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=63999473 adj=63999233 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=19697 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=31999797 adj=31999690 coil_temp=22.8 refs=0 mcu_temp=22.83 supply_voltage=2.978 sysload=0.41 cputime=74.124 memavail=3398224 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1381.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3966 bytes_read=13432 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000558 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=49999362 adj=49999264 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1764 bytes_read=10717 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=63999471 adj=63999224 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=20053 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=31999800 adj=31999676 coil_temp=22.8 refs=0 mcu_temp=22.83 supply_voltage=2.978 sysload=0.38 cputime=74.174 memavail=3398224 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1382.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3972 bytes_read=13535 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000557 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=49999361 adj=49999301 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1770 bytes_read=10817 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=63999469 adj=63999213 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=20409 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=31999799 adj=31999712 coil_temp=22.8 refs=0 mcu_temp=22.83 supply_voltage=2.978 sysload=0.38 cputime=74.222 memavail=3398224 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1383.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3978 bytes_read=13638 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000557 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49999361 adj=49999271 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1776 bytes_read=10959 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=63999470 adj=63999216 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.9 raspberry_pi: temp=45.8 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=20765 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=31999798 adj=31999697 coil_temp=22.8 refs=0 mcu_temp=22.85 supply_voltage=2.978 sysload=0.38 cputime=74.271 memavail=3398240 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1384.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3984 bytes_read=13784 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000565 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49999370 adj=49999253 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1782 bytes_read=11059 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=63999470 adj=63999238 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=21121 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=31999798 adj=31999695 coil_temp=22.8 refs=0 mcu_temp=22.85 supply_voltage=2.978 sysload=0.38 cputime=74.319 memavail=3398240 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1385.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3990 bytes_read=13887 bytes_retransmit=9 bytes_invalid=0 send_seq=359 receive_seq=359 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49999368 adj=49999306 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1788 bytes_read=11159 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=63999471 adj=63999217 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=46.3 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=21477 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=31999800 adj=31999675 coil_temp=22.8 refs=0 mcu_temp=22.84 supply_voltage=2.978 sysload=0.38 cputime=74.368 memavail=3398240 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1386.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3996 bytes_read=13990 bytes_retransmit=9 bytes_invalid=0 send_seq=360 receive_seq=360 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000574 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49999364 adj=49999252 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1794 bytes_read=11287 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=63999471 adj=63999223 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=21833 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=31999799 adj=31999697 coil_temp=22.8 refs=0 mcu_temp=22.85 supply_voltage=2.978 sysload=0.35 cputime=74.418 memavail=3398240 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1387.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4002 bytes_read=14122 bytes_retransmit=9 bytes_invalid=0 send_seq=361 receive_seq=361 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49999364 adj=49999189 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1800 bytes_read=11387 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=63999478 adj=63999210 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=22189 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=31999800 adj=31999678 coil_temp=22.8 refs=0 mcu_temp=22.86 supply_voltage=2.977 sysload=0.35 cputime=74.466 memavail=3398256 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1388.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4008 bytes_read=14225 bytes_retransmit=9 bytes_invalid=0 send_seq=362 receive_seq=362 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000574 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999364 adj=49999193 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1806 bytes_read=11499 bytes_retransmit=9 bytes_invalid=0 send_seq=214 receive_seq=214 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999481 adj=63999311 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=708 bytes_read=22545 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=31999799 adj=31999689 coil_temp=22.8 refs=0 mcu_temp=22.87 supply_voltage=2.977 sysload=0.35 cputime=74.507 memavail=3399832 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1389.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4014 bytes_read=14342 bytes_retransmit=9 bytes_invalid=0 send_seq=363 receive_seq=363 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000562 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999356 adj=49999188 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1812 bytes_read=11618 bytes_retransmit=9 bytes_invalid=0 send_seq=215 receive_seq=215 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999478 adj=63999335 Octopus_V1.1_F446: temp=27.4 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=714 bytes_read=22901 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=31999798 adj=31999683 coil_temp=22.8 refs=0 mcu_temp=22.89 supply_voltage=2.978 sysload=0.35 cputime=74.531 memavail=3399888 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1390.8: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4020 bytes_read=14474 bytes_retransmit=9 bytes_invalid=0 send_seq=364 receive_seq=364 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000550 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000018 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=49999349 adj=49999143 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1818 bytes_read=11711 bytes_retransmit=9 bytes_invalid=0 send_seq=216 receive_seq=216 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999473 adj=63999330 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=720 bytes_read=23257 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=31999795 adj=31999697 coil_temp=22.8 refs=0 mcu_temp=22.89 supply_voltage=2.978 sysload=0.35 cputime=74.555 memavail=3399888 print_time=7.538 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
RatOS | DEBUG:: Debugging enabled.
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 1787.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6438 bytes_read=60112 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=180000500 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 bytes_write=3624 bytes_read=13232 bytes_retransmit=0 bytes_invalid=0 send_seq=578 receive_seq=578 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999474 adj=49999311 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4236 bytes_read=56064 bytes_retransmit=9 bytes_invalid=0 send_seq=619 receive_seq=619 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999201 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3138 bytes_read=164020 bytes_retransmit=0 bytes_invalid=0 send_seq=523 receive_seq=523 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999769 adj=31999653 coil_temp=22.9 refs=0 mcu_temp=23.31 supply_voltage=2.977 sysload=0.04 cputime=90.600 memavail=3403444 print_time=462.557 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1788.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6444 bytes_read=60230 bytes_retransmit=9 bytes_invalid=0 send_seq=768 receive_seq=768 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000495 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=3630 bytes_read=13261 bytes_retransmit=0 bytes_invalid=0 send_seq=579 receive_seq=579 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999472 adj=49999293 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4242 bytes_read=56164 bytes_retransmit=9 bytes_invalid=0 send_seq=620 receive_seq=620 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999443 adj=63999224 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3144 bytes_read=164376 bytes_retransmit=0 bytes_invalid=0 send_seq=524 receive_seq=524 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999653 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.977 sysload=0.04 cputime=90.624 memavail=3402196 print_time=462.557 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1789.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6450 bytes_read=60333 bytes_retransmit=9 bytes_invalid=0 send_seq=769 receive_seq=769 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000488 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=3636 bytes_read=13277 bytes_retransmit=0 bytes_invalid=0 send_seq=580 receive_seq=580 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999468 adj=49999295 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4248 bytes_read=56292 bytes_retransmit=9 bytes_invalid=0 send_seq=621 receive_seq=621 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999442 adj=63999228 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3150 bytes_read=164732 bytes_retransmit=0 bytes_invalid=0 send_seq=525 receive_seq=525 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999653 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.04 cputime=90.649 memavail=3401200 print_time=462.557 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1790.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6456 bytes_read=60450 bytes_retransmit=9 bytes_invalid=0 send_seq=770 receive_seq=770 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000481 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=3642 bytes_read=13293 bytes_retransmit=0 bytes_invalid=0 send_seq=581 receive_seq=581 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999466 adj=49999284 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4254 bytes_read=56406 bytes_retransmit=9 bytes_invalid=0 send_seq=622 receive_seq=622 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999440 adj=63999246 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3156 bytes_read=165088 bytes_retransmit=0 bytes_invalid=0 send_seq=526 receive_seq=526 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999658 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.04 cputime=90.673 memavail=3401200 print_time=462.557 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1791.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6462 bytes_read=60582 bytes_retransmit=9 bytes_invalid=0 send_seq=771 receive_seq=771 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000480 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=3648 bytes_read=13309 bytes_retransmit=0 bytes_invalid=0 send_seq=582 receive_seq=582 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999467 adj=49999283 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4260 bytes_read=56506 bytes_retransmit=9 bytes_invalid=0 send_seq=623 receive_seq=623 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999439 adj=63999260 Octopus_V1.1_F446: temp=27.5 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3162 bytes_read=165444 bytes_retransmit=0 bytes_invalid=0 send_seq=527 receive_seq=527 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999661 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.04 cputime=90.723 memavail=3401200 print_time=462.557 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1792.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=6468 bytes_read=60685 bytes_retransmit=9 bytes_invalid=0 send_seq=772 receive_seq=772 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000479 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=3654 bytes_read=13325 bytes_retransmit=0 bytes_invalid=0 send_seq=583 receive_seq=583 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999469 adj=49999329 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4266 bytes_read=56625 bytes_retransmit=9 bytes_invalid=0 send_seq=624 receive_seq=624 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999439 adj=63999258 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.3 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3168 bytes_read=165800 bytes_retransmit=0 bytes_invalid=0 send_seq=528 receive_seq=528 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999764 adj=31999659 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.19 cputime=90.773 memavail=3401200 print_time=462.557 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4124411552
Received 1331.402472: b'{"id":4046355664,"method":"objects/query","params":{"objects":{"configfile":null}}}'
Received 1331.672739: b'{"id":4090251776,"method":"register_remote_method","params":{"response_template":{"method":"shutdown_machine"},"remote_method":"shutdown_machine"}}'
Received 1331.674483: b'{"id":4046353744,"method":"register_remote_method","params":{"response_template":{"method":"reboot_machine"},"remote_method":"reboot_machine"}}'
Received 1331.675523: b'{"id":4090253288,"method":"register_remote_method","params":{"response_template":{"method":"pause_job_queue"},"remote_method":"pause_job_queue"}}'
Received 1331.676403: b'{"id":4046354032,"method":"register_remote_method","params":{"response_template":{"method":"start_job_queue"},"remote_method":"start_job_queue"}}'
Received 1331.679135: b'{"id":4045828072,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 1331.679135: b'{"id":4045826728,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 1331.683805: b'{"id":4046355184,"method":"info","params":{}}'
Received 1331.683805: b'{"id":4046354176,"method":"objects/list","params":{}}'
Received 1331.690373: b'{"id":4046353984,"method":"info","params":{}}'
Received 1331.690373: b'{"id":4090251968,"method":"objects/list","params":{}}'
Received 1331.701909: b'{"id":4046353984,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 1331.936500: b'{"id":4090253288,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 1332.189062: b'{"id":4046354968,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 1332.432575: b'{"id":4046354344,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 1332.751296: b'{"id":4090251320,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 1332.779253: b'{"id":4046354392,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 1784.795941: b'{"id":4045943280,"method":"gcode/script","params":{"script":"ENABLE_DEBUG"}}'
Received 1786.149523: b'{"id":4045946232,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 1792.460009: b'{"id":4045945344,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 Y-10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
MCU 'mcu' shutdown: Command request
clocksync state: mcu_freq=180000000 last_clock=84359739081 clock_est=(1763.963 79220734040 180000479.884) min_half_rtt=0.000068 min_rtt_time=1328.301 time_avg=1763.963(843.234) clock_avg=79220734040.195(151782571846.531) pred_variance=20422201.365
Dumping serial stats: bytes_write=7036 bytes_read=60917 bytes_retransmit=9 bytes_invalid=0 send_seq=790 receive_seq=790 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1711.784164 1711.784164 6: seq: 12, get_clock
Sent 1 1712.768957 1712.768957 6: seq: 13, get_clock
Sent 2 1713.753241 1713.753241 6: seq: 14, get_clock
Sent 3 1714.737446 1714.737446 6: seq: 15, get_clock
Sent 4 1715.722050 1715.722050 6: seq: 16, get_clock
Sent 5 1716.706275 1716.706275 6: seq: 17, get_clock
Sent 6 1717.690632 1717.690632 6: seq: 18, get_clock
Sent 7 1718.675560 1718.675560 6: seq: 19, get_clock
Sent 8 1719.659787 1719.659787 6: seq: 1a, get_clock
Sent 9 1720.643979 1720.643979 6: seq: 1b, get_clock
Sent 10 1721.629066 1721.629066 6: seq: 1c, get_clock
Sent 11 1722.614047 1722.614047 6: seq: 1d, get_clock
Sent 12 1723.598294 1723.598294 6: seq: 1e, get_clock
Sent 13 1724.582979 1724.582979 6: seq: 1f, get_clock
Sent 14 1725.567213 1725.567213 6: seq: 10, get_clock
Sent 15 1726.551904 1726.551904 6: seq: 11, get_clock
Sent 16 1727.535666 1727.535666 6: seq: 12, get_clock
Sent 17 1728.519957 1728.519957 6: seq: 13, get_clock
Sent 18 1729.504185 1729.504185 6: seq: 14, get_clock
Sent 19 1730.488904 1730.488904 6: seq: 15, get_clock
Sent 20 1731.473573 1731.473573 6: seq: 16, get_clock
Sent 21 1732.457641 1732.457641 6: seq: 17, get_clock
Sent 22 1733.442611 1733.442611 6: seq: 18, get_clock
Sent 23 1734.427524 1734.427524 6: seq: 19, get_clock
Sent 24 1735.411791 1735.411791 6: seq: 1a, get_clock
Sent 25 1736.396038 1736.396038 6: seq: 1b, get_clock
Sent 26 1737.380321 1737.380321 6: seq: 1c, get_clock
Sent 27 1738.365202 1738.365202 6: seq: 1d, get_clock
Sent 28 1739.349359 1739.349359 6: seq: 1e, get_clock
Sent 29 1740.333609 1740.333609 6: seq: 1f, get_clock
Sent 30 1741.317808 1741.317808 6: seq: 10, get_clock
Sent 31 1742.302127 1742.302127 6: seq: 11, get_clock
Sent 32 1743.286629 1743.286629 6: seq: 12, get_clock
Sent 33 1744.271456 1744.271456 6: seq: 13, get_clock
Sent 34 1745.256282 1745.256282 6: seq: 14, get_clock
Sent 35 1746.241073 1746.241073 6: seq: 15, get_clock
Sent 36 1747.225306 1747.225306 6: seq: 16, get_clock
Sent 37 1748.209847 1748.209847 6: seq: 17, get_clock
Sent 38 1749.194768 1749.194768 6: seq: 18, get_clock
Sent 39 1750.179780 1750.179780 6: seq: 19, get_clock
Sent 40 1751.164058 1751.164058 6: seq: 1a, get_clock
Sent 41 1752.148131 1752.148131 6: seq: 1b, get_clock
Sent 42 1753.132307 1753.132307 6: seq: 1c, get_clock
Sent 43 1754.116560 1754.116560 6: seq: 1d, get_clock
Sent 44 1755.100853 1755.100853 6: seq: 1e, get_clock
Sent 45 1756.085986 1756.085986 6: seq: 1f, get_clock
Sent 46 1757.070769 1757.070769 6: seq: 10, get_clock
Sent 47 1758.055951 1758.055951 6: seq: 11, get_clock
Sent 48 1759.040399 1759.040399 6: seq: 12, get_clock
Sent 49 1760.024620 1760.024620 6: seq: 13, get_clock
Sent 50 1761.008788 1761.008788 6: seq: 14, get_clock
Sent 51 1761.993156 1761.993156 6: seq: 15, get_clock
Sent 52 1762.977370 1762.977370 6: seq: 16, get_clock
Sent 53 1763.961569 1763.961569 6: seq: 17, get_clock
Sent 54 1764.945853 1764.945853 6: seq: 18, get_clock
Sent 55 1765.930439 1765.930439 6: seq: 19, get_clock
Sent 56 1766.915317 1766.915317 6: seq: 1a, get_clock
Sent 57 1767.900164 1767.900164 6: seq: 1b, get_clock
Sent 58 1768.885134 1768.885134 6: seq: 1c, get_clock
Sent 59 1769.869952 1769.869952 6: seq: 1d, get_clock
Sent 60 1770.854317 1770.854317 6: seq: 1e, get_clock
Sent 61 1771.838926 1771.838926 6: seq: 1f, get_clock
Sent 62 1772.823656 1772.823656 6: seq: 10, get_clock
Sent 63 1773.807959 1773.807959 6: seq: 11, get_clock
Sent 64 1774.792600 1774.792600 6: seq: 12, get_clock
Sent 65 1775.777211 1775.777211 6: seq: 13, get_clock
Sent 66 1776.761382 1776.761382 6: seq: 14, get_clock
Sent 67 1777.746596 1777.746596 6: seq: 15, get_clock
Sent 68 1778.731497 1778.731497 6: seq: 16, get_clock
Sent 69 1779.716038 1779.716038 6: seq: 17, get_clock
Sent 70 1780.700670 1780.700670 6: seq: 18, get_clock
Sent 71 1781.685511 1781.685511 6: seq: 19, get_clock
Sent 72 1782.669825 1782.669825 6: seq: 1a, get_clock
Sent 73 1783.654003 1783.654003 6: seq: 1b, get_clock
Sent 74 1784.638453 1784.638453 6: seq: 1c, get_clock
Sent 75 1785.622426 1785.622426 6: seq: 1d, get_clock
Sent 76 1786.606520 1786.606520 6: seq: 1e, get_clock
Sent 77 1787.590888 1787.590888 6: seq: 1f, get_clock
Sent 78 1788.575130 1788.575130 6: seq: 10, get_clock
Sent 79 1789.559338 1789.559338 6: seq: 11, get_clock
Sent 80 1790.544259 1790.544259 6: seq: 12, get_clock
Sent 81 1791.528508 1791.528508 6: seq: 13, get_clock
Sent 82 1792.512788 1792.512788 6: seq: 14, get_clock
Sent 83 1792.563284 1792.563284 21: seq: 15, queue_digital_out oid=24 clock=2809199825 on_ticks=0, queue_digital_out oid=25 clock=2809199825 on_ticks=0
Sent 84 1792.564254 1792.564254 13: seq: 16, queue_digital_out oid=26 clock=2809199825 on_ticks=0
Sent 85 1792.565194 1792.565194 13: seq: 17, queue_digital_out oid=27 clock=2809199825 on_ticks=0
Sent 86 1792.567420 1792.567420 58: seq: 18, set_next_step_dir oid=9 dir=0, set_next_step_dir oid=11 dir=1, set_next_step_dir oid=12 dir=1, set_next_step_dir oid=15 dir=0, queue_step oid=9 interval=2809383537 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=2809383537 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0, queue_step oid=12 interval=2809383537 count=1 add=0
Sent 87 1792.567420 1792.567420 64: seq: 19, queue_step oid=12 interval=134486 count=1 add=0, queue_step oid=15 interval=2809383537 count=1 add=0, queue_step oid=15 interval=134486 count=1 add=0, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513, queue_step oid=12 interval=88158 count=4 add=-10513, queue_step oid=15 interval=88158 count=4 add=-10513
Sent 88 1792.567420 1792.567420 61: seq: 1a, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=12 interval=50683 count=10 add=-2094, queue_step oid=15 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=12 interval=31419 count=22 add=-541
Sent 89 1792.567420 1792.567420 61: seq: 1b, queue_step oid=15 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=12 interval=20980 count=34 add=-191, queue_step oid=15 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72, queue_step oid=11 interval=15169 count=61 add=-72
Sent 90 1792.567420 1792.567420 59: seq: 1c, queue_step oid=12 interval=15169 count=61 add=-72, queue_step oid=15 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=12 interval=11220 count=93 add=-31, queue_step oid=15 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15
Sent 91 1792.567420 1792.567420 61: seq: 1d, queue_step oid=12 interval=8640 count=127 add=-15, queue_step oid=15 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=12 interval=6917 count=165 add=-8, queue_step oid=15 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1, queue_step oid=11 interval=5707 count=156 add=-1
Sent 92 1792.568752 1792.568752 61: seq: 1e, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=12 interval=5707 count=156 add=-1, queue_step oid=15 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0, queue_step oid=12 interval=5626 count=2021 add=0, queue_step oid=15 interval=5626 count=2021 add=0
Sent 93 1792.571964 1792.571964 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 94 1792.576944 1792.576944 14: seq: 10, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 1792.580792 1792.580792 14: seq: 11, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 1792.584614 1792.584614 14: seq: 12, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 1792.588427 1792.588427 14: seq: 13, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 98 1792.592258 1792.592258 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 1792.600648 1792.600648 6: seq: 15, emergency_stop
Dumping receive queue 100 messages
Receive: 0 1781.055033 1780.700670 14: seq: 19, analog_in_state oid=20 next_clock=745621376 value=7530
Receive: 1 1781.065012 1780.700670 15: seq: 19, analog_in_state oid=21 next_clock=747421376 value=31463
Receive: 2 1781.355047 1780.700670 14: seq: 19, analog_in_state oid=20 next_clock=799621376 value=7532
Receive: 3 1781.365026 1780.700670 15: seq: 19, analog_in_state oid=21 next_clock=801421376 value=31464
Receive: 4 1781.655092 1780.700670 14: seq: 19, analog_in_state oid=20 next_clock=853621376 value=7530
Receive: 5 1781.665021 1780.700670 15: seq: 19, analog_in_state oid=21 next_clock=855421376 value=31463
Receive: 6 1781.685753 1781.685511 11: seq: 1a, clock clock=806445208
Receive: 7 1781.955049 1781.685511 14: seq: 1a, analog_in_state oid=20 next_clock=907621376 value=7533
Receive: 8 1781.965019 1781.685511 15: seq: 1a, analog_in_state oid=21 next_clock=909421376 value=31464
Receive: 9 1782.255045 1781.685511 14: seq: 1a, analog_in_state oid=20 next_clock=961621376 value=7529
Receive: 10 1782.265130 1781.685511 15: seq: 1a, analog_in_state oid=21 next_clock=963421376 value=31465
Receive: 11 1782.555070 1781.685511 14: seq: 1a, analog_in_state oid=20 next_clock=1015621376 value=7529
Receive: 12 1782.565047 1781.685511 15: seq: 1a, analog_in_state oid=21 next_clock=1017421376 value=31465
Receive: 13 1782.670130 1782.669825 11: seq: 1b, clock clock=983632101
Receive: 14 1782.855026 1782.669825 14: seq: 1b, analog_in_state oid=20 next_clock=1069621376 value=7532
Receive: 15 1782.864991 1782.669825 15: seq: 1b, analog_in_state oid=21 next_clock=1071421376 value=31468
Receive: 16 1783.155106 1782.669825 14: seq: 1b, analog_in_state oid=20 next_clock=1123621376 value=7532
Receive: 17 1783.165028 1782.669825 15: seq: 1b, analog_in_state oid=21 next_clock=1125421376 value=31469
Receive: 18 1783.455061 1782.669825 14: seq: 1b, analog_in_state oid=20 next_clock=1177621376 value=7532
Receive: 19 1783.465005 1782.669825 15: seq: 1b, analog_in_state oid=21 next_clock=1179421376 value=31466
Receive: 20 1783.654498 1783.654003 11: seq: 1c, clock clock=1160779659
Receive: 21 1783.755067 1783.654003 14: seq: 1c, analog_in_state oid=20 next_clock=1231621376 value=7532
Receive: 22 1783.764993 1783.654003 15: seq: 1c, analog_in_state oid=21 next_clock=1233421376 value=31468
Receive: 23 1784.055063 1783.654003 14: seq: 1c, analog_in_state oid=20 next_clock=1285621376 value=7532
Receive: 24 1784.065064 1783.654003 15: seq: 1c, analog_in_state oid=21 next_clock=1287421376 value=31469
Receive: 25 1784.355063 1783.654003 14: seq: 1c, analog_in_state oid=20 next_clock=1339621376 value=7532
Receive: 26 1784.365035 1783.654003 15: seq: 1c, analog_in_state oid=21 next_clock=1341421376 value=31473
Receive: 27 1784.638799 1784.638453 11: seq: 1d, clock clock=1337980337
Receive: 28 1784.655021 1784.638453 14: seq: 1d, analog_in_state oid=20 next_clock=1393621376 value=7535
Receive: 29 1784.665022 1784.638453 15: seq: 1d, analog_in_state oid=21 next_clock=1395421376 value=31469
Receive: 30 1784.955064 1784.638453 14: seq: 1d, analog_in_state oid=20 next_clock=1447621376 value=7529
Receive: 31 1784.965088 1784.638453 15: seq: 1d, analog_in_state oid=21 next_clock=1449421376 value=31474
Receive: 32 1785.254965 1784.638453 14: seq: 1d, analog_in_state oid=20 next_clock=1501621376 value=7530
Receive: 33 1785.264956 1784.638453 15: seq: 1d, analog_in_state oid=21 next_clock=1503421376 value=31473
Receive: 34 1785.547840 1784.638453 14: seq: 1d, stats count=130 sum=115756 sumsq=605010
Receive: 35 1785.554949 1784.638453 14: seq: 1d, analog_in_state oid=20 next_clock=1555621376 value=7532
Receive: 36 1785.564955 1784.638453 15: seq: 1d, analog_in_state oid=21 next_clock=1557421376 value=31474
Receive: 37 1785.622580 1785.622426 11: seq: 1e, clock clock=1515087021
Receive: 38 1785.854955 1785.622426 14: seq: 1e, analog_in_state oid=20 next_clock=1609621376 value=7530
Receive: 39 1785.864934 1785.622426 15: seq: 1e, analog_in_state oid=21 next_clock=1611421376 value=31475
Receive: 40 1786.155107 1785.622426 14: seq: 1e, analog_in_state oid=20 next_clock=1663621376 value=7531
Receive: 41 1786.164972 1785.622426 15: seq: 1e, analog_in_state oid=21 next_clock=1665421376 value=31473
Receive: 42 1786.454969 1785.622426 14: seq: 1e, analog_in_state oid=20 next_clock=1717621376 value=7532
Receive: 43 1786.464945 1785.622426 15: seq: 1e, analog_in_state oid=21 next_clock=1719421376 value=31475
Receive: 44 1786.606674 1786.606520 11: seq: 1f, clock clock=1692224754
Receive: 45 1786.754976 1786.606520 14: seq: 1f, analog_in_state oid=20 next_clock=1771621376 value=7533
Receive: 46 1786.764924 1786.606520 15: seq: 1f, analog_in_state oid=21 next_clock=1773421376 value=31475
Receive: 47 1787.054941 1786.606520 14: seq: 1f, analog_in_state oid=20 next_clock=1825621376 value=7533
Receive: 48 1787.064948 1786.606520 15: seq: 1f, analog_in_state oid=21 next_clock=1827421376 value=31476
Receive: 49 1787.354938 1786.606520 14: seq: 1f, analog_in_state oid=20 next_clock=1879621376 value=7527
Receive: 50 1787.364928 1786.606520 15: seq: 1f, analog_in_state oid=21 next_clock=1881421376 value=31477
Receive: 51 1787.591053 1787.590888 11: seq: 10, clock clock=1869412292
Receive: 52 1787.654970 1787.590888 14: seq: 10, analog_in_state oid=20 next_clock=1933621376 value=7534
Receive: 53 1787.664936 1787.590888 15: seq: 10, analog_in_state oid=21 next_clock=1935421376 value=31479
Receive: 54 1787.954961 1787.590888 14: seq: 10, analog_in_state oid=20 next_clock=1987621376 value=7530
Receive: 55 1787.964932 1787.590888 15: seq: 10, analog_in_state oid=21 next_clock=1989421376 value=31478
Receive: 56 1788.254938 1787.590888 14: seq: 10, analog_in_state oid=20 next_clock=2041621376 value=7534
Receive: 57 1788.264921 1787.590888 15: seq: 10, analog_in_state oid=21 next_clock=2043421376 value=31479
Receive: 58 1788.554932 1787.590888 14: seq: 10, analog_in_state oid=20 next_clock=2095621376 value=7531
Receive: 59 1788.564931 1787.590888 15: seq: 10, analog_in_state oid=21 next_clock=2097421376 value=31481
Receive: 60 1788.575286 1788.575130 11: seq: 11, clock clock=2046575121
Receive: 61 1788.854995 1788.575130 14: seq: 11, analog_in_state oid=20 next_clock=2149621376 value=7532
Receive: 62 1788.864977 1788.575130 15: seq: 11, analog_in_state oid=21 next_clock=2151421376 value=31481
Receive: 63 1789.154967 1788.575130 14: seq: 11, analog_in_state oid=20 next_clock=2203621376 value=7533
Receive: 64 1789.164930 1788.575130 15: seq: 11, analog_in_state oid=21 next_clock=2205421376 value=31479
Receive: 65 1789.454960 1788.575130 14: seq: 11, analog_in_state oid=20 next_clock=2257621376 value=7529
Receive: 66 1789.464917 1788.575130 15: seq: 11, analog_in_state oid=21 next_clock=2259421376 value=31481
Receive: 67 1789.559509 1789.559338 11: seq: 12, clock clock=2223732748
Receive: 68 1789.754956 1789.559338 14: seq: 12, analog_in_state oid=20 next_clock=2311621376 value=7532
Receive: 69 1789.764925 1789.559338 15: seq: 12, analog_in_state oid=21 next_clock=2313421376 value=31483
Receive: 70 1790.055016 1789.559338 14: seq: 12, analog_in_state oid=20 next_clock=2365621376 value=7533
Receive: 71 1790.065086 1789.559338 15: seq: 12, analog_in_state oid=21 next_clock=2367421376 value=31481
Receive: 72 1790.355019 1789.559338 14: seq: 12, analog_in_state oid=20 next_clock=2419621376 value=7534
Receive: 73 1790.365002 1789.559338 15: seq: 12, analog_in_state oid=21 next_clock=2421421376 value=31478
Receive: 74 1790.544604 1790.544259 11: seq: 13, clock clock=2401023276
Receive: 75 1790.647865 1790.544259 14: seq: 13, stats count=132 sum=118785 sumsq=622904
Receive: 76 1790.655040 1790.544259 14: seq: 13, analog_in_state oid=20 next_clock=2473621376 value=7534
Receive: 77 1790.664998 1790.544259 15: seq: 13, analog_in_state oid=21 next_clock=2475421376 value=31485
Receive: 78 1790.955054 1790.544259 14: seq: 13, analog_in_state oid=20 next_clock=2527621376 value=7537
Receive: 79 1790.964995 1790.544259 15: seq: 13, analog_in_state oid=21 next_clock=2529421376 value=31480
Receive: 80 1791.255017 1790.544259 14: seq: 13, analog_in_state oid=20 next_clock=2581621376 value=7537
Receive: 81 1791.264984 1790.544259 15: seq: 13, analog_in_state oid=21 next_clock=2583421376 value=31480
Receive: 82 1791.528745 1791.528508 11: seq: 14, clock clock=2578189104
Receive: 83 1791.554979 1791.528508 14: seq: 14, analog_in_state oid=20 next_clock=2635621376 value=7530
Receive: 84 1791.564958 1791.528508 15: seq: 14, analog_in_state oid=21 next_clock=2637421376 value=31483
Receive: 85 1791.854996 1791.528508 14: seq: 14, analog_in_state oid=20 next_clock=2689621376 value=7534
Receive: 86 1791.864955 1791.528508 15: seq: 14, analog_in_state oid=21 next_clock=2691421376 value=31482
Receive: 87 1792.155062 1791.528508 14: seq: 14, analog_in_state oid=20 next_clock=2743621376 value=7533
Receive: 88 1792.165039 1791.528508 15: seq: 14, analog_in_state oid=21 next_clock=2745421376 value=31485
Receive: 89 1792.455022 1791.528508 14: seq: 14, analog_in_state oid=20 next_clock=2797621376 value=7531
Receive: 90 1792.465033 1791.528508 15: seq: 14, analog_in_state oid=21 next_clock=2799421376 value=31480
Receive: 91 1792.513033 1792.512788 11: seq: 15, clock clock=2755360457
Receive: 92 1792.571223 1792.568752 8: seq: 1f, tmcuart_response oid=2 read=b''
Receive: 93 1792.575973 1792.571964 18: seq: 10, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02\x88%\xe0'
Receive: 94 1792.580076 1792.576944 8: seq: 11, tmcuart_response oid=3 read=b''
Receive: 95 1792.583905 1792.580792 8: seq: 12, tmcuart_response oid=3 read=b''
Receive: 96 1792.587740 1792.584614 8: seq: 13, tmcuart_response oid=3 read=b''
Receive: 97 1792.591583 1792.588427 8: seq: 14, tmcuart_response oid=3 read=b''
Receive: 98 1792.595402 1792.592258 8: seq: 15, tmcuart_response oid=3 read=b''
Receive: 99 1792.601008 1792.600648 12: seq: 16, shutdown clock=2771176890 static_string_id=Command request
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[200.0, 190.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=23433586640 clock_est=(1763.143 22006063741 49999469.718) min_half_rtt=0.000049 min_rtt_time=1328.969 time_avg=1763.143(843.236) clock_avg=22006063741.267(42161359074.991) pred_variance=5630831.533 clock_adj=(-0.831 49999361.000)
Dumping serial stats: bytes_write=3660 bytes_read=13350 bytes_retransmit=0 bytes_invalid=0 send_seq=584 receive_seq=584 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1695.211283 1695.211283 6: seq: 14, get_clock
Sent 1 1696.195710 1696.195710 6: seq: 15, get_clock
Sent 2 1697.180592 1697.180592 6: seq: 16, get_clock
Sent 3 1698.164875 1698.164875 6: seq: 17, get_clock
Sent 4 1699.148804 1699.148804 6: seq: 18, get_clock
Sent 5 1700.132972 1700.132972 6: seq: 19, get_clock
Sent 6 1701.117407 1701.117407 6: seq: 1a, get_clock
Sent 7 1702.102356 1702.102356 6: seq: 1b, get_clock
Sent 8 1703.086625 1703.086625 6: seq: 1c, get_clock
Sent 9 1704.071366 1704.071366 6: seq: 1d, get_clock
Sent 10 1705.055670 1705.055670 6: seq: 1e, get_clock
Sent 11 1706.039854 1706.039854 6: seq: 1f, get_clock
Sent 12 1707.024101 1707.024101 6: seq: 10, get_clock
Sent 13 1708.008362 1708.008362 6: seq: 11, get_clock
Sent 14 1708.992702 1708.992702 6: seq: 12, get_clock
Sent 15 1709.977561 1709.977561 6: seq: 13, get_clock
Sent 16 1710.961750 1710.961750 6: seq: 14, get_clock
Sent 17 1711.945934 1711.945934 6: seq: 15, get_clock
Sent 18 1712.931108 1712.931108 6: seq: 16, get_clock
Sent 19 1713.915777 1713.915777 6: seq: 17, get_clock
Sent 20 1714.900296 1714.900296 6: seq: 18, get_clock
Sent 21 1715.885352 1715.885352 6: seq: 19, get_clock
Sent 22 1716.870101 1716.870101 6: seq: 1a, get_clock
Sent 23 1717.854373 1717.854373 6: seq: 1b, get_clock
Sent 24 1718.838630 1718.838630 6: seq: 1c, get_clock
Sent 25 1719.822907 1719.822907 6: seq: 1d, get_clock
Sent 26 1720.807141 1720.807141 6: seq: 1e, get_clock
Sent 27 1721.791989 1721.791989 6: seq: 1f, get_clock
Sent 28 1722.777066 1722.777066 6: seq: 10, get_clock
Sent 29 1723.761422 1723.761422 6: seq: 11, get_clock
Sent 30 1724.745629 1724.745629 6: seq: 12, get_clock
Sent 31 1725.729817 1725.729817 6: seq: 13, get_clock
Sent 32 1726.714885 1726.714885 6: seq: 14, get_clock
Sent 33 1727.702191 1727.702191 6: seq: 15, get_clock
Sent 34 1728.686714 1728.686714 6: seq: 16, get_clock
Sent 35 1729.670971 1729.670971 6: seq: 17, get_clock
Sent 36 1730.655087 1730.655087 6: seq: 18, get_clock
Sent 37 1731.639280 1731.639280 6: seq: 19, get_clock
Sent 38 1732.623524 1732.623524 6: seq: 1a, get_clock
Sent 39 1733.608329 1733.608329 6: seq: 1b, get_clock
Sent 40 1734.592508 1734.592508 6: seq: 1c, get_clock
Sent 41 1735.577241 1735.577241 6: seq: 1d, get_clock
Sent 42 1736.561952 1736.561952 6: seq: 1e, get_clock
Sent 43 1737.546912 1737.546912 6: seq: 1f, get_clock
Sent 44 1738.531784 1738.531784 6: seq: 10, get_clock
Sent 45 1739.515933 1739.515933 6: seq: 11, get_clock
Sent 46 1740.500673 1740.500673 6: seq: 12, get_clock
Sent 47 1741.485156 1741.485156 6: seq: 13, get_clock
Sent 48 1742.469375 1742.469375 6: seq: 14, get_clock
Sent 49 1743.453457 1743.453457 6: seq: 15, get_clock
Sent 50 1744.437650 1744.437650 6: seq: 16, get_clock
Sent 51 1745.422202 1745.422202 6: seq: 17, get_clock
Sent 52 1746.406215 1746.406215 6: seq: 18, get_clock
Sent 53 1747.390810 1747.390810 6: seq: 19, get_clock
Sent 54 1748.375125 1748.375125 6: seq: 1a, get_clock
Sent 55 1749.359256 1749.359256 6: seq: 1b, get_clock
Sent 56 1750.343510 1750.343510 6: seq: 1c, get_clock
Sent 57 1751.327931 1751.327931 6: seq: 1d, get_clock
Sent 58 1752.312570 1752.312570 6: seq: 1e, get_clock
Sent 59 1753.297468 1753.297468 6: seq: 1f, get_clock
Sent 60 1754.281518 1754.281518 6: seq: 10, get_clock
Sent 61 1755.265784 1755.265784 6: seq: 11, get_clock
Sent 62 1756.250566 1756.250566 6: seq: 12, get_clock
Sent 63 1757.234827 1757.234827 6: seq: 13, get_clock
Sent 64 1758.219245 1758.219245 6: seq: 14, get_clock
Sent 65 1759.204254 1759.204254 6: seq: 15, get_clock
Sent 66 1760.188440 1760.188440 6: seq: 16, get_clock
Sent 67 1761.172767 1761.172767 6: seq: 17, get_clock
Sent 68 1762.157462 1762.157462 6: seq: 18, get_clock
Sent 69 1763.141797 1763.141797 6: seq: 19, get_clock
Sent 70 1764.125985 1764.125985 6: seq: 1a, get_clock
Sent 71 1765.110242 1765.110242 6: seq: 1b, get_clock
Sent 72 1766.095223 1766.095223 6: seq: 1c, get_clock
Sent 73 1767.082405 1767.082405 6: seq: 1d, get_clock
Sent 74 1768.067212 1768.067212 6: seq: 1e, get_clock
Sent 75 1769.051288 1769.051288 6: seq: 1f, get_clock
Sent 76 1770.035402 1770.035402 6: seq: 10, get_clock
Sent 77 1771.019769 1771.019769 6: seq: 11, get_clock
Sent 78 1772.003978 1772.003978 6: seq: 12, get_clock
Sent 79 1772.988849 1772.988849 6: seq: 13, get_clock
Sent 80 1773.973826 1773.973826 6: seq: 14, get_clock
Sent 81 1774.958552 1774.958552 6: seq: 15, get_clock
Sent 82 1775.942808 1775.942808 6: seq: 16, get_clock
Sent 83 1776.926978 1776.926978 6: seq: 17, get_clock
Sent 84 1777.911417 1777.911417 6: seq: 18, get_clock
Sent 85 1778.895869 1778.895869 6: seq: 19, get_clock
Sent 86 1779.880478 1779.880478 6: seq: 1a, get_clock
Sent 87 1780.864750 1780.864750 6: seq: 1b, get_clock
Sent 88 1781.848898 1781.848898 6: seq: 1c, get_clock
Sent 89 1782.833105 1782.833105 6: seq: 1d, get_clock
Sent 90 1783.817533 1783.817533 6: seq: 1e, get_clock
Sent 91 1784.803563 1784.803563 6: seq: 1f, get_clock
Sent 92 1785.787540 1785.787540 6: seq: 10, get_clock
Sent 93 1786.771778 1786.771778 6: seq: 11, get_clock
Sent 94 1787.756336 1787.756336 6: seq: 12, get_clock
Sent 95 1788.740305 1788.740305 6: seq: 13, get_clock
Sent 96 1789.724530 1789.724530 6: seq: 14, get_clock
Sent 97 1790.709555 1790.709555 6: seq: 15, get_clock
Sent 98 1791.694021 1791.694021 6: seq: 16, get_clock
Sent 99 1792.603882 1792.603882 6: seq: 17, emergency_stop
Dumping receive queue 100 messages
Receive: 0 1711.621928 1710.961750 13: seq: 15, stats count=55 sum=53351 sumsq=404305
Receive: 1 1711.946245 1711.945934 11: seq: 16, clock clock=2266354246
Receive: 2 1712.931466 1712.931108 11: seq: 17, clock clock=2315613550
Receive: 3 1713.916048 1713.915777 11: seq: 18, clock clock=2364846659
Receive: 4 1714.900564 1714.900296 11: seq: 19, clock clock=2414070754
Receive: 5 1715.885848 1715.885352 11: seq: 1a, clock clock=2463325919
Receive: 6 1716.721812 1715.885352 13: seq: 1a, stats count=56 sum=54003 sumsq=454300
Receive: 7 1716.870242 1716.870101 11: seq: 1b, clock clock=2512555581
Receive: 8 1717.854513 1717.854373 11: seq: 1c, clock clock=2561768362
Receive: 9 1718.838767 1718.838630 11: seq: 1d, clock clock=2610981015
Receive: 10 1719.823045 1719.822907 11: seq: 1e, clock clock=2660194347
Receive: 11 1720.807291 1720.807141 11: seq: 1f, clock clock=2709405963
Receive: 12 1721.722101 1720.807141 13: seq: 1f, stats count=55 sum=27705 sumsq=97809
Receive: 13 1721.792288 1721.791989 11: seq: 10, clock clock=2758651439
Receive: 14 1722.777372 1722.777066 11: seq: 11, clock clock=2807904913
Receive: 15 1723.761686 1723.761422 11: seq: 12, clock clock=2857121991
Receive: 16 1724.745967 1724.745629 11: seq: 13, clock clock=2906335153
Receive: 17 1725.730133 1725.729817 11: seq: 14, clock clock=2955543906
Receive: 18 1726.717392 1726.714885 11: seq: 15, clock clock=3004796701
Receive: 19 1726.822068 1726.714885 13: seq: 15, stats count=57 sum=59964 sumsq=577272
Receive: 20 1727.702524 1727.702191 11: seq: 16, clock clock=3054161662
Receive: 21 1728.687094 1728.686714 11: seq: 17, clock clock=3103386609
Receive: 22 1729.671377 1729.670971 11: seq: 18, clock clock=3152603798
Receive: 23 1730.655306 1730.655087 11: seq: 19, clock clock=3201800624
Receive: 24 1731.639499 1731.639280 11: seq: 1a, clock clock=3251009972
Receive: 25 1731.922073 1731.639280 13: seq: 1a, stats count=56 sum=56282 sumsq=463008
Receive: 26 1732.623882 1732.623524 11: seq: 1b, clock clock=3300222461
Receive: 27 1733.608525 1733.608329 11: seq: 1c, clock clock=3349460028
Receive: 28 1734.592671 1734.592508 11: seq: 1d, clock clock=3398667050
Receive: 29 1735.577397 1735.577241 11: seq: 1e, clock clock=3447902943
Receive: 30 1736.562113 1736.561952 11: seq: 1f, clock clock=3497138241
Receive: 31 1737.022061 1736.561952 13: seq: 1f, stats count=56 sum=34114 sumsq=188884
Receive: 32 1737.547081 1737.546912 11: seq: 10, clock clock=3546386043
Receive: 33 1738.532109 1738.531784 11: seq: 11, clock clock=3595633724
Receive: 34 1739.516294 1739.515933 11: seq: 12, clock clock=3644841766
Receive: 35 1740.500992 1740.500673 11: seq: 13, clock clock=3694076807
Receive: 36 1741.485691 1741.485156 11: seq: 14, clock clock=3743311113
Receive: 37 1742.022271 1741.485156 13: seq: 14, stats count=55 sum=49256 sumsq=388070
Receive: 38 1742.469688 1742.469375 11: seq: 15, clock clock=3792510722
Receive: 39 1743.453764 1743.453457 11: seq: 16, clock clock=3841714064
Receive: 40 1744.437956 1744.437650 11: seq: 17, clock clock=3890923236
Receive: 41 1745.422508 1745.422202 11: seq: 18, clock clock=3940150320
Receive: 42 1746.406546 1746.406215 11: seq: 19, clock clock=3989351472
Receive: 43 1747.022393 1746.406215 13: seq: 19, stats count=55 sum=54938 sumsq=443502
Receive: 44 1747.391048 1747.390810 11: seq: 1a, clock clock=4038578978
Receive: 45 1748.375319 1748.375125 11: seq: 1b, clock clock=4087792820
Receive: 46 1749.359499 1749.359256 11: seq: 1c, clock clock=4137000176
Receive: 47 1750.343778 1750.343510 11: seq: 1d, clock clock=4186214042
Receive: 48 1751.328046 1751.327931 10: seq: 1e, clock clock=4235429450
Receive: 49 1752.122199 1751.327931 13: seq: 1e, stats count=56 sum=44441 sumsq=277319
Receive: 50 1752.312716 1752.312570 10: seq: 1f, clock clock=4284661721
Receive: 51 1753.297617 1753.297468 10: seq: 10, clock clock=38938886
Receive: 52 1754.281640 1754.281518 10: seq: 11, clock clock=88139577
Receive: 53 1755.265901 1755.265784 10: seq: 12, clock clock=137352632
Receive: 54 1756.250901 1756.250566 10: seq: 13, clock clock=186595560
Receive: 55 1757.122397 1756.250566 13: seq: 13, stats count=55 sum=33757 sumsq=170744
Receive: 56 1757.235150 1757.234827 11: seq: 14, clock clock=235807796
Receive: 57 1758.219559 1758.219245 11: seq: 15, clock clock=285028474
Receive: 58 1759.204558 1759.204254 11: seq: 16, clock clock=334278071
Receive: 59 1760.188741 1760.188440 11: seq: 17, clock clock=383486770
Receive: 60 1761.173071 1761.172767 11: seq: 18, clock clock=432702763
Receive: 61 1762.122497 1761.172767 13: seq: 18, stats count=55 sum=52988 sumsq=399702
Receive: 62 1762.157704 1762.157462 11: seq: 19, clock clock=481936499
Receive: 63 1763.142028 1763.141797 11: seq: 1a, clock clock=531152492
Receive: 64 1764.126268 1764.125985 11: seq: 1b, clock clock=580362620
Receive: 65 1765.110550 1765.110242 11: seq: 1c, clock clock=629576498
Receive: 66 1766.095549 1766.095223 11: seq: 1d, clock clock=678825877
Receive: 67 1767.082741 1767.082405 11: seq: 1e, clock clock=728184664
Receive: 68 1767.222424 1767.082405 13: seq: 1e, stats count=57 sum=60817 sumsq=625014
Receive: 69 1768.067349 1768.067212 11: seq: 1f, clock clock=777418454
Receive: 70 1769.051420 1769.051288 11: seq: 10, clock clock=826621314
Receive: 71 1770.035518 1770.035402 11: seq: 11, clock clock=875825885
Receive: 72 1771.019934 1771.019769 11: seq: 12, clock clock=925046038
Receive: 73 1772.004111 1772.003978 11: seq: 13, clock clock=974254211
Receive: 74 1772.322391 1772.003978 13: seq: 13, stats count=56 sum=29018 sumsq=110550
Receive: 75 1772.989136 1772.988849 11: seq: 14, clock clock=1023501282
Receive: 76 1773.974100 1773.973826 11: seq: 15, clock clock=1072749400
Receive: 77 1774.958838 1774.958552 11: seq: 16, clock clock=1121985576
Receive: 78 1775.943077 1775.942808 11: seq: 17, clock clock=1171197081
Receive: 79 1776.927247 1776.926978 11: seq: 18, clock clock=1220405076
Receive: 80 1777.322615 1776.926978 13: seq: 18, stats count=55 sum=52906 sumsq=427708
Receive: 81 1777.911716 1777.911417 11: seq: 19, clock clock=1269627849
Receive: 82 1778.896188 1778.895869 11: seq: 1a, clock clock=1318851133
Receive: 83 1779.880799 1779.880478 11: seq: 1b, clock clock=1368080794
Receive: 84 1780.865029 1780.864750 11: seq: 1c, clock clock=1417291960
Receive: 85 1781.849128 1781.848898 11: seq: 1d, clock clock=1466497385
Receive: 86 1782.322696 1781.848898 13: seq: 1d, stats count=55 sum=55277 sumsq=452091
Receive: 87 1782.833294 1782.833105 11: seq: 1e, clock clock=1515706468
Receive: 88 1783.817777 1783.817533 11: seq: 1f, clock clock=1564928831
Receive: 89 1784.803860 1784.803563 11: seq: 10, clock clock=1614232041
Receive: 90 1785.787673 1785.787540 11: seq: 11, clock clock=1663425545
Receive: 91 1786.771902 1786.771778 11: seq: 12, clock clock=1712636524
Receive: 92 1787.422547 1786.771778 13: seq: 12, stats count=56 sum=40487 sumsq=249783
Receive: 93 1787.756480 1787.756336 11: seq: 13, clock clock=1761864904
Receive: 94 1788.740430 1788.740305 11: seq: 14, clock clock=1811061834
Receive: 95 1789.724658 1789.724530 11: seq: 15, clock clock=1860272759
Receive: 96 1790.710110 1790.709555 11: seq: 16, clock clock=1909527371
Receive: 97 1791.694286 1791.694021 11: seq: 17, clock clock=1958750160
Receive: 98 1792.422832 1791.694021 13: seq: 17, stats count=55 sum=38808 sumsq=234208
Receive: 99 1792.604249 1792.603882 12: seq: 18, shutdown clock=2004243814 static_string_id=Command request
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=30079589879 clock_est=(1763.963 28252406884 63999438.932) min_half_rtt=0.000077 min_rtt_time=1630.074 time_avg=1763.963(843.235) clock_avg=28252406884.988(53966545100.902) pred_variance=3763939.963 clock_adj=(-1.333 63999259.250)
Dumping serial stats: bytes_write=4278 bytes_read=56677 bytes_retransmit=9 bytes_invalid=0 send_seq=626 receive_seq=626 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1696.034339 1696.034339 6: seq: 1e, get_clock
Sent 1 1697.019043 1697.019043 6: seq: 1f, get_clock
Sent 2 1698.003054 1698.003054 6: seq: 10, get_clock
Sent 3 1698.986846 1698.986846 6: seq: 11, get_clock
Sent 4 1699.971342 1699.971342 6: seq: 12, get_clock
Sent 5 1700.955722 1700.955722 6: seq: 13, get_clock
Sent 6 1701.940148 1701.940148 6: seq: 14, get_clock
Sent 7 1702.924264 1702.924264 6: seq: 15, get_clock
Sent 8 1703.909962 1703.909962 6: seq: 16, get_clock
Sent 9 1704.894446 1704.894446 6: seq: 17, get_clock
Sent 10 1705.878591 1705.878591 6: seq: 18, get_clock
Sent 11 1706.863239 1706.863239 6: seq: 19, get_clock
Sent 12 1707.847691 1707.847691 6: seq: 1a, get_clock
Sent 13 1708.831855 1708.831855 6: seq: 1b, get_clock
Sent 14 1709.815978 1709.815978 6: seq: 1c, get_clock
Sent 15 1710.800251 1710.800251 6: seq: 1d, get_clock
Sent 16 1711.784820 1711.784820 6: seq: 1e, get_clock
Sent 17 1712.769619 1712.769619 6: seq: 1f, get_clock
Sent 18 1713.753469 1713.753469 6: seq: 10, get_clock
Sent 19 1714.737746 1714.737746 6: seq: 11, get_clock
Sent 20 1715.722126 1715.722126 6: seq: 12, get_clock
Sent 21 1716.706684 1716.706684 6: seq: 13, get_clock
Sent 22 1717.690643 1717.690643 6: seq: 14, get_clock
Sent 23 1718.675590 1718.675590 6: seq: 15, get_clock
Sent 24 1719.659807 1719.659807 6: seq: 16, get_clock
Sent 25 1720.644001 1720.644001 6: seq: 17, get_clock
Sent 26 1721.629103 1721.629103 6: seq: 18, get_clock
Sent 27 1722.614098 1722.614098 6: seq: 19, get_clock
Sent 28 1723.598342 1723.598342 6: seq: 1a, get_clock
Sent 29 1724.583007 1724.583007 6: seq: 1b, get_clock
Sent 30 1725.567259 1725.567259 6: seq: 1c, get_clock
Sent 31 1726.551497 1726.551497 6: seq: 1d, get_clock
Sent 32 1727.536313 1727.536313 6: seq: 1e, get_clock
Sent 33 1728.520672 1728.520672 6: seq: 1f, get_clock
Sent 34 1729.504430 1729.504430 6: seq: 10, get_clock
Sent 35 1730.489147 1730.489147 6: seq: 11, get_clock
Sent 36 1731.473813 1731.473813 6: seq: 12, get_clock
Sent 37 1732.458399 1732.458399 6: seq: 13, get_clock
Sent 38 1733.442753 1733.442753 6: seq: 14, get_clock
Sent 39 1734.427631 1734.427631 6: seq: 15, get_clock
Sent 40 1735.411902 1735.411902 6: seq: 16, get_clock
Sent 41 1736.396147 1736.396147 6: seq: 17, get_clock
Sent 42 1737.380440 1737.380440 6: seq: 18, get_clock
Sent 43 1738.365414 1738.365414 6: seq: 19, get_clock
Sent 44 1739.349579 1739.349579 6: seq: 1a, get_clock
Sent 45 1740.333830 1740.333830 6: seq: 1b, get_clock
Sent 46 1741.318054 1741.318054 6: seq: 1c, get_clock
Sent 47 1742.302340 1742.302340 6: seq: 1d, get_clock
Sent 48 1743.286693 1743.286693 6: seq: 1e, get_clock
Sent 49 1744.271514 1744.271514 6: seq: 1f, get_clock
Sent 50 1745.256323 1745.256323 6: seq: 10, get_clock
Sent 51 1746.241327 1746.241327 6: seq: 11, get_clock
Sent 52 1747.225579 1747.225579 6: seq: 12, get_clock
Sent 53 1748.210959 1748.210959 6: seq: 13, get_clock
Sent 54 1749.195373 1749.195373 6: seq: 14, get_clock
Sent 55 1750.180335 1750.180335 6: seq: 15, get_clock
Sent 56 1751.164226 1751.164226 6: seq: 16, get_clock
Sent 57 1752.148238 1752.148238 6: seq: 17, get_clock
Sent 58 1753.132418 1753.132418 6: seq: 18, get_clock
Sent 59 1754.116670 1754.116670 6: seq: 19, get_clock
Sent 60 1755.100967 1755.100967 6: seq: 1a, get_clock
Sent 61 1756.086749 1756.086749 6: seq: 1b, get_clock
Sent 62 1757.071503 1757.071503 6: seq: 1c, get_clock
Sent 63 1758.056685 1758.056685 6: seq: 1d, get_clock
Sent 64 1759.041144 1759.041144 6: seq: 1e, get_clock
Sent 65 1760.025361 1760.025361 6: seq: 1f, get_clock
Sent 66 1761.009524 1761.009524 6: seq: 10, get_clock
Sent 67 1761.993398 1761.993398 6: seq: 11, get_clock
Sent 68 1762.977424 1762.977424 6: seq: 12, get_clock
Sent 69 1763.962230 1763.962230 6: seq: 13, get_clock
Sent 70 1764.946523 1764.946523 6: seq: 14, get_clock
Sent 71 1765.931028 1765.931028 6: seq: 15, get_clock
Sent 72 1766.915595 1766.915595 6: seq: 16, get_clock
Sent 73 1767.900300 1767.900300 6: seq: 17, get_clock
Sent 74 1768.885246 1768.885246 6: seq: 18, get_clock
Sent 75 1769.869979 1769.869979 6: seq: 19, get_clock
Sent 76 1770.854352 1770.854352 6: seq: 1a, get_clock
Sent 77 1771.838954 1771.838954 6: seq: 1b, get_clock
Sent 78 1772.823700 1772.823700 6: seq: 1c, get_clock
Sent 79 1773.808003 1773.808003 6: seq: 1d, get_clock
Sent 80 1774.792665 1774.792665 6: seq: 1e, get_clock
Sent 81 1775.777054 1775.777054 6: seq: 1f, get_clock
Sent 82 1776.761601 1776.761601 6: seq: 10, get_clock
Sent 83 1777.747310 1777.747310 6: seq: 11, get_clock
Sent 84 1778.732188 1778.732188 6: seq: 12, get_clock
Sent 85 1779.716271 1779.716271 6: seq: 13, get_clock
Sent 86 1780.701966 1780.701966 6: seq: 14, get_clock
Sent 87 1781.685731 1781.685731 6: seq: 15, get_clock
Sent 88 1782.670046 1782.670046 6: seq: 16, get_clock
Sent 89 1783.654251 1783.654251 6: seq: 17, get_clock
Sent 90 1784.639284 1784.639284 6: seq: 18, get_clock
Sent 91 1785.622768 1785.622768 6: seq: 19, get_clock
Sent 92 1786.606688 1786.606688 6: seq: 1a, get_clock
Sent 93 1787.591053 1787.591053 6: seq: 1b, get_clock
Sent 94 1788.575294 1788.575294 6: seq: 1c, get_clock
Sent 95 1789.559510 1789.559510 6: seq: 1d, get_clock
Sent 96 1790.544473 1790.544473 6: seq: 1e, get_clock
Sent 97 1791.528885 1791.528885 6: seq: 1f, get_clock
Sent 98 1792.513142 1792.513142 6: seq: 10, get_clock
Sent 99 1792.609601 1792.609601 6: seq: 11, emergency_stop
Dumping receive queue 100 messages
Receive: 0 1780.019994 1779.716271 14: seq: 14, analog_in_state oid=6 next_clock=3528961149 value=7479
Receive: 1 1780.050005 1779.716271 14: seq: 14, analog_in_state oid=9 next_clock=3530881149 value=10854
Receive: 2 1780.320014 1779.716271 14: seq: 14, analog_in_state oid=6 next_clock=3548161149 value=7475
Receive: 3 1780.350017 1779.716271 14: seq: 14, analog_in_state oid=9 next_clock=3550081149 value=10856
Receive: 4 1780.620064 1779.716271 14: seq: 14, analog_in_state oid=6 next_clock=3567361149 value=7478
Receive: 5 1780.650061 1779.716271 14: seq: 14, analog_in_state oid=9 next_clock=3569281149 value=10851
Receive: 6 1780.702251 1780.701966 11: seq: 15, clock clock=3553878620
Receive: 7 1780.920036 1780.701966 14: seq: 15, analog_in_state oid=6 next_clock=3586561149 value=7478
Receive: 8 1780.950015 1780.701966 14: seq: 15, analog_in_state oid=9 next_clock=3588481149 value=10858
Receive: 9 1781.220078 1780.701966 14: seq: 15, analog_in_state oid=6 next_clock=3605761149 value=7474
Receive: 10 1781.250001 1780.701966 14: seq: 15, analog_in_state oid=9 next_clock=3607681149 value=10849
Receive: 11 1781.520027 1780.701966 14: seq: 15, analog_in_state oid=6 next_clock=3624961149 value=7481
Receive: 12 1781.550007 1780.701966 14: seq: 15, analog_in_state oid=9 next_clock=3626881149 value=10853
Receive: 13 1781.685997 1781.685731 11: seq: 16, clock clock=3616839179
Receive: 14 1781.820015 1781.685731 14: seq: 16, analog_in_state oid=6 next_clock=3644161149 value=7478
Receive: 15 1781.849998 1781.685731 14: seq: 16, analog_in_state oid=9 next_clock=3646081149 value=10854
Receive: 16 1782.120062 1781.685731 14: seq: 16, analog_in_state oid=6 next_clock=3663361149 value=7483
Receive: 17 1782.150082 1781.685731 14: seq: 16, analog_in_state oid=9 next_clock=3665281149 value=10854
Receive: 18 1782.420049 1781.685731 14: seq: 16, analog_in_state oid=6 next_clock=3682561149 value=7485
Receive: 19 1782.450064 1781.685731 14: seq: 16, analog_in_state oid=9 next_clock=3684481149 value=10853
Receive: 20 1782.670406 1782.670046 11: seq: 17, clock clock=3679833572
Receive: 21 1782.720072 1782.670046 14: seq: 17, analog_in_state oid=6 next_clock=3701761149 value=7478
Receive: 22 1782.750064 1782.670046 14: seq: 17, analog_in_state oid=9 next_clock=3703681149 value=10858
Receive: 23 1783.020056 1782.670046 14: seq: 17, analog_in_state oid=6 next_clock=3720961149 value=7475
Receive: 24 1783.050021 1782.670046 14: seq: 17, analog_in_state oid=9 next_clock=3722881149 value=10849
Receive: 25 1783.320081 1782.670046 14: seq: 17, analog_in_state oid=6 next_clock=3740161149 value=7479
Receive: 26 1783.350036 1782.670046 14: seq: 17, analog_in_state oid=9 next_clock=3742081149 value=10851
Receive: 27 1783.620061 1782.670046 14: seq: 17, analog_in_state oid=6 next_clock=3759361149 value=7479
Receive: 28 1783.650091 1782.670046 14: seq: 17, analog_in_state oid=9 next_clock=3761281149 value=10853
Receive: 29 1783.654666 1783.654251 11: seq: 18, clock clock=3742822195
Receive: 30 1783.920071 1783.654251 14: seq: 18, analog_in_state oid=6 next_clock=3778561149 value=7479
Receive: 31 1783.950026 1783.654251 14: seq: 18, analog_in_state oid=9 next_clock=3780481149 value=10858
Receive: 32 1784.220051 1783.654251 14: seq: 18, analog_in_state oid=6 next_clock=3797761149 value=7480
Receive: 33 1784.250026 1783.654251 14: seq: 18, analog_in_state oid=9 next_clock=3799681149 value=10852
Receive: 34 1784.520080 1783.654251 14: seq: 18, analog_in_state oid=6 next_clock=3816961149 value=7476
Receive: 35 1784.550065 1783.654251 14: seq: 18, analog_in_state oid=9 next_clock=3818881149 value=10853
Receive: 36 1784.639545 1784.639284 11: seq: 19, clock clock=3805864119
Receive: 37 1784.819813 1784.639284 14: seq: 19, stats count=163 sum=152084 sumsq=785720
Receive: 38 1784.820039 1784.639284 14: seq: 19, analog_in_state oid=6 next_clock=3836161149 value=7478
Receive: 39 1784.850014 1784.639284 14: seq: 19, analog_in_state oid=9 next_clock=3838081149 value=10853
Receive: 40 1785.120085 1784.639284 14: seq: 19, analog_in_state oid=6 next_clock=3855361149 value=7481
Receive: 41 1785.150133 1784.639284 14: seq: 19, analog_in_state oid=9 next_clock=3857281149 value=10856
Receive: 42 1785.420011 1784.639284 14: seq: 19, analog_in_state oid=6 next_clock=3874561149 value=7477
Receive: 43 1785.449992 1784.639284 14: seq: 19, analog_in_state oid=9 next_clock=3876481149 value=10853
Receive: 44 1785.622940 1785.622768 11: seq: 1a, clock clock=3868804838
Receive: 45 1785.720103 1785.622768 14: seq: 1a, analog_in_state oid=6 next_clock=3893761149 value=7474
Receive: 46 1785.749993 1785.622768 14: seq: 1a, analog_in_state oid=9 next_clock=3895681149 value=10856
Receive: 47 1786.019993 1785.622768 14: seq: 1a, analog_in_state oid=6 next_clock=3912961149 value=7476
Receive: 48 1786.049990 1785.622768 14: seq: 1a, analog_in_state oid=9 next_clock=3914881149 value=10853
Receive: 49 1786.319994 1785.622768 14: seq: 1a, analog_in_state oid=6 next_clock=3932161149 value=7476
Receive: 50 1786.349984 1785.622768 14: seq: 1a, analog_in_state oid=9 next_clock=3934081149 value=10856
Receive: 51 1786.606860 1786.606688 11: seq: 1b, clock clock=3931775311
Receive: 52 1786.620001 1786.606688 14: seq: 1b, analog_in_state oid=6 next_clock=3951361149 value=7476
Receive: 53 1786.650032 1786.606688 14: seq: 1b, analog_in_state oid=9 next_clock=3953281149 value=10852
Receive: 54 1786.920005 1786.606688 14: seq: 1b, analog_in_state oid=6 next_clock=3970561149 value=7478
Receive: 55 1786.949981 1786.606688 14: seq: 1b, analog_in_state oid=9 next_clock=3972481149 value=10852
Receive: 56 1787.220008 1786.606688 14: seq: 1b, analog_in_state oid=6 next_clock=3989761149 value=7479
Receive: 57 1787.249995 1786.606688 14: seq: 1b, analog_in_state oid=9 next_clock=3991681149 value=10854
Receive: 58 1787.520008 1786.606688 14: seq: 1b, analog_in_state oid=6 next_clock=4008961149 value=7480
Receive: 59 1787.549996 1786.606688 14: seq: 1b, analog_in_state oid=9 next_clock=4010881149 value=10855
Receive: 60 1787.591240 1787.591053 11: seq: 1c, clock clock=3994773640
Receive: 61 1787.820013 1787.591053 14: seq: 1c, analog_in_state oid=6 next_clock=4028161149 value=7477
Receive: 62 1787.849995 1787.591053 14: seq: 1c, analog_in_state oid=9 next_clock=4030081149 value=10857
Receive: 63 1788.120021 1787.591053 14: seq: 1c, analog_in_state oid=6 next_clock=4047361149 value=7478
Receive: 64 1788.150056 1787.591053 14: seq: 1c, analog_in_state oid=9 next_clock=4049281149 value=10852
Receive: 65 1788.420015 1787.591053 14: seq: 1c, analog_in_state oid=6 next_clock=4066561149 value=7483
Receive: 66 1788.450028 1787.591053 14: seq: 1c, analog_in_state oid=9 next_clock=4068481149 value=10852
Receive: 67 1788.575459 1788.575294 11: seq: 1d, clock clock=4057764944
Receive: 68 1788.720072 1788.575294 14: seq: 1d, analog_in_state oid=6 next_clock=4085761149 value=7478
Receive: 69 1788.750022 1788.575294 14: seq: 1d, analog_in_state oid=9 next_clock=4087681149 value=10855
Receive: 70 1789.020010 1788.575294 14: seq: 1d, analog_in_state oid=6 next_clock=4104961149 value=7477
Receive: 71 1789.049994 1788.575294 14: seq: 1d, analog_in_state oid=9 next_clock=4106881149 value=10854
Receive: 72 1789.320042 1788.575294 14: seq: 1d, analog_in_state oid=6 next_clock=4124161149 value=7479
Receive: 73 1789.350030 1788.575294 14: seq: 1d, analog_in_state oid=9 next_clock=4126081149 value=10853
Receive: 74 1789.559700 1789.559510 11: seq: 1e, clock clock=4120754182
Receive: 75 1789.620077 1789.559510 14: seq: 1e, analog_in_state oid=6 next_clock=4143361149 value=7480
Receive: 76 1789.650126 1789.559510 14: seq: 1e, analog_in_state oid=9 next_clock=4145281149 value=10856
Receive: 77 1789.919758 1789.559510 14: seq: 1e, stats count=170 sum=159100 sumsq=824189
Receive: 78 1789.919996 1789.559510 14: seq: 1e, analog_in_state oid=6 next_clock=4162561149 value=7478
Receive: 79 1789.950009 1789.559510 14: seq: 1e, analog_in_state oid=9 next_clock=4164481149 value=10855
Receive: 80 1790.220175 1789.559510 14: seq: 1e, analog_in_state oid=6 next_clock=4181761149 value=7477
Receive: 81 1790.250084 1789.559510 14: seq: 1e, analog_in_state oid=9 next_clock=4183681149 value=10855
Receive: 82 1790.520095 1789.559510 14: seq: 1e, analog_in_state oid=6 next_clock=4200961149 value=7479
Receive: 83 1790.544719 1790.544473 11: seq: 1f, clock clock=4183792067
Receive: 84 1790.550090 1790.544473 14: seq: 1f, analog_in_state oid=9 next_clock=4202881149 value=10856
Receive: 85 1790.820095 1790.544473 14: seq: 1f, analog_in_state oid=6 next_clock=4220161149 value=7477
Receive: 86 1790.850064 1790.544473 14: seq: 1f, analog_in_state oid=9 next_clock=4222081149 value=10857
Receive: 87 1791.120147 1790.544473 13: seq: 1f, analog_in_state oid=6 next_clock=4239361149 value=7481
Receive: 88 1791.150158 1790.544473 13: seq: 1f, analog_in_state oid=9 next_clock=4241281149 value=10854
Receive: 89 1791.420215 1790.544473 13: seq: 1f, analog_in_state oid=6 next_clock=4258561149 value=7480
Receive: 90 1791.450136 1790.544473 13: seq: 1f, analog_in_state oid=9 next_clock=4260481149 value=10852
Receive: 91 1791.529129 1791.528885 10: seq: 10, clock clock=4246794195
Receive: 92 1791.722161 1791.528885 13: seq: 10, analog_in_state oid=6 next_clock=4277761149 value=7483
Receive: 93 1791.750127 1791.528885 13: seq: 10, analog_in_state oid=9 next_clock=4279681149 value=10854
Receive: 94 1792.020104 1791.528885 13: seq: 10, analog_in_state oid=6 next_clock=1993853 value=7480
Receive: 95 1792.050123 1791.528885 13: seq: 10, analog_in_state oid=9 next_clock=3913853 value=10854
Receive: 96 1792.320117 1791.528885 13: seq: 10, analog_in_state oid=6 next_clock=21193853 value=7480
Receive: 97 1792.350106 1791.528885 13: seq: 10, analog_in_state oid=9 next_clock=23113853 value=10857
Receive: 98 1792.513369 1792.513142 10: seq: 11, clock clock=14818807
Receive: 99 1792.610076 1792.609601 11: seq: 12, shutdown clock=20993166 static_string_id=Command request
Reactor garbage collection: (1787.640351416, 1745.093191422, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
Requested toolhead position at shutdown time 468.753086: (200.0, 200.0, 200.0)
MCU 'beacon' shutdown: Emergency stop
clocksync state: mcu_freq=32000000 last_clock=15037143332 clock_est=(1763.964 14123550204 31999763.650) min_half_rtt=0.000176 min_rtt_time=1461.723 time_avg=1763.963(843.236) clock_avg=14123550204.948(26983343924.774) pred_variance=2112090.595 clock_adj=(-1.250 31999658.000)
Dumping serial stats: bytes_write=3187 bytes_read=166050 bytes_retransmit=0 bytes_invalid=0 send_seq=531 receive_seq=531 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 1697.018762 1697.018762 6: seq: 1f, get_clock
Sent 1 1698.003257 1698.003257 6: seq: 10, get_clock
Sent 2 1698.986878 1698.986878 6: seq: 11, get_clock
Sent 3 1699.971367 1699.971367 6: seq: 12, get_clock
Sent 4 1700.955802 1700.955802 6: seq: 13, get_clock
Sent 5 1701.940167 1701.940167 6: seq: 14, get_clock
Sent 6 1702.924357 1702.924357 6: seq: 15, get_clock
Sent 7 1703.910197 1703.910197 6: seq: 16, get_clock
Sent 8 1704.895080 1704.895080 6: seq: 17, get_clock
Sent 9 1705.879217 1705.879217 6: seq: 18, get_clock
Sent 10 1706.863816 1706.863816 6: seq: 19, get_clock
Sent 11 1707.847689 1707.847689 6: seq: 1a, get_clock
Sent 12 1708.831888 1708.831888 6: seq: 1b, get_clock
Sent 13 1709.815985 1709.815985 6: seq: 1c, get_clock
Sent 14 1710.800284 1710.800284 6: seq: 1d, get_clock
Sent 15 1711.784854 1711.784854 6: seq: 1e, get_clock
Sent 16 1712.769696 1712.769696 6: seq: 1f, get_clock
Sent 17 1713.753476 1713.753476 6: seq: 10, get_clock
Sent 18 1714.737739 1714.737739 6: seq: 11, get_clock
Sent 19 1715.722170 1715.722170 6: seq: 12, get_clock
Sent 20 1716.706694 1716.706694 6: seq: 13, get_clock
Sent 21 1717.690763 1717.690763 6: seq: 14, get_clock
Sent 22 1718.675691 1718.675691 6: seq: 15, get_clock
Sent 23 1719.659903 1719.659903 6: seq: 16, get_clock
Sent 24 1720.644093 1720.644093 6: seq: 17, get_clock
Sent 25 1721.629593 1721.629593 6: seq: 18, get_clock
Sent 26 1722.614485 1722.614485 6: seq: 19, get_clock
Sent 27 1723.598923 1723.598923 6: seq: 1a, get_clock
Sent 28 1724.583282 1724.583282 6: seq: 1b, get_clock
Sent 29 1725.567489 1725.567489 6: seq: 1c, get_clock
Sent 30 1726.552220 1726.552220 6: seq: 1d, get_clock
Sent 31 1727.536374 1727.536374 6: seq: 1e, get_clock
Sent 32 1728.520715 1728.520715 6: seq: 1f, get_clock
Sent 33 1729.504924 1729.504924 6: seq: 10, get_clock
Sent 34 1730.489394 1730.489394 6: seq: 11, get_clock
Sent 35 1731.474071 1731.474071 6: seq: 12, get_clock
Sent 36 1732.458653 1732.458653 6: seq: 13, get_clock
Sent 37 1733.442853 1733.442853 6: seq: 14, get_clock
Sent 38 1734.427976 1734.427976 6: seq: 15, get_clock
Sent 39 1735.412160 1735.412160 6: seq: 16, get_clock
Sent 40 1736.396243 1736.396243 6: seq: 17, get_clock
Sent 41 1737.380538 1737.380538 6: seq: 18, get_clock
Sent 42 1738.366107 1738.366107 6: seq: 19, get_clock
Sent 43 1739.350312 1739.350312 6: seq: 1a, get_clock
Sent 44 1740.334467 1740.334467 6: seq: 1b, get_clock
Sent 45 1741.318244 1741.318244 6: seq: 1c, get_clock
Sent 46 1742.302528 1742.302528 6: seq: 1d, get_clock
Sent 47 1743.286942 1743.286942 6: seq: 1e, get_clock
Sent 48 1744.271754 1744.271754 6: seq: 1f, get_clock
Sent 49 1745.256553 1745.256553 6: seq: 10, get_clock
Sent 50 1746.242102 1746.242102 6: seq: 11, get_clock
Sent 51 1747.226409 1747.226409 6: seq: 12, get_clock
Sent 52 1748.211533 1748.211533 6: seq: 13, get_clock
Sent 53 1749.195896 1749.195896 6: seq: 14, get_clock
Sent 54 1750.180878 1750.180878 6: seq: 15, get_clock
Sent 55 1751.164191 1751.164191 6: seq: 16, get_clock
Sent 56 1752.148262 1752.148262 6: seq: 17, get_clock
Sent 57 1753.132439 1753.132439 6: seq: 18, get_clock
Sent 58 1754.116762 1754.116762 6: seq: 19, get_clock
Sent 59 1755.101321 1755.101321 6: seq: 1a, get_clock
Sent 60 1756.086975 1756.086975 6: seq: 1b, get_clock
Sent 61 1757.072084 1757.072084 6: seq: 1c, get_clock
Sent 62 1758.057422 1758.057422 6: seq: 1d, get_clock
Sent 63 1759.041363 1759.041363 6: seq: 1e, get_clock
Sent 64 1760.025579 1760.025579 6: seq: 1f, get_clock
Sent 65 1761.009743 1761.009743 6: seq: 10, get_clock
Sent 66 1761.993611 1761.993611 6: seq: 11, get_clock
Sent 67 1762.977650 1762.977650 6: seq: 12, get_clock
Sent 68 1763.962875 1763.962875 6: seq: 13, get_clock
Sent 69 1764.947168 1764.947168 6: seq: 14, get_clock
Sent 70 1765.931574 1765.931574 6: seq: 15, get_clock
Sent 71 1766.915601 1766.915601 6: seq: 16, get_clock
Sent 72 1767.900301 1767.900301 6: seq: 17, get_clock
Sent 73 1768.885358 1768.885358 6: seq: 18, get_clock
Sent 74 1769.869999 1769.869999 6: seq: 19, get_clock
Sent 75 1770.854366 1770.854366 6: seq: 1a, get_clock
Sent 76 1771.839051 1771.839051 6: seq: 1b, get_clock
Sent 77 1772.823892 1772.823892 6: seq: 1c, get_clock
Sent 78 1773.808195 1773.808195 6: seq: 1d, get_clock
Sent 79 1774.792865 1774.792865 6: seq: 1e, get_clock
Sent 80 1775.777188 1775.777188 6: seq: 1f, get_clock
Sent 81 1776.761789 1776.761789 6: seq: 10, get_clock
Sent 82 1777.747838 1777.747838 6: seq: 11, get_clock
Sent 83 1778.732621 1778.732621 6: seq: 12, get_clock
Sent 84 1779.716465 1779.716465 6: seq: 13, get_clock
Sent 85 1780.702604 1780.702604 6: seq: 14, get_clock
Sent 86 1781.686418 1781.686418 6: seq: 15, get_clock
Sent 87 1782.670236 1782.670236 6: seq: 16, get_clock
Sent 88 1783.654513 1783.654513 6: seq: 17, get_clock
Sent 89 1784.639919 1784.639919 6: seq: 18, get_clock
Sent 90 1785.622976 1785.622976 6: seq: 19, get_clock
Sent 91 1786.606943 1786.606943 6: seq: 1a, get_clock
Sent 92 1787.591248 1787.591248 6: seq: 1b, get_clock
Sent 93 1788.575564 1788.575564 6: seq: 1c, get_clock
Sent 94 1789.559712 1789.559712 6: seq: 1d, get_clock
Sent 95 1790.545129 1790.545129 6: seq: 1e, get_clock
Sent 96 1791.529289 1791.529289 6: seq: 1f, get_clock
Sent 97 1792.513473 1792.513473 6: seq: 10, get_clock
Sent 98 1792.626622 1792.626622 6: seq: 11, emergency_stop
Sent 99 1792.632068 1792.632068 7: seq: 12, beacon_stream en=0
Dumping receive queue 100 messages
Receive: 0 1787.974470 1787.591248 16: seq: 1c, beacon_status mcu_temp=44508 supply_voltage=48784 coil_temp=54912 status=1
Receive: 1 1788.002362 1787.591248 18: seq: 1c, beacon_data samples=1 start_clock=2007843518 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 2 1788.074656 1787.591248 16: seq: 1c, beacon_status mcu_temp=44508 supply_voltage=48784 coil_temp=54912 status=1
Receive: 3 1788.102466 1787.591248 18: seq: 1c, beacon_data samples=1 start_clock=2011044297 delta_clock=0 data=b'\x82\x8en)'
Receive: 4 1788.174878 1787.591248 16: seq: 1c, beacon_status mcu_temp=44508 supply_voltage=48784 coil_temp=54912 status=1
Receive: 5 1788.202444 1787.591248 18: seq: 1c, beacon_data samples=1 start_clock=2014245079 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 6 1788.275006 1787.591248 16: seq: 1c, beacon_status mcu_temp=44508 supply_voltage=48784 coil_temp=54912 status=1
Receive: 7 1788.302443 1787.591248 18: seq: 1c, beacon_data samples=1 start_clock=2017445863 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 8 1788.375208 1787.591248 16: seq: 1c, beacon_status mcu_temp=44507 supply_voltage=48784 coil_temp=54912 status=1
Receive: 9 1788.402524 1787.591248 18: seq: 1c, beacon_data samples=1 start_clock=2020646645 delta_clock=0 data=b'\x82\x8en)'
Receive: 10 1788.475392 1787.591248 16: seq: 1c, beacon_status mcu_temp=44507 supply_voltage=48784 coil_temp=54912 status=1
Receive: 11 1788.502493 1787.591248 18: seq: 1c, beacon_data samples=1 start_clock=2023847427 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 12 1788.575605 1787.591248 16: seq: 1c, beacon_status mcu_temp=44507 supply_voltage=48784 coil_temp=54912 status=1
Receive: 13 1788.575957 1788.575564 11: seq: 1d, clock clock=2026228792
Receive: 14 1788.602516 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2027048213 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 15 1788.675811 1788.575564 16: seq: 1d, beacon_status mcu_temp=44507 supply_voltage=48784 coil_temp=54912 status=1
Receive: 16 1788.702568 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2030248998 delta_clock=0 data=b'\x82\x8en)'
Receive: 17 1788.775958 1788.575564 16: seq: 1d, beacon_status mcu_temp=44507 supply_voltage=48784 coil_temp=54912 status=1
Receive: 18 1788.802575 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2033449793 delta_clock=0 data=b'\x82\x8en)'
Receive: 19 1788.876150 1788.575564 16: seq: 1d, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 20 1788.902652 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2036650575 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 21 1788.976358 1788.575564 16: seq: 1d, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 22 1789.002625 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2039851359 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 23 1789.076653 1788.575564 16: seq: 1d, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 24 1789.102638 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2043052138 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 25 1789.176782 1788.575564 16: seq: 1d, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 26 1789.202673 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2046252925 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 27 1789.276945 1788.575564 16: seq: 1d, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 28 1789.302703 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2049453708 delta_clock=0 data=b'\x82\x8en)'
Receive: 29 1789.377174 1788.575564 16: seq: 1d, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 30 1789.402772 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2052654484 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 31 1789.477305 1788.575564 16: seq: 1d, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 32 1789.502739 1788.575564 18: seq: 1d, beacon_data samples=1 start_clock=2055855264 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 33 1789.560084 1789.559712 11: seq: 1e, clock clock=2057721193
Receive: 34 1789.577491 1789.559712 16: seq: 1e, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 35 1789.602762 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2059056053 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 36 1789.677715 1789.559712 16: seq: 1e, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 37 1789.702802 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2062256841 delta_clock=0 data=b'\x82\x8en)'
Receive: 38 1789.777911 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 39 1789.802829 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2065457618 delta_clock=0 data=b'\x82\x8en)'
Receive: 40 1789.878140 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 41 1789.902901 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2068658413 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 42 1789.978253 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 43 1790.002868 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2071859196 delta_clock=0 data=b'\x82\x8en)'
Receive: 44 1790.078526 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 45 1790.102967 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2075059977 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 46 1790.178788 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 47 1790.203016 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2078260756 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 48 1790.278909 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 49 1790.303008 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2081461535 delta_clock=0 data=b'\x82\x8en)'
Receive: 50 1790.379124 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 51 1790.403277 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2084662311 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 52 1790.479306 1789.559712 16: seq: 1e, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 53 1790.503055 1789.559712 18: seq: 1e, beacon_data samples=1 start_clock=2087863089 delta_clock=0 data=b'\x82\x8en)'
Receive: 54 1790.545600 1790.545129 11: seq: 1f, clock clock=2089254899
Receive: 55 1790.579473 1790.545129 16: seq: 1f, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 56 1790.603097 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2091063875 delta_clock=0 data=b'\x82\x8en)'
Receive: 57 1790.679699 1790.545129 16: seq: 1f, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 58 1790.703144 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2094264652 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 59 1790.779925 1790.545129 16: seq: 1f, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 60 1790.803146 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2097465434 delta_clock=0 data=b'\x82\x8en)'
Receive: 61 1790.880071 1790.545129 16: seq: 1f, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54911 status=1
Receive: 62 1790.903229 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2100666219 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 63 1790.980394 1790.545129 16: seq: 1f, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 64 1791.003195 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2103867002 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 65 1791.080651 1790.545129 16: seq: 1f, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 66 1791.103223 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2107067782 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 67 1791.180788 1790.545129 16: seq: 1f, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 68 1791.203241 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2110268560 delta_clock=0 data=b'\x82\x8en)'
Receive: 69 1791.280896 1790.545129 16: seq: 1f, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 70 1791.303267 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2113469353 delta_clock=0 data=b'\x82\x8en)'
Receive: 71 1791.381069 1790.545129 16: seq: 1f, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 72 1791.403347 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2116670128 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 73 1791.481339 1790.545129 16: seq: 1f, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 74 1791.503302 1790.545129 18: seq: 1f, beacon_data samples=1 start_clock=2119870904 delta_clock=0 data=b'\x82\x8en)'
Receive: 75 1791.529747 1791.529289 11: seq: 10, clock clock=2120747786
Receive: 76 1791.581514 1791.529289 16: seq: 10, beacon_status mcu_temp=44509 supply_voltage=48785 coil_temp=54912 status=1
Receive: 77 1791.603330 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2123071683 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 78 1791.681762 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 79 1791.703392 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2126272470 delta_clock=0 data=b'\x82\x8en)'
Receive: 80 1791.781791 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 81 1791.803388 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2129473250 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 82 1791.882037 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 83 1791.903468 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2132674032 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 84 1791.982344 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 85 1792.003507 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2135874820 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 86 1792.082505 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 87 1792.103532 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2139075599 delta_clock=0 data=b'\x82\x8en)'
Receive: 88 1792.182686 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 89 1792.203537 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2142276381 delta_clock=0 data=b'\x82\x8en)'
Receive: 90 1792.282840 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 91 1792.303561 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2145477166 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 92 1792.382952 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 93 1792.403602 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2148677954 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 94 1792.483138 1791.529289 16: seq: 10, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 95 1792.503578 1791.529289 18: seq: 10, beacon_data samples=1 start_clock=2151878745 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 96 1792.513926 1792.513473 11: seq: 11, clock clock=2152241444
Receive: 97 1792.583306 1792.513473 16: seq: 11, beacon_status mcu_temp=44508 supply_voltage=48785 coil_temp=54912 status=1
Receive: 98 1792.603648 1792.513473 18: seq: 11, beacon_data samples=1 start_clock=2155079529 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 99 1792.627171 1792.626622 12: seq: 12, shutdown clock=2155863324 static_string_id=Emergency stop
Stats 1793.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7340 bytes_read=61220 bytes_retransmit=9 bytes_invalid=0 send_seq=796 receive_seq=796 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000479 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=3666 bytes_read=13366 bytes_retransmit=0 bytes_invalid=0 send_seq=585 receive_seq=585 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999471 adj=49999361 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4278 bytes_read=56703 bytes_retransmit=9 bytes_invalid=0 send_seq=626 receive_seq=626 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999259 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3187 bytes_read=166186 bytes_retransmit=0 bytes_invalid=0 send_seq=531 receive_seq=531 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999658 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.19 cputime=90.914 memavail=3401064 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1794.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7400 bytes_read=61374 bytes_retransmit=9 bytes_invalid=0 send_seq=800 receive_seq=800 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000487 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=3672 bytes_read=13382 bytes_retransmit=0 bytes_invalid=0 send_seq=586 receive_seq=586 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999475 adj=49999382 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=4284 bytes_read=56796 bytes_retransmit=9 bytes_invalid=0 send_seq=627 receive_seq=627 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999258 Octopus_V1.1_F446: temp=27.5 EBB42_v1.2_T0: temp=29.3 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3193 bytes_read=166542 bytes_retransmit=0 bytes_invalid=0 send_seq=532 receive_seq=532 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999763 adj=31999656 coil_temp=22.9 refs=0 mcu_temp=23.31 supply_voltage=2.978 sysload=0.19 cputime=90.965 memavail=3401064 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1795.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7444 bytes_read=61501 bytes_retransmit=9 bytes_invalid=0 send_seq=803 receive_seq=803 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000489 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=3678 bytes_read=13398 bytes_retransmit=0 bytes_invalid=0 send_seq=587 receive_seq=587 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999477 adj=49999401 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=4290 bytes_read=56929 bytes_retransmit=9 bytes_invalid=0 send_seq=628 receive_seq=628 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999438 adj=63999215 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.2 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3199 bytes_read=166898 bytes_retransmit=0 bytes_invalid=0 send_seq=533 receive_seq=533 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999638 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.19 cputime=91.019 memavail=3401064 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1796.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=7488 bytes_read=61657 bytes_retransmit=9 bytes_invalid=0 send_seq=806 receive_seq=806 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000490 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=3684 bytes_read=13414 bytes_retransmit=0 bytes_invalid=0 send_seq=588 receive_seq=588 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999477 adj=49999404 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=4296 bytes_read=57029 bytes_retransmit=9 bytes_invalid=0 send_seq=629 receive_seq=629 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999451 adj=63999219 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=29.1 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3205 bytes_read=167254 bytes_retransmit=0 bytes_invalid=0 send_seq=534 receive_seq=534 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999679 coil_temp=22.9 refs=0 mcu_temp=23.30 supply_voltage=2.978 sysload=0.19 cputime=91.071 memavail=3401064 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1797.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=7532 bytes_read=61799 bytes_retransmit=9 bytes_invalid=0 send_seq=809 receive_seq=809 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000494 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=3690 bytes_read=13430 bytes_retransmit=0 bytes_invalid=0 send_seq=589 receive_seq=589 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999479 adj=49999391 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=4302 bytes_read=57129 bytes_retransmit=9 bytes_invalid=0 send_seq=630 receive_seq=630 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999450 adj=63999417 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.1 raspberry_pi: temp=45.8 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3211 bytes_read=167610 bytes_retransmit=0 bytes_invalid=0 send_seq=535 receive_seq=535 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999765 adj=31999674 coil_temp=22.9 refs=0 mcu_temp=23.26 supply_voltage=2.978 sysload=0.18 cputime=91.123 memavail=3401064 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1798.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=7576 bytes_read=61926 bytes_retransmit=9 bytes_invalid=0 send_seq=812 receive_seq=812 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000496 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 bytes_write=3696 bytes_read=13459 bytes_retransmit=0 bytes_invalid=0 send_seq=590 receive_seq=590 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999478 adj=49999385 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=4308 bytes_read=57257 bytes_retransmit=9 bytes_invalid=0 send_seq=631 receive_seq=631 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999450 adj=63999353 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=29.1 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3217 bytes_read=167966 bytes_retransmit=0 bytes_invalid=0 send_seq=536 receive_seq=536 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999665 coil_temp=22.9 refs=0 mcu_temp=23.22 supply_voltage=2.978 sysload=0.18 cputime=91.176 memavail=3401080 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1799.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=7620 bytes_read=62067 bytes_retransmit=9 bytes_invalid=0 send_seq=815 receive_seq=815 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000503 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 bytes_write=3702 bytes_read=13475 bytes_retransmit=0 bytes_invalid=0 send_seq=591 receive_seq=591 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999479 adj=49999364 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=4314 bytes_read=57357 bytes_retransmit=9 bytes_invalid=0 send_seq=632 receive_seq=632 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999449 adj=63999319 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.9 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3223 bytes_read=168322 bytes_retransmit=0 bytes_invalid=0 send_seq=537 receive_seq=537 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999667 coil_temp=22.9 refs=0 mcu_temp=23.17 supply_voltage=2.978 sysload=0.18 cputime=91.228 memavail=3401080 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1800.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=7664 bytes_read=62209 bytes_retransmit=9 bytes_invalid=0 send_seq=818 receive_seq=818 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000501 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 bytes_write=3708 bytes_read=13491 bytes_retransmit=0 bytes_invalid=0 send_seq=592 receive_seq=592 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999478 adj=49999335 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=4320 bytes_read=57457 bytes_retransmit=9 bytes_invalid=0 send_seq=633 receive_seq=633 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999449 adj=63999256 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=29.0 raspberry_pi: temp=46.3 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3229 bytes_read=168678 bytes_retransmit=0 bytes_invalid=0 send_seq=538 receive_seq=538 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999657 coil_temp=22.8 refs=0 mcu_temp=23.13 supply_voltage=2.978 sysload=0.18 cputime=91.278 memavail=3400848 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1801.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7708 bytes_read=62346 bytes_retransmit=9 bytes_invalid=0 send_seq=821 receive_seq=821 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000502 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 bytes_write=3714 bytes_read=13507 bytes_retransmit=0 bytes_invalid=0 send_seq=593 receive_seq=593 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999478 adj=49999335 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4326 bytes_read=57599 bytes_retransmit=9 bytes_invalid=0 send_seq=634 receive_seq=634 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999448 adj=63999262 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3235 bytes_read=169034 bytes_retransmit=0 bytes_invalid=0 send_seq=539 receive_seq=539 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999670 coil_temp=22.8 refs=0 mcu_temp=23.04 supply_voltage=2.978 sysload=0.18 cputime=91.332 memavail=3400848 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 1802.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7752 bytes_read=62480 bytes_retransmit=9 bytes_invalid=0 send_seq=824 receive_seq=824 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000499 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 bytes_write=3720 bytes_read=13523 bytes_retransmit=0 bytes_invalid=0 send_seq=594 receive_seq=594 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999478 adj=49999325 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4332 bytes_read=57699 bytes_retransmit=9 bytes_invalid=0 send_seq=635 receive_seq=635 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999447 adj=63999252 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3241 bytes_read=169390 bytes_retransmit=0 bytes_invalid=0 send_seq=540 receive_seq=540 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999675 coil_temp=22.8 refs=0 mcu_temp=22.97 supply_voltage=2.977 sysload=0.16 cputime=91.382 memavail=3400848 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 1803.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7796 bytes_read=62622 bytes_retransmit=9 bytes_invalid=0 send_seq=827 receive_seq=827 retransmit_seq=2 srtt=0.001 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000494 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000024 bytes_write=3726 bytes_read=13552 bytes_retransmit=0 bytes_invalid=0 send_seq=595 receive_seq=595 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999474 adj=49999338 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4338 bytes_read=57799 bytes_retransmit=9 bytes_invalid=0 send_seq=636 receive_seq=636 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999446 adj=63999254 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=28.9 raspberry_pi: temp=46.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3247 bytes_read=169746 bytes_retransmit=0 bytes_invalid=0 send_seq=541 receive_seq=541 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999766 adj=31999683 coil_temp=22.8 refs=0 mcu_temp=22.90 supply_voltage=2.977 sysload=0.16 cputime=91.418 memavail=3402736 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 1804.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=7840 bytes_read=62749 bytes_retransmit=9 bytes_invalid=0 send_seq=830 receive_seq=830 retransmit_seq=2 srtt=0.000 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000490 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000024 bytes_write=3732 bytes_read=13568 bytes_retransmit=0 bytes_invalid=0 send_seq=596 receive_seq=596 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=49999471 adj=49999299 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=4344 bytes_read=57927 bytes_retransmit=9 bytes_invalid=0 send_seq=637 receive_seq=637 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999445 adj=63999273 Octopus_V1.1_F446: temp=27.4 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=3253 bytes_read=170102 bytes_retransmit=0 bytes_invalid=0 send_seq=542 receive_seq=542 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999767 adj=31999686 coil_temp=22.8 refs=0 mcu_temp=22.85 supply_voltage=2.977 sysload=0.16 cputime=91.442 memavail=3402736 print_time=469.098 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 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 4124411552: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:32:55 2025 (1751045575.5 1805.4)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4124252624: New connection
webhooks client 4124252624: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 1813.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3630 bytes_read=7567 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=180002621 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=49999474 adj=49995643 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5028 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=63999119 adj=64000778 Octopus_V1.1_F446: temp=28.6 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=360 bytes_read=2054 bytes_retransmit=9 bytes_invalid=0 send_seq=60 receive_seq=60 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32001719 adj=32000897 coil_temp=22.7 refs=0 mcu_temp=22.35 supply_voltage=2.977 sysload=0.21 cputime=96.237 memavail=3400752 print_time=7.533 buffer_time=0.248 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4124252624
webhooks: registering remote method 'reboot_machine' for connection id: 4124252624
webhooks: registering remote method 'pause_job_queue' for connection id: 4124252624
webhooks: registering remote method 'start_job_queue' for connection id: 4124252624
Stats 1814.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3636 bytes_read=7670 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=180001344 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=50000953 adj=50000633 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1464 bytes_read=5142 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=63999347 adj=63996348 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.5 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=366 bytes_read=2410 bytes_retransmit=9 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000331 adj=32001045 coil_temp=22.7 refs=0 mcu_temp=22.33 supply_voltage=2.977 sysload=0.21 cputime=96.316 memavail=3401788 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 1815.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3642 bytes_read=7831 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=1 freq=180001608 rpi: mcu_awake=0.003 mcu_task_avg=0.000023 mcu_task_stddev=0.000012 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=50000278 adj=50003752 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1470 bytes_read=5327 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=1 freq=63999690 adj=63997995 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2970 bytes_retransmit=9 bytes_invalid=0 send_seq=63 receive_seq=62 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000143 adj=31999361 coil_temp=22.7 refs=0 mcu_temp=22.28 supply_voltage=2.977 sysload=0.21 cputime=96.418 memavail=3401336 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1816.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3654 bytes_read=7994 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=180000812 rpi: mcu_awake=0.003 mcu_task_avg=0.000023 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=49999814 adj=50001131 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1482 bytes_read=5443 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=63999583 adj=63999428 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3342 bytes_retransmit=9 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999991 adj=31999483 coil_temp=22.7 refs=0 mcu_temp=22.25 supply_voltage=2.977 sysload=0.20 cputime=96.444 memavail=3401352 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 1817.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3660 bytes_read=8097 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=180000884 rpi: mcu_awake=0.003 mcu_task_avg=0.000023 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=49999545 adj=49999892 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1488 bytes_read=5557 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=63999608 adj=63999250 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=49.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3698 bytes_retransmit=9 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999932 adj=31999300 coil_temp=22.7 refs=0 mcu_temp=22.24 supply_voltage=2.977 sysload=0.20 cputime=96.472 memavail=3401100 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 1818.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3666 bytes_read=8200 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=180000953 rpi: mcu_awake=0.003 mcu_task_avg=0.000023 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=49999599 adj=49999025 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1494 bytes_read=5671 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=63999623 adj=63999255 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4054 bytes_retransmit=9 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999934 adj=31999258 coil_temp=22.7 refs=0 mcu_temp=22.23 supply_voltage=2.977 sysload=0.20 cputime=96.522 memavail=3399636 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 1819.6: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3672 bytes_read=8332 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=180000971 rpi: mcu_awake=0.003 mcu_task_avg=0.000023 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=49999617 adj=49999194 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=5785 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=63999580 adj=63999231 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=28.8 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4410 bytes_retransmit=9 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999927 adj=31999355 coil_temp=22.7 refs=0 mcu_temp=22.23 supply_voltage=2.977 sysload=0.20 cputime=96.573 memavail=3397368 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 1820.6: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3678 bytes_read=8435 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=180000877 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999566 adj=49999270 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=5899 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=63999553 adj=63999094 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=28.9 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4766 bytes_retransmit=9 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999876 adj=31999428 coil_temp=22.7 refs=0 mcu_temp=22.22 supply_voltage=2.977 sysload=0.20 cputime=96.600 memavail=3401784 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
webhooks client 4124252624: Disconnected
Stats 1821.6: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3684 bytes_read=8552 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=180000948 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999515 adj=49999208 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=6013 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=63999553 adj=63999158 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.6 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5122 bytes_retransmit=9 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999868 adj=31999408 coil_temp=22.7 refs=0 mcu_temp=22.21 supply_voltage=2.977 sysload=0.26 cputime=96.628 memavail=3506644 print_time=7.533 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 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-396-gb7233d119-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/ratos.py, klippy/extras/ratos_homing.py, klippy/extras/resonance_generator.py, klippy/extras/z_offset_probe.py, klippy/kinematics/ratos_hybrid_corexy.py
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Mar 20 2025, 22:21:41) \n[GCC 10.2.1 20210110]'
Start printer at Fri Jun 27 18:33:32 2025 (1751045612.7 24.2)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4100187856: New connection
webhooks client 4100187856: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 33.9: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3660 bytes_read=7568 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=179995140 rpi: mcu_awake=0.004 mcu_task_avg=0.000029 mcu_task_stddev=0.000016 bytes_write=846 bytes_read=4735 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=50000289 adj=50012183 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1448 bytes_read=5018 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=63995937 adj=63995670 Octopus_V1.1_F446: temp=0.0 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=40.9 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=358 bytes_read=2099 bytes_retransmit=9 bytes_invalid=0 send_seq=61 receive_seq=61 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=32000151 adj=32000852 coil_temp=22.0 refs=0 mcu_temp=21.01 supply_voltage=2.978 sysload=2.20 cputime=6.695 memavail=3401100 print_time=41.404 buffer_time=0.248 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4100187856
webhooks: registering remote method 'reboot_machine' for connection id: 4100187856
webhooks: registering remote method 'pause_job_queue' for connection id: 4100187856
webhooks: registering remote method 'start_job_queue' for connection id: 4100187856
Stats 34.9: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3666 bytes_read=7700 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=179997281 rpi: mcu_awake=0.004 mcu_task_avg=0.000029 mcu_task_stddev=0.000016 bytes_write=852 bytes_read=4751 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=50000362 adj=49993091 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1454 bytes_read=5118 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=63997589 adj=63998229 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=26.6 raspberry_pi: temp=40.9 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=364 bytes_read=2455 bytes_retransmit=9 bytes_invalid=0 send_seq=62 receive_seq=62 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999541 adj=32000787 coil_temp=22.0 refs=0 mcu_temp=21.03 supply_voltage=2.977 sysload=2.20 cputime=6.784 memavail=3397464 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 40.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3678 bytes_read=8237 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=179999391 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=864 bytes_read=4796 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=50000130 adj=49993639 toolboard_t0: mcu_awake=0.014 mcu_task_avg=0.000021 mcu_task_stddev=0.000025 bytes_write=1466 bytes_read=5669 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=63998954 adj=63999441 Octopus_V1.1_F446: temp=25.3 EBB42_v1.2_T0: temp=26.5 raspberry_pi: temp=40.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=376 bytes_read=4289 bytes_retransmit=9 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999690 adj=31999098 coil_temp=22.0 refs=0 mcu_temp=21.13 supply_voltage=2.978 sysload=2.17 cputime=6.925 memavail=3388300 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 41.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3684 bytes_read=8360 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=179999421 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=870 bytes_read=4812 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=50000161 adj=50000807 toolboard_t0: mcu_awake=0.014 mcu_task_avg=0.000021 mcu_task_stddev=0.000025 bytes_write=1472 bytes_read=5769 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=63998946 adj=63999901 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=26.6 raspberry_pi: temp=39.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=382 bytes_read=4645 bytes_retransmit=9 bytes_invalid=0 send_seq=65 receive_seq=65 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999657 adj=31999489 coil_temp=22.1 refs=0 mcu_temp=21.15 supply_voltage=2.978 sysload=2.17 cputime=6.951 memavail=3389196 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 42.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3690 bytes_read=8463 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=179999601 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=876 bytes_read=4828 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=50000344 adj=50000755 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1478 bytes_read=5883 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=63999018 adj=63999653 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=39.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=388 bytes_read=5001 bytes_retransmit=9 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999681 adj=31999479 coil_temp=22.1 refs=0 mcu_temp=21.19 supply_voltage=2.978 sysload=2.17 cputime=6.983 memavail=3389196 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 43.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3696 bytes_read=8580 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=179999829 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=882 bytes_read=4844 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=50000223 adj=50001130 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1484 bytes_read=6011 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=63999037 adj=63999536 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=39.9 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=394 bytes_read=5357 bytes_retransmit=9 bytes_invalid=0 send_seq=67 receive_seq=67 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999666 adj=31999507 coil_temp=22.1 refs=0 mcu_temp=21.20 supply_voltage=2.978 sysload=2.17 cputime=7.033 memavail=3386300 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 44.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3702 bytes_read=8712 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=179999826 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=888 bytes_read=4873 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=50000503 adj=50000232 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1490 bytes_read=6111 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=63999045 adj=63999186 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=40.9 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=400 bytes_read=5713 bytes_retransmit=9 bytes_invalid=0 send_seq=68 receive_seq=68 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999704 adj=31999350 coil_temp=22.1 refs=0 mcu_temp=21.23 supply_voltage=2.978 sysload=2.17 cputime=7.061 memavail=3388608 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
RatOS | DEBUG:: Debugging enabled.
Stats 45.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3708 bytes_read=8815 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=179999846 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=894 bytes_read=4889 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=50000351 adj=50001405 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1496 bytes_read=6211 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=63999130 adj=63999204 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=39.9 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=406 bytes_read=6069 bytes_retransmit=9 bytes_invalid=0 send_seq=69 receive_seq=69 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999697 adj=31999585 coil_temp=22.1 refs=0 mcu_temp=21.26 supply_voltage=2.978 sysload=2.15 cputime=7.095 memavail=3384732 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 46.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3714 bytes_read=8918 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=179999820 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=900 bytes_read=4905 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=50000231 adj=50000504 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1502 bytes_read=6339 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=63999124 adj=63999504 Octopus_V1.1_F446: temp=25.5 EBB42_v1.2_T0: temp=26.6 raspberry_pi: temp=38.9 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=412 bytes_read=6425 bytes_retransmit=9 bytes_invalid=0 send_seq=70 receive_seq=70 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999694 adj=31999580 coil_temp=22.1 refs=0 mcu_temp=21.28 supply_voltage=2.978 sysload=2.15 cputime=7.119 memavail=3384732 print_time=41.404 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 47.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3720 bytes_read=9050 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=179999813 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=906 bytes_read=4921 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=50000135 adj=49999961 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1508 bytes_read=6453 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=63999117 adj=63999657 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=39.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=418 bytes_read=6781 bytes_retransmit=9 bytes_invalid=0 send_seq=71 receive_seq=71 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999694 adj=31999626 coil_temp=22.1 refs=0 mcu_temp=21.31 supply_voltage=2.978 sysload=2.15 cputime=7.150 memavail=3384508 print_time=54.038 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 48.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3726 bytes_read=9167 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=179999796 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=912 bytes_read=4937 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=50000082 adj=49999616 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1514 bytes_read=6553 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=63999123 adj=63999520 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=38.9 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=424 bytes_read=7137 bytes_retransmit=9 bytes_invalid=0 send_seq=72 receive_seq=72 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999694 adj=31999655 coil_temp=22.1 refs=0 mcu_temp=21.34 supply_voltage=2.978 sysload=2.15 cputime=7.175 memavail=3384508 print_time=54.038 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 49.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3732 bytes_read=9270 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=179999838 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=918 bytes_read=4966 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=50000092 adj=49999519 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1520 bytes_read=6681 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=63999203 adj=63999494 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=38.5 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=430 bytes_read=7493 bytes_retransmit=9 bytes_invalid=0 send_seq=73 receive_seq=73 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999728 adj=31999690 coil_temp=22.1 refs=0 mcu_temp=21.37 supply_voltage=2.978 sysload=2.15 cputime=7.223 memavail=3384508 print_time=54.038 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 50.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3738 bytes_read=9402 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=179999899 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 bytes_write=924 bytes_read=4982 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=50000104 adj=49999667 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1526 bytes_read=6781 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=63999214 adj=63999743 Octopus_V1.1_F446: temp=25.6 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=38.5 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=436 bytes_read=7849 bytes_retransmit=9 bytes_invalid=0 send_seq=74 receive_seq=74 retransmit_seq=17 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999727 adj=31999824 coil_temp=22.1 refs=0 mcu_temp=21.40 supply_voltage=2.977 sysload=1.98 cputime=7.273 memavail=3384508 print_time=54.038 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4100187856
Received 34.159593: b'{"id":4077666608,"method":"gcode/subscribe_output","params":{"response_template":{"method":"process_gcode_response"}}}'
Received 34.161170: b'{"id":4077666584,"method":"list_endpoints","params":{}}'
Received 34.164677: b'{"id":4077675664,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null},"response_template":{"method":"process_status_update"}}}'
Received 34.411006: b'{"id":4086409224,"method":"objects/list","params":{}}'
Received 34.413537: b'{"id":4086359448,"method":"objects/query","params":{"objects":{"configfile":null}}}'
Received 34.687065: b'{"id":4086429632,"method":"register_remote_method","params":{"response_template":{"method":"shutdown_machine"},"remote_method":"shutdown_machine"}}'
Received 34.689248: b'{"id":4086429584,"method":"register_remote_method","params":{"response_template":{"method":"reboot_machine"},"remote_method":"reboot_machine"}}'
Received 34.690547: b'{"id":4086429584,"method":"register_remote_method","params":{"response_template":{"method":"pause_job_queue"},"remote_method":"pause_job_queue"}}'
Received 34.691725: b'{"id":4086429584,"method":"register_remote_method","params":{"response_template":{"method":"start_job_queue"},"remote_method":"start_job_queue"}}'
Received 34.694763: b'{"id":4086429176,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 34.694763: b'{"id":4086429368,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 34.756309: b'{"id":4086428576,"method":"info","params":{}}'
Received 34.756309: b'{"id":4086429032,"method":"objects/list","params":{}}'
Received 34.830729: b'{"id":4086429656,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 34.975169: b'{"id":4086428336,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 35.193799: b'{"id":4086429656,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 35.770264: b'{"id":4086428096,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 44.292601: b'{"id":4086483984,"method":"gcode/script","params":{"script":"ENABLE_DEBUG"}}'
Received 46.543126: b'{"id":4086800312,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 51.010198: b'{"id":4086301216,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 X-10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[190.0, 200.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
Reactor garbage collection: (46.188559565, 0.0, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=3818939783 clock_est=(36.791 2906619483 63999205.191) min_half_rtt=0.000089 min_rtt_time=46.123 time_avg=36.791(47.030) clock_avg=2906619483.036(3009896523.976) pred_variance=1821278468.955 clock_adj=(-1.386 63999562.500)
Dumping serial stats: bytes_write=1538 bytes_read=6893 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
Dumping send queue 100 messages
Sent 0 31.815465 31.815465 9: seq: 15, identify offset=2120 count=40
Sent 1 31.816611 31.816611 9: seq: 16, identify offset=2160 count=40
Sent 2 31.817883 31.817883 9: seq: 17, identify offset=2200 count=40
Sent 3 31.818970 31.818970 9: seq: 18, identify offset=2240 count=40
Sent 4 31.820270 31.820270 9: seq: 19, identify offset=2280 count=40
Sent 5 31.821451 31.821451 9: seq: 1a, identify offset=2320 count=40
Sent 6 31.822551 31.822551 9: seq: 1b, identify offset=2360 count=40
Sent 7 31.823656 31.823656 9: seq: 1c, identify offset=2400 count=40
Sent 8 31.824767 31.824767 9: seq: 1d, identify offset=2440 count=40
Sent 9 31.825831 31.825831 9: seq: 1e, identify offset=2480 count=40
Sent 10 31.826771 31.826771 9: seq: 1f, identify offset=2520 count=40
Sent 11 31.827674 31.827674 9: seq: 10, identify offset=2560 count=40
Sent 12 31.828666 31.828666 9: seq: 11, identify offset=2600 count=40
Sent 13 31.829610 31.829610 9: seq: 12, identify offset=2640 count=40
Sent 14 31.830539 31.830539 9: seq: 13, identify offset=2680 count=40
Sent 15 31.831515 31.831515 9: seq: 14, identify offset=2720 count=40
Sent 16 31.832536 31.832536 9: seq: 15, identify offset=2760 count=40
Sent 17 31.834076 31.834076 9: seq: 16, identify offset=2800 count=40
Sent 18 31.837809 31.837809 9: seq: 17, identify offset=2840 count=40
Sent 19 31.838868 31.838868 9: seq: 18, identify offset=2880 count=40
Sent 20 31.839916 31.839916 9: seq: 19, identify offset=2920 count=40
Sent 21 31.840898 31.840898 9: seq: 1a, identify offset=2960 count=40
Sent 22 31.841874 31.841874 9: seq: 1b, identify offset=3000 count=40
Sent 23 31.842754 31.842754 9: seq: 1c, identify offset=3040 count=40
Sent 24 31.844785 31.844785 9: seq: 1d, identify offset=3080 count=40
Sent 25 31.847756 31.847756 9: seq: 1e, identify offset=3120 count=40
Sent 26 31.858095 31.858095 6: seq: 1f, get_uptime
Sent 27 31.910916 31.910916 6: seq: 10, get_clock
Sent 28 31.962172 31.962172 6: seq: 11, get_clock
Sent 29 32.013671 32.013671 6: seq: 12, get_clock
Sent 30 32.064800 32.064800 6: seq: 13, get_clock
Sent 31 32.115846 32.115846 6: seq: 14, get_clock
Sent 32 32.167997 32.167997 6: seq: 15, get_clock
Sent 33 32.219461 32.219461 6: seq: 16, get_clock
Sent 34 32.270965 32.270965 6: seq: 17, get_clock
Sent 35 32.273076 32.273076 6: seq: 18, get_clock
Sent 36 32.274657 32.274657 12: seq: 19, debug_read order=1 addr=536835496
Sent 37 32.275397 32.275397 12: seq: 1a, debug_read order=1 addr=536835530
Sent 38 32.932598 32.932598 6: seq: 1b, get_config
Sent 39 32.934654 32.934654 7: seq: 1c, allocate_oids count=12
Sent 40 32.934823 32.934823 9: seq: 1d, config_spi oid=0 pin=PB12 cs_active_high=0
Sent 41 32.934936 32.934936 8: seq: 1e, config_adxl345 oid=1 spi_oid=0
Sent 42 32.934986 32.934986 9: seq: 1f, config_analog_in oid=6 pin=ADC_TEMPERATURE
Sent 43 32.935113 32.935113 21: seq: 10, spi_set_software_bus oid=0 miso_pin=PB2 mosi_pin=PB11 sclk_pin=PB10 mode=3 rate=5000000, config_digital_out oid=7 pin=PA0 value=1 default_value=0 max_duration=0
Sent 44 32.935210 32.935210 9: seq: 11, set_digital_out_pwm_cycle oid=7 cycle_ticks=2560
Sent 45 32.935371 32.935371 16: seq: 12, config_digital_out oid=8 pin=PA1 value=0 default_value=1 max_duration=0, set_digital_out_pwm_cycle oid=8 cycle_ticks=640000
Sent 46 32.935494 32.935494 12: seq: 13, config_tmcuart oid=2 rx_pin=PA15 pull_up=0 tx_pin=PA15 bit_time=1600
Sent 47 32.935525 32.935525 9: seq: 14, config_endstop oid=3 pin=PB6 pull_up=0
Sent 48 32.935600 32.935600 7: seq: 15, config_trsync oid=4
Sent 49 32.935669 32.935669 8: seq: 16, config_analog_in oid=9 pin=PA3
Sent 50 32.935718 32.935718 15: seq: 17, config_digital_out oid=10 pin=PB13 value=0 default_value=0 max_duration=320000000
Sent 51 32.935764 32.935764 11: seq: 18, set_digital_out_pwm_cycle oid=10 cycle_ticks=6400000
Sent 52 32.935838 32.935838 11: seq: 19, config_stepper oid=5 step_pin=PD0 dir_pin=PD1 invert_step=4294967295 step_pulse_ticks=0
Sent 53 32.935884 32.935884 11: seq: 1a, config_digital_out oid=11 pin=PD2 value=1 default_value=1 max_duration=0
Sent 54 32.935936 32.935936 11: seq: 1b, finalize_config crc=588137470
Sent 55 32.936092 32.936092 25: seq: 1c, query_analog_in oid=6 clock=2716526089 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=0 max_value=65535 range_check_count=4
Sent 56 32.936145 32.936145 14: seq: 1d, queue_digital_out oid=7 clock=2672547825 on_ticks=2560
Sent 57 32.936199 32.936199 13: seq: 1e, queue_digital_out oid=8 clock=2672552691 on_ticks=0
Sent 58 32.936295 32.936295 26: seq: 1f, query_analog_in oid=9 clock=2718446089 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=10237 max_value=16734 range_check_count=4
Sent 59 32.936362 32.936362 13: seq: 10, queue_digital_out oid=10 clock=2672575147 on_ticks=0
Sent 60 32.936463 32.936463 6: seq: 11, get_config
Sent 61 33.257621 33.257621 6: seq: 12, get_clock
Sent 62 33.546978 33.546978 14: seq: 13, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 63 33.551294 33.551294 19: seq: 14, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 64 33.554245 33.554245 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 65 33.558584 33.558584 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 66 33.561553 33.561553 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 67 33.566257 33.566257 19: seq: 18, tmcuart_send oid=2 write=b'\xea\x03\x88=\x91\x04\x1a\x88\xae\xe7' read=0
Sent 68 33.569248 33.569248 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 69 33.573982 33.573982 19: seq: 1a, tmcuart_send oid=2 write=b'\xea\x03\x082\x80\x10\xb2\xc8\xa2\xa4' read=0
Sent 70 33.576888 33.576888 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 71 33.581586 33.581586 19: seq: 1c, tmcuart_send oid=2 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 72 33.584655 33.584655 14: seq: 1d, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 73 33.589481 33.589481 19: seq: 1e, tmcuart_send oid=2 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 74 33.592531 33.592531 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 75 33.597277 33.597277 19: seq: 10, tmcuart_send oid=2 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 76 33.600278 33.600278 14: seq: 11, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 77 33.604998 33.604998 19: seq: 12, tmcuart_send oid=2 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 78 33.607992 33.607992 14: seq: 13, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 79 33.612774 33.612774 19: seq: 14, tmcuart_send oid=2 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 80 33.615734 33.615734 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 81 33.620502 33.620502 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 82 33.623574 33.623574 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 83 33.908384 33.908384 7: seq: 18, stepper_get_position oid=5
Sent 84 33.909329 33.909329 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 85 34.242196 34.242196 6: seq: 1a, get_clock
Sent 86 35.226963 35.226963 6: seq: 1b, get_clock
Sent 87 40.214862 40.214862 6: seq: 1c, get_clock
Sent 88 41.199605 41.199605 6: seq: 1d, get_clock
Sent 89 42.184799 42.184799 6: seq: 1e, get_clock
Sent 90 43.169265 43.169265 6: seq: 1f, get_clock
Sent 91 44.153913 44.153913 6: seq: 10, get_clock
Sent 92 45.138137 45.138137 6: seq: 11, get_clock
Sent 93 46.122993 46.122993 6: seq: 12, get_clock
Sent 94 47.107249 47.107249 6: seq: 13, get_clock
Sent 95 48.091496 48.091496 6: seq: 14, get_clock
Sent 96 49.076726 49.076726 6: seq: 15, get_clock
Sent 97 50.061441 50.061441 6: seq: 16, get_clock
Sent 98 51.045734 51.045734 6: seq: 17, get_clock
Sent 99 51.148285 51.148285 6: seq: 18, emergency_stop
Dumping receive queue 100 messages
Receive: 0 38.357736 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3025646089 value=10860
Receive: 1 38.627743 35.226963 14: seq: 1c, analog_in_state oid=6 next_clock=3042926089 value=7412
Receive: 2 38.657744 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3044846089 value=10858
Receive: 3 38.927762 35.226963 14: seq: 1c, analog_in_state oid=6 next_clock=3062126089 value=7411
Receive: 4 38.957720 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3064046089 value=10857
Receive: 5 39.227738 35.226963 14: seq: 1c, analog_in_state oid=6 next_clock=3081326089 value=7415
Receive: 6 39.257714 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3083246089 value=10862
Receive: 7 39.527722 35.226963 14: seq: 1c, analog_in_state oid=6 next_clock=3100526089 value=7408
Receive: 8 39.557703 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3102446089 value=10857
Receive: 9 39.827724 35.226963 14: seq: 1c, analog_in_state oid=6 next_clock=3119726089 value=7413
Receive: 10 39.857708 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3121646089 value=10855
Receive: 11 40.127727 35.226963 14: seq: 1c, analog_in_state oid=6 next_clock=3138926089 value=7411
Receive: 12 40.157734 35.226963 14: seq: 1c, analog_in_state oid=9 next_clock=3140846089 value=10859
Receive: 13 40.215086 40.214862 11: seq: 1d, clock clock=3125772736
Receive: 14 40.427722 40.214862 14: seq: 1d, analog_in_state oid=6 next_clock=3158126089 value=7412
Receive: 15 40.457702 40.214862 14: seq: 1d, analog_in_state oid=9 next_clock=3160046089 value=10858
Receive: 16 40.727856 40.214862 14: seq: 1d, analog_in_state oid=6 next_clock=3177326089 value=7411
Receive: 17 40.757690 40.214862 14: seq: 1d, analog_in_state oid=9 next_clock=3179246089 value=10857
Receive: 18 41.027734 40.214862 14: seq: 1d, analog_in_state oid=6 next_clock=3196526089 value=7412
Receive: 19 41.057680 40.214862 14: seq: 1d, analog_in_state oid=9 next_clock=3198446089 value=10855
Receive: 20 41.199819 41.199605 11: seq: 1e, clock clock=3188793832
Receive: 21 41.327744 41.199605 14: seq: 1e, analog_in_state oid=6 next_clock=3215726089 value=7412
Receive: 22 41.357738 41.199605 14: seq: 1e, analog_in_state oid=9 next_clock=3217646089 value=10859
Receive: 23 41.374894 41.199605 14: seq: 1e, stats count=160 sum=148137 sumsq=756756
Receive: 24 41.627697 41.199605 14: seq: 1e, analog_in_state oid=6 next_clock=3234926089 value=7415
Receive: 25 41.657693 41.199605 14: seq: 1e, analog_in_state oid=9 next_clock=3236846089 value=10857
Receive: 26 41.927770 41.199605 14: seq: 1e, analog_in_state oid=6 next_clock=3254126089 value=7417
Receive: 27 41.957776 41.199605 14: seq: 1e, analog_in_state oid=9 next_clock=3256046089 value=10858
Receive: 28 42.185115 42.184799 11: seq: 1f, clock clock=3251847147
Receive: 29 42.227893 42.184799 14: seq: 1f, analog_in_state oid=6 next_clock=3273326089 value=7417
Receive: 30 42.257793 42.184799 14: seq: 1f, analog_in_state oid=9 next_clock=3275246089 value=10861
Receive: 31 42.527836 42.184799 14: seq: 1f, analog_in_state oid=6 next_clock=3292526089 value=7417
Receive: 32 42.557771 42.184799 14: seq: 1f, analog_in_state oid=9 next_clock=3294446089 value=10860
Receive: 33 42.827805 42.184799 14: seq: 1f, analog_in_state oid=6 next_clock=3311726089 value=7413
Receive: 34 42.857781 42.184799 14: seq: 1f, analog_in_state oid=9 next_clock=3313646089 value=10859
Receive: 35 43.127828 42.184799 14: seq: 1f, analog_in_state oid=6 next_clock=3330926089 value=7416
Receive: 36 43.157817 42.184799 14: seq: 1f, analog_in_state oid=9 next_clock=3332846089 value=10860
Receive: 37 43.169851 43.169265 11: seq: 10, clock clock=3314851518
Receive: 38 43.427736 43.169265 14: seq: 10, analog_in_state oid=6 next_clock=3350126089 value=7416
Receive: 39 43.457713 43.169265 14: seq: 10, analog_in_state oid=9 next_clock=3352046089 value=10857
Receive: 40 43.727907 43.169265 14: seq: 10, analog_in_state oid=6 next_clock=3369326089 value=7414
Receive: 41 43.757713 43.169265 14: seq: 10, analog_in_state oid=9 next_clock=3371246089 value=10859
Receive: 42 44.027807 43.169265 14: seq: 10, analog_in_state oid=6 next_clock=3388526089 value=7417
Receive: 43 44.057801 43.169265 14: seq: 10, analog_in_state oid=9 next_clock=3390446089 value=10860
Receive: 44 44.154279 44.153913 11: seq: 11, clock clock=3377867982
Receive: 45 44.327810 44.153913 14: seq: 11, analog_in_state oid=6 next_clock=3407726089 value=7417
Receive: 46 44.357877 44.153913 14: seq: 11, analog_in_state oid=9 next_clock=3409646089 value=10858
Receive: 47 44.627814 44.153913 14: seq: 11, analog_in_state oid=6 next_clock=3426926089 value=7417
Receive: 48 44.657889 44.153913 14: seq: 11, analog_in_state oid=9 next_clock=3428846089 value=10859
Receive: 49 44.927813 44.153913 14: seq: 11, analog_in_state oid=6 next_clock=3446126089 value=7421
Receive: 50 44.957752 44.153913 14: seq: 11, analog_in_state oid=9 next_clock=3448046089 value=10860
Receive: 51 45.138372 45.138137 11: seq: 12, clock clock=3440861271
Receive: 52 45.227786 45.138137 14: seq: 12, analog_in_state oid=6 next_clock=3465326089 value=7420
Receive: 53 45.257786 45.138137 14: seq: 12, analog_in_state oid=9 next_clock=3467246089 value=10858
Receive: 54 45.527764 45.138137 14: seq: 12, analog_in_state oid=6 next_clock=3484526089 value=7414
Receive: 55 45.557750 45.138137 14: seq: 12, analog_in_state oid=9 next_clock=3486446089 value=10861
Receive: 56 45.827752 45.138137 14: seq: 12, analog_in_state oid=6 next_clock=3503726089 value=7420
Receive: 57 45.857745 45.138137 14: seq: 12, analog_in_state oid=9 next_clock=3505646089 value=10858
Receive: 58 46.123172 46.122993 11: seq: 13, clock clock=3503887773
Receive: 59 46.127735 46.122993 14: seq: 13, analog_in_state oid=6 next_clock=3522926089 value=7412
Receive: 60 46.157744 46.122993 14: seq: 13, analog_in_state oid=9 next_clock=3524846089 value=10857
Receive: 61 46.374956 46.122993 14: seq: 13, stats count=163 sum=152066 sumsq=785634
Receive: 62 46.427752 46.122993 14: seq: 13, analog_in_state oid=6 next_clock=3542126089 value=7420
Receive: 63 46.457743 46.122993 14: seq: 13, analog_in_state oid=9 next_clock=3544046089 value=10860
Receive: 64 46.727759 46.122993 14: seq: 13, analog_in_state oid=6 next_clock=3561326089 value=7414
Receive: 65 46.757797 46.122993 14: seq: 13, analog_in_state oid=9 next_clock=3563246089 value=10858
Receive: 66 47.027830 46.122993 14: seq: 13, analog_in_state oid=6 next_clock=3580526089 value=7421
Receive: 67 47.057806 46.122993 14: seq: 13, analog_in_state oid=9 next_clock=3582446089 value=10859
Receive: 68 47.107431 47.107249 11: seq: 14, clock clock=3566879080
Receive: 69 47.327775 47.107249 14: seq: 14, analog_in_state oid=6 next_clock=3599726089 value=7420
Receive: 70 47.357756 47.107249 14: seq: 14, analog_in_state oid=9 next_clock=3601646089 value=10857
Receive: 71 47.627848 47.107249 14: seq: 14, analog_in_state oid=6 next_clock=3618926089 value=7419
Receive: 72 47.657756 47.107249 14: seq: 14, analog_in_state oid=9 next_clock=3620846089 value=10857
Receive: 73 47.927786 47.107249 14: seq: 14, analog_in_state oid=6 next_clock=3638126089 value=7417
Receive: 74 47.957761 47.107249 14: seq: 14, analog_in_state oid=9 next_clock=3640046089 value=10859
Receive: 75 48.091693 48.091496 11: seq: 15, clock clock=3629870804
Receive: 76 48.227912 48.091496 14: seq: 15, analog_in_state oid=6 next_clock=3657326089 value=7415
Receive: 77 48.257917 48.091496 14: seq: 15, analog_in_state oid=9 next_clock=3659246089 value=10859
Receive: 78 48.527989 48.091496 14: seq: 15, analog_in_state oid=6 next_clock=3676526089 value=7419
Receive: 79 48.557856 48.091496 14: seq: 15, analog_in_state oid=9 next_clock=3678446089 value=10858
Receive: 80 48.827859 48.091496 14: seq: 15, analog_in_state oid=6 next_clock=3695726089 value=7420
Receive: 81 48.857832 48.091496 14: seq: 15, analog_in_state oid=9 next_clock=3697646089 value=10858
Receive: 82 49.077115 49.076726 11: seq: 16, clock clock=3692930892
Receive: 83 49.127843 49.076726 14: seq: 16, analog_in_state oid=6 next_clock=3714926089 value=7417
Receive: 84 49.157846 49.076726 14: seq: 16, analog_in_state oid=9 next_clock=3716846089 value=10856
Receive: 85 49.427875 49.076726 14: seq: 16, analog_in_state oid=6 next_clock=3734126089 value=7413
Receive: 86 49.457862 49.076726 14: seq: 16, analog_in_state oid=9 next_clock=3736046089 value=10858
Receive: 87 49.727883 49.076726 14: seq: 16, analog_in_state oid=6 next_clock=3753326089 value=7419
Receive: 88 49.757934 49.076726 14: seq: 16, analog_in_state oid=9 next_clock=3755246089 value=10859
Receive: 89 50.027917 49.076726 14: seq: 16, analog_in_state oid=6 next_clock=3772526089 value=7419
Receive: 90 50.057929 49.076726 14: seq: 16, analog_in_state oid=9 next_clock=3774446089 value=10856
Receive: 91 50.061737 50.061441 11: seq: 17, clock clock=3755947652
Receive: 92 50.327922 50.061441 14: seq: 17, analog_in_state oid=6 next_clock=3791726089 value=7416
Receive: 93 50.357885 50.061441 14: seq: 17, analog_in_state oid=9 next_clock=3793646089 value=10858
Receive: 94 50.627887 50.061441 14: seq: 17, analog_in_state oid=6 next_clock=3810926089 value=7424
Receive: 95 50.657897 50.061441 14: seq: 17, analog_in_state oid=9 next_clock=3812846089 value=10860
Receive: 96 50.927870 50.061441 14: seq: 17, analog_in_state oid=6 next_clock=3830126089 value=7418
Receive: 97 50.957874 50.061441 14: seq: 17, analog_in_state oid=9 next_clock=3832046089 value=10857
Receive: 98 51.045928 51.045734 11: seq: 18, clock clock=3818939783
Receive: 99 51.148703 51.148285 12: seq: 19, shutdown clock=3825505245 static_string_id=Command request
MCU 'mcu' shutdown: Command request
clocksync state: mcu_freq=180000000 last_clock=10491337405 clock_est=(36.035 7789385614 179999902.887) min_half_rtt=0.000081 min_rtt_time=33.036 time_avg=36.035(54.698) clock_avg=7789385614.193(9845588193.062) pred_variance=13912622426.576
Dumping serial stats: bytes_write=4072 bytes_read=9633 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
Dumping send queue 100 messages
Sent 0 33.323967 33.323967 14: seq: 15, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 1 33.328752 33.328752 19: seq: 16, tmcuart_send oid=6 write=b'\xea\x03\x082\x80\x10\x9ah"\x9c' read=0
Sent 2 33.331733 33.331733 14: seq: 17, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 3 33.336550 33.336550 19: seq: 18, tmcuart_send oid=6 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 4 33.339528 33.339528 14: seq: 19, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 5 33.344322 33.344322 19: seq: 1a, tmcuart_send oid=6 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 6 33.347363 33.347363 14: seq: 1b, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 7 33.352215 33.352215 19: seq: 1c, tmcuart_send oid=6 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 8 33.355215 33.355215 14: seq: 1d, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 9 33.359949 33.359949 19: seq: 1e, tmcuart_send oid=6 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 10 33.362957 33.362957 14: seq: 1f, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 11 33.367723 33.367723 19: seq: 10, tmcuart_send oid=6 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 12 33.370739 33.370739 14: seq: 11, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 13 33.375455 33.375455 19: seq: 12, tmcuart_send oid=6 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 14 33.378418 33.378418 14: seq: 13, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 15 33.383189 33.383189 14: seq: 14, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 16 33.387471 33.387471 19: seq: 15, tmcuart_send oid=7 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 17 33.390457 33.390457 14: seq: 16, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 18 33.394778 33.394778 19: seq: 17, tmcuart_send oid=7 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 19 33.397759 33.397759 14: seq: 18, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 20 33.402559 33.402559 19: seq: 19, tmcuart_send oid=7 write=b'\xea\x03\x88=\x91\x00\x02l\xa0\x9a' read=0
Sent 21 33.405558 33.405558 14: seq: 1a, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 22 33.410318 33.410318 19: seq: 1b, tmcuart_send oid=7 write=b'\xea\x03\x082\x80\x10\x9ah"\x9c' read=0
Sent 23 33.413346 33.413346 14: seq: 1c, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 24 33.418169 33.418169 19: seq: 1d, tmcuart_send oid=7 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 25 33.421156 33.421156 14: seq: 1e, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 26 33.425916 33.425916 19: seq: 1f, tmcuart_send oid=7 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 27 33.428824 33.428824 14: seq: 10, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 28 33.433575 33.433575 19: seq: 11, tmcuart_send oid=7 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 29 33.436698 33.436698 14: seq: 12, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 30 33.441467 33.441467 19: seq: 13, tmcuart_send oid=7 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 31 33.444430 33.444430 14: seq: 14, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 32 33.449300 33.449300 19: seq: 15, tmcuart_send oid=7 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 33 33.452262 33.452262 14: seq: 16, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 34 33.457008 33.457008 19: seq: 17, tmcuart_send oid=7 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 35 33.460070 33.460070 14: seq: 18, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 36 33.464883 33.464883 14: seq: 19, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 37 33.469254 33.469254 19: seq: 1a, tmcuart_send oid=8 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 38 33.472284 33.472284 14: seq: 1b, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 39 33.476682 33.476682 19: seq: 1c, tmcuart_send oid=8 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 40 33.479664 33.479664 14: seq: 1d, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 41 33.484428 33.484428 19: seq: 1e, tmcuart_send oid=8 write=b'\xea\x03\x88=\x91\x00\x02l\xa0\x9a' read=0
Sent 42 33.487333 33.487333 14: seq: 1f, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 43 33.492234 33.492234 19: seq: 10, tmcuart_send oid=8 write=b'\xea\x03\x082\x80\x10\x9ah"\x9c' read=0
Sent 44 33.495140 33.495140 14: seq: 11, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 45 33.499900 33.499900 19: seq: 12, tmcuart_send oid=8 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 46 33.502889 33.502889 14: seq: 13, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 47 33.507627 33.507627 19: seq: 14, tmcuart_send oid=8 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 48 33.510604 33.510604 14: seq: 15, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 49 33.515485 33.515485 19: seq: 16, tmcuart_send oid=8 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 50 33.518545 33.518545 14: seq: 17, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 51 33.523484 33.523484 19: seq: 18, tmcuart_send oid=8 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 52 33.526624 33.526624 14: seq: 19, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 53 33.531446 33.531446 19: seq: 1a, tmcuart_send oid=8 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 54 33.534431 33.534431 14: seq: 1b, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 55 33.539195 33.539195 19: seq: 1c, tmcuart_send oid=8 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 56 33.542189 33.542189 14: seq: 1d, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 57 33.849290 33.849290 7: seq: 1e, stepper_get_position oid=9
Sent 58 33.850812 33.850812 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 59 33.855811 33.855811 7: seq: 10, stepper_get_position oid=11
Sent 60 33.856700 33.856700 14: seq: 11, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 61 33.860496 33.860496 14: seq: 12, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 62 33.864254 33.864254 14: seq: 13, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 63 33.867932 33.867932 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 64 33.871635 33.871635 14: seq: 15, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 65 33.875582 33.875582 7: seq: 16, stepper_get_position oid=12
Sent 66 33.876477 33.876477 14: seq: 17, tmcuart_send oid=4 write=b'\xea\x03H-\xd5' read=10
Sent 67 33.881178 33.881178 7: seq: 18, stepper_get_position oid=15
Sent 68 33.881947 33.881947 14: seq: 19, tmcuart_send oid=5 write=b'\xea\x03H-\xd5' read=10
Sent 69 33.890391 33.890391 7: seq: 1a, stepper_get_position oid=16
Sent 70 33.891217 33.891217 14: seq: 1b, tmcuart_send oid=6 write=b'\xea\x03H-\xd5' read=10
Sent 71 33.895919 33.895919 7: seq: 1c, stepper_get_position oid=18
Sent 72 33.896684 33.896684 14: seq: 1d, tmcuart_send oid=7 write=b'\xea\x03H-\xd5' read=10
Sent 73 33.901789 33.901789 7: seq: 1e, stepper_get_position oid=19
Sent 74 33.903235 33.903235 14: seq: 1f, tmcuart_send oid=8 write=b'\xea\x03H-\xd5' read=10
Sent 75 34.038168 34.038168 6: seq: 10, get_clock
Sent 76 35.022547 35.022547 6: seq: 11, get_clock
Sent 77 40.214994 40.214994 6: seq: 12, get_clock
Sent 78 41.199463 41.199463 6: seq: 13, get_clock
Sent 79 42.184501 42.184501 6: seq: 14, get_clock
Sent 80 43.168885 43.168885 6: seq: 15, get_clock
Sent 81 44.153668 44.153668 6: seq: 16, get_clock
Sent 82 45.137914 45.137914 6: seq: 17, get_clock
Sent 83 46.122784 46.122784 6: seq: 18, get_clock
Sent 84 47.107049 47.107049 6: seq: 19, get_clock
Sent 85 48.091299 48.091299 6: seq: 1a, get_clock
Sent 86 49.075956 49.075956 6: seq: 1b, get_clock
Sent 87 50.060989 50.060989 6: seq: 1c, get_clock
Sent 88 51.045563 51.045563 6: seq: 1d, get_clock
Sent 89 51.113728 51.113728 59: seq: 1e, set_next_step_dir oid=9 dir=0, set_next_step_dir oid=11 dir=0, queue_digital_out oid=24 clock=1958386738 on_ticks=0, queue_digital_out oid=25 clock=1958386738 on_ticks=0, queue_step oid=9 interval=1958570450 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=1958570450 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0
Sent 90 51.113728 51.113728 63: seq: 1f, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191
Sent 91 51.113728 51.113728 62: seq: 10, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72, queue_step oid=11 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8
Sent 92 51.114511 51.114511 54: seq: 11, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1, queue_step oid=11 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0
Sent 93 51.117711 51.117711 14: seq: 12, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 94 51.122509 51.122509 14: seq: 13, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 51.126176 51.126176 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 51.129823 51.129823 14: seq: 15, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 51.133482 51.133482 14: seq: 16, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 98 51.137106 51.137106 14: seq: 17, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 51.143357 51.143357 6: seq: 18, emergency_stop
Dumping receive queue 100 messages
Receive: 0 39.667757 35.022547 14: seq: 12, analog_in_state oid=20 next_clock=4201032704 value=7484
Receive: 1 39.677736 35.022547 15: seq: 12, analog_in_state oid=21 next_clock=4202832704 value=31484
Receive: 2 39.967743 35.022547 13: seq: 12, analog_in_state oid=20 next_clock=4255032704 value=7482
Receive: 3 39.977772 35.022547 14: seq: 12, analog_in_state oid=21 next_clock=4256832704 value=31488
Receive: 4 40.215194 40.214994 10: seq: 13, clock clock=4246863196
Receive: 5 40.267715 40.214994 13: seq: 13, analog_in_state oid=20 next_clock=14065408 value=7487
Receive: 6 40.277707 40.214994 14: seq: 13, analog_in_state oid=21 next_clock=15865408 value=31487
Receive: 7 40.567703 40.214994 13: seq: 13, analog_in_state oid=20 next_clock=68065408 value=7488
Receive: 8 40.577721 40.214994 14: seq: 13, analog_in_state oid=21 next_clock=69865408 value=31484
Receive: 9 40.867705 40.214994 13: seq: 13, analog_in_state oid=20 next_clock=122065408 value=7486
Receive: 10 40.877695 40.214994 14: seq: 13, analog_in_state oid=21 next_clock=123865408 value=31488
Receive: 11 41.167714 40.214994 13: seq: 13, analog_in_state oid=20 next_clock=176065408 value=7487
Receive: 12 41.177699 40.214994 14: seq: 13, analog_in_state oid=21 next_clock=177865408 value=31486
Receive: 13 41.199635 41.199463 10: seq: 14, clock clock=129101078
Receive: 14 41.467766 41.199463 14: seq: 14, analog_in_state oid=20 next_clock=230065408 value=7486
Receive: 15 41.477801 41.199463 15: seq: 14, analog_in_state oid=21 next_clock=231865408 value=31487
Receive: 16 41.767703 41.199463 14: seq: 14, analog_in_state oid=20 next_clock=284065408 value=7488
Receive: 17 41.777691 41.199463 15: seq: 14, analog_in_state oid=21 next_clock=285865408 value=31487
Receive: 18 42.067779 41.199463 14: seq: 14, analog_in_state oid=20 next_clock=338065408 value=7488
Receive: 19 42.077766 41.199463 15: seq: 14, analog_in_state oid=21 next_clock=339865408 value=31487
Receive: 20 42.184788 42.184501 11: seq: 15, clock clock=306412485
Receive: 21 42.367789 42.184501 14: seq: 15, analog_in_state oid=20 next_clock=392065408 value=7486
Receive: 22 42.377767 42.184501 15: seq: 15, analog_in_state oid=21 next_clock=393865408 value=31484
Receive: 23 42.667789 42.184501 14: seq: 15, analog_in_state oid=20 next_clock=446065408 value=7485
Receive: 24 42.677776 42.184501 15: seq: 15, analog_in_state oid=21 next_clock=447865408 value=31484
Receive: 25 42.860603 42.184501 14: seq: 15, stats count=126 sum=110760 sumsq=576719
Receive: 26 42.967800 42.184501 14: seq: 15, analog_in_state oid=20 next_clock=500065408 value=7487
Receive: 27 42.977846 42.184501 15: seq: 15, analog_in_state oid=21 next_clock=501865408 value=31485
Receive: 28 43.169197 43.168885 11: seq: 16, clock clock=483606533
Receive: 29 43.267807 43.168885 14: seq: 16, analog_in_state oid=20 next_clock=554065408 value=7487
Receive: 30 43.277782 43.168885 15: seq: 16, analog_in_state oid=21 next_clock=555865408 value=31488
Receive: 31 43.567719 43.168885 14: seq: 16, analog_in_state oid=20 next_clock=608065408 value=7490
Receive: 32 43.577719 43.168885 15: seq: 16, analog_in_state oid=21 next_clock=609865408 value=31487
Receive: 33 43.867710 43.168885 14: seq: 16, analog_in_state oid=20 next_clock=662065408 value=7487
Receive: 34 43.877694 43.168885 15: seq: 16, analog_in_state oid=21 next_clock=663865408 value=31493
Receive: 35 44.154221 44.153668 11: seq: 17, clock clock=660861173
Receive: 36 44.167873 44.153668 14: seq: 17, analog_in_state oid=20 next_clock=716065408 value=7487
Receive: 37 44.177858 44.153668 15: seq: 17, analog_in_state oid=21 next_clock=717865408 value=31489
Receive: 38 44.467796 44.153668 14: seq: 17, analog_in_state oid=20 next_clock=770065408 value=7487
Receive: 39 44.477830 44.153668 15: seq: 17, analog_in_state oid=21 next_clock=771865408 value=31490
Receive: 40 44.767760 44.153668 14: seq: 17, analog_in_state oid=20 next_clock=824065408 value=7483
Receive: 41 44.777755 44.153668 15: seq: 17, analog_in_state oid=21 next_clock=825865408 value=31486
Receive: 42 45.067728 44.153668 14: seq: 17, analog_in_state oid=20 next_clock=878065408 value=7488
Receive: 43 45.077752 44.153668 15: seq: 17, analog_in_state oid=21 next_clock=879865408 value=31486
Receive: 44 45.138136 45.137914 11: seq: 18, clock clock=838026394
Receive: 45 45.367709 45.137914 14: seq: 18, analog_in_state oid=20 next_clock=932065408 value=7490
Receive: 46 45.377697 45.137914 15: seq: 18, analog_in_state oid=21 next_clock=933865408 value=31492
Receive: 47 45.667709 45.137914 14: seq: 18, analog_in_state oid=20 next_clock=986065408 value=7488
Receive: 48 45.677703 45.137914 15: seq: 18, analog_in_state oid=21 next_clock=987865408 value=31486
Receive: 49 45.967688 45.137914 14: seq: 18, analog_in_state oid=20 next_clock=1040065408 value=7489
Receive: 50 45.977693 45.137914 15: seq: 18, analog_in_state oid=21 next_clock=1041865408 value=31490
Receive: 51 46.122974 46.122784 11: seq: 19, clock clock=1015300508
Receive: 52 46.267719 46.122784 14: seq: 19, analog_in_state oid=20 next_clock=1094065408 value=7487
Receive: 53 46.277696 46.122784 15: seq: 19, analog_in_state oid=21 next_clock=1095865408 value=31485
Receive: 54 46.567710 46.122784 14: seq: 19, analog_in_state oid=20 next_clock=1148065408 value=7486
Receive: 55 46.577692 46.122784 15: seq: 19, analog_in_state oid=21 next_clock=1149865408 value=31488
Receive: 56 46.867753 46.122784 14: seq: 19, analog_in_state oid=20 next_clock=1202065408 value=7492
Receive: 57 46.877690 46.122784 15: seq: 19, analog_in_state oid=21 next_clock=1203865408 value=31491
Receive: 58 47.107238 47.107049 11: seq: 1a, clock clock=1192468658
Receive: 59 47.167698 47.107049 14: seq: 1a, analog_in_state oid=20 next_clock=1256065408 value=7491
Receive: 60 47.177677 47.107049 15: seq: 1a, analog_in_state oid=21 next_clock=1257865408 value=31488
Receive: 61 47.467710 47.107049 14: seq: 1a, analog_in_state oid=20 next_clock=1310065408 value=7487
Receive: 62 47.477707 47.107049 15: seq: 1a, analog_in_state oid=21 next_clock=1311865408 value=31488
Receive: 63 47.767769 47.107049 14: seq: 1a, analog_in_state oid=20 next_clock=1364065408 value=7490
Receive: 64 47.777718 47.107049 15: seq: 1a, analog_in_state oid=21 next_clock=1365865408 value=31486
Receive: 65 47.960537 47.107049 14: seq: 1a, stats count=130 sum=115763 sumsq=605018
Receive: 66 48.067734 47.107049 14: seq: 1a, analog_in_state oid=20 next_clock=1418065408 value=7490
Receive: 67 48.077757 47.107049 15: seq: 1a, analog_in_state oid=21 next_clock=1419865408 value=31484
Receive: 68 48.091466 48.091299 11: seq: 1b, clock clock=1369632551
Receive: 69 48.367776 48.091299 14: seq: 1b, analog_in_state oid=20 next_clock=1472065408 value=7488
Receive: 70 48.377783 48.091299 15: seq: 1b, analog_in_state oid=21 next_clock=1473865408 value=31489
Receive: 71 48.667866 48.091299 14: seq: 1b, analog_in_state oid=20 next_clock=1526065408 value=7490
Receive: 72 48.677773 48.091299 15: seq: 1b, analog_in_state oid=21 next_clock=1527865408 value=31487
Receive: 73 48.967800 48.091299 14: seq: 1b, analog_in_state oid=20 next_clock=1580065408 value=7492
Receive: 74 48.977766 48.091299 15: seq: 1b, analog_in_state oid=21 next_clock=1581865408 value=31485
Receive: 75 49.076228 49.075956 11: seq: 1c, clock clock=1546875469
Receive: 76 49.267837 49.075956 14: seq: 1c, analog_in_state oid=20 next_clock=1634065408 value=7490
Receive: 77 49.277750 49.075956 15: seq: 1c, analog_in_state oid=21 next_clock=1635865408 value=31487
Receive: 78 49.567820 49.075956 14: seq: 1c, analog_in_state oid=20 next_clock=1688065408 value=7488
Receive: 79 49.577814 49.075956 15: seq: 1c, analog_in_state oid=21 next_clock=1689865408 value=31489
Receive: 80 49.867766 49.075956 14: seq: 1c, analog_in_state oid=20 next_clock=1742065408 value=7492
Receive: 81 49.877768 49.075956 15: seq: 1c, analog_in_state oid=21 next_clock=1743865408 value=31491
Receive: 82 50.061348 50.060989 11: seq: 1d, clock clock=1724184386
Receive: 83 50.167773 50.060989 14: seq: 1d, analog_in_state oid=20 next_clock=1796065408 value=7491
Receive: 84 50.177777 50.060989 15: seq: 1d, analog_in_state oid=21 next_clock=1797865408 value=31485
Receive: 85 50.467808 50.060989 14: seq: 1d, analog_in_state oid=20 next_clock=1850065408 value=7490
Receive: 86 50.477806 50.060989 15: seq: 1d, analog_in_state oid=21 next_clock=1851865408 value=31491
Receive: 87 50.767768 50.060989 14: seq: 1d, analog_in_state oid=20 next_clock=1904065408 value=7492
Receive: 88 50.777729 50.060989 15: seq: 1d, analog_in_state oid=21 next_clock=1905865408 value=31491
Receive: 89 51.045831 51.045563 11: seq: 1e, clock clock=1901402813
Receive: 90 51.067740 51.045563 14: seq: 1e, analog_in_state oid=20 next_clock=1958065408 value=7489
Receive: 91 51.077683 51.045563 15: seq: 1e, analog_in_state oid=21 next_clock=1959865408 value=31488
Receive: 92 51.116970 51.114511 8: seq: 12, tmcuart_response oid=2 read=b''
Receive: 93 51.121708 51.117711 18: seq: 13, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02h!\xb9'
Receive: 94 51.125612 51.122509 8: seq: 14, tmcuart_response oid=3 read=b''
Receive: 95 51.129265 51.126176 8: seq: 15, tmcuart_response oid=3 read=b''
Receive: 96 51.132926 51.129823 8: seq: 16, tmcuart_response oid=3 read=b''
Receive: 97 51.136563 51.133482 8: seq: 17, tmcuart_response oid=3 read=b''
Receive: 98 51.140250 51.137106 8: seq: 18, tmcuart_response oid=3 read=b''
Receive: 99 51.143606 51.143357 12: seq: 19, shutdown clock=1919007013 static_string_id=Command request
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=2152292411 clock_est=(36.377 1418845438 50000091.194) min_half_rtt=0.000080 min_rtt_time=47.107 time_avg=36.377(51.298) clock_avg=1418845438.687(2564884646.425) pred_variance=1083790840.601 clock_adj=(15.239 49999755.250)
Dumping serial stats: bytes_write=936 bytes_read=5010 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
Dumping send queue 100 messages
Sent 0 31.001816 31.001816 9: seq: 1e, identify offset=560 count=40
Sent 1 31.002158 31.002158 9: seq: 1f, identify offset=600 count=40
Sent 2 31.002503 31.002503 9: seq: 10, identify offset=640 count=40
Sent 3 31.002843 31.002843 9: seq: 11, identify offset=680 count=40
Sent 4 31.003211 31.003211 9: seq: 12, identify offset=720 count=40
Sent 5 31.003548 31.003548 9: seq: 13, identify offset=760 count=40
Sent 6 31.004875 31.004875 9: seq: 14, identify offset=800 count=40
Sent 7 31.006134 31.006134 9: seq: 15, identify offset=840 count=40
Sent 8 31.006858 31.006858 9: seq: 16, identify offset=880 count=40
Sent 9 31.007457 31.007457 9: seq: 17, identify offset=920 count=40
Sent 10 31.008065 31.008065 9: seq: 18, identify offset=960 count=40
Sent 11 31.008661 31.008661 9: seq: 19, identify offset=1000 count=40
Sent 12 31.009299 31.009299 9: seq: 1a, identify offset=1040 count=40
Sent 13 31.009871 31.009871 9: seq: 1b, identify offset=1080 count=40
Sent 14 31.010348 31.010348 9: seq: 1c, identify offset=1120 count=40
Sent 15 31.011178 31.011178 9: seq: 1d, identify offset=1160 count=40
Sent 16 31.012105 31.012105 9: seq: 1e, identify offset=1200 count=40
Sent 17 31.012866 31.012866 9: seq: 1f, identify offset=1240 count=40
Sent 18 31.013587 31.013587 9: seq: 10, identify offset=1280 count=40
Sent 19 31.015014 31.015014 9: seq: 11, identify offset=1320 count=40
Sent 20 31.015846 31.015846 9: seq: 12, identify offset=1360 count=40
Sent 21 31.016371 31.016371 9: seq: 13, identify offset=1400 count=40
Sent 22 31.017219 31.017219 9: seq: 14, identify offset=1440 count=40
Sent 23 31.017699 31.017699 9: seq: 15, identify offset=1480 count=40
Sent 24 31.018125 31.018125 9: seq: 16, identify offset=1520 count=40
Sent 25 31.018542 31.018542 9: seq: 17, identify offset=1560 count=40
Sent 26 31.018956 31.018956 9: seq: 18, identify offset=1600 count=40
Sent 27 31.019367 31.019367 9: seq: 19, identify offset=1640 count=40
Sent 28 31.020042 31.020042 9: seq: 1a, identify offset=1680 count=40
Sent 29 31.020591 31.020591 9: seq: 1b, identify offset=1720 count=40
Sent 30 31.021012 31.021012 9: seq: 1c, identify offset=1760 count=40
Sent 31 31.021464 31.021464 9: seq: 1d, identify offset=1800 count=40
Sent 32 31.022026 31.022026 9: seq: 1e, identify offset=1840 count=40
Sent 33 31.024338 31.024338 9: seq: 1f, identify offset=1880 count=40
Sent 34 31.031072 31.031072 9: seq: 10, identify offset=1920 count=40
Sent 35 31.032463 31.032463 9: seq: 11, identify offset=1960 count=40
Sent 36 31.033517 31.033517 9: seq: 12, identify offset=2000 count=40
Sent 37 31.034277 31.034277 9: seq: 13, identify offset=2040 count=40
Sent 38 31.035041 31.035041 9: seq: 14, identify offset=2080 count=40
Sent 39 31.035866 31.035866 9: seq: 15, identify offset=2120 count=40
Sent 40 31.036810 31.036810 9: seq: 16, identify offset=2160 count=40
Sent 41 31.037640 31.037640 9: seq: 17, identify offset=2200 count=40
Sent 42 31.038421 31.038421 9: seq: 18, identify offset=2240 count=40
Sent 43 31.039243 31.039243 9: seq: 19, identify offset=2280 count=40
Sent 44 31.040136 31.040136 9: seq: 1a, identify offset=2320 count=40
Sent 45 31.040934 31.040934 9: seq: 1b, identify offset=2360 count=40
Sent 46 31.041746 31.041746 9: seq: 1c, identify offset=2400 count=40
Sent 47 31.042545 31.042545 9: seq: 1d, identify offset=2440 count=40
Sent 48 31.043329 31.043329 9: seq: 1e, identify offset=2480 count=40
Sent 49 31.044239 31.044239 9: seq: 1f, identify offset=2520 count=40
Sent 50 31.045058 31.045058 9: seq: 10, identify offset=2560 count=40
Sent 51 31.045813 31.045813 9: seq: 11, identify offset=2600 count=40
Sent 52 31.046589 31.046589 9: seq: 12, identify offset=2640 count=40
Sent 53 31.047453 31.047453 9: seq: 13, identify offset=2680 count=40
Sent 54 31.048309 31.048309 9: seq: 14, identify offset=2720 count=40
Sent 55 31.049040 31.049040 9: seq: 15, identify offset=2760 count=40
Sent 56 31.049738 31.049738 9: seq: 16, identify offset=2800 count=40
Sent 57 31.050450 31.050450 9: seq: 17, identify offset=2840 count=40
Sent 58 31.051104 31.051104 9: seq: 18, identify offset=2880 count=40
Sent 59 31.051876 31.051876 9: seq: 19, identify offset=2920 count=40
Sent 60 31.052771 31.052771 9: seq: 1a, identify offset=2960 count=40
Sent 61 31.053768 31.053768 9: seq: 1b, identify offset=3000 count=40
Sent 62 31.054678 31.054678 9: seq: 1c, identify offset=3040 count=40
Sent 63 31.055538 31.055538 9: seq: 1d, identify offset=3080 count=40
Sent 64 31.056424 31.056424 9: seq: 1e, identify offset=3120 count=40
Sent 65 31.057186 31.057186 9: seq: 1f, identify offset=3160 count=40
Sent 66 31.063037 31.063037 9: seq: 10, identify offset=3200 count=40
Sent 67 31.066865 31.066865 9: seq: 11, identify offset=3240 count=40
Sent 68 31.067675 31.067675 9: seq: 12, identify offset=3265 count=40
Sent 69 31.100340 31.100340 6: seq: 13, get_uptime
Sent 70 31.151819 31.151819 6: seq: 14, get_clock
Sent 71 31.202948 31.202948 6: seq: 15, get_clock
Sent 72 31.254195 31.254195 6: seq: 16, get_clock
Sent 73 31.305528 31.305528 6: seq: 17, get_clock
Sent 74 31.356540 31.356540 6: seq: 18, get_clock
Sent 75 31.407612 31.407612 6: seq: 19, get_clock
Sent 76 31.458857 31.458857 6: seq: 1a, get_clock
Sent 77 31.510025 31.510025 6: seq: 1b, get_clock
Sent 78 31.524951 31.524951 6: seq: 1c, get_clock
Sent 79 32.509326 32.509326 6: seq: 1d, get_clock
Sent 80 32.930237 32.930237 6: seq: 1e, get_config
Sent 81 32.931240 32.931240 7: seq: 1f, allocate_oids count=0
Sent 82 32.931438 32.931438 11: seq: 10, finalize_config crc=3912464276
Sent 83 32.931632 32.931632 6: seq: 11, get_config
Sent 84 33.493863 33.493863 6: seq: 12, get_clock
Sent 85 34.478281 34.478281 6: seq: 13, get_clock
Sent 86 35.462766 35.462766 6: seq: 14, get_clock
Sent 87 40.215278 40.215278 6: seq: 15, get_clock
Sent 88 41.199587 41.199587 6: seq: 16, get_clock
Sent 89 42.184754 42.184754 6: seq: 17, get_clock
Sent 90 43.169113 43.169113 6: seq: 18, get_clock
Sent 91 44.153822 44.153822 6: seq: 19, get_clock
Sent 92 45.138047 45.138047 6: seq: 1a, get_clock
Sent 93 46.122894 46.122894 6: seq: 1b, get_clock
Sent 94 47.107160 47.107160 6: seq: 1c, get_clock
Sent 95 48.091404 48.091404 6: seq: 1d, get_clock
Sent 96 49.076606 49.076606 6: seq: 1e, get_clock
Sent 97 50.061236 50.061236 6: seq: 1f, get_clock
Sent 98 51.045715 51.045715 6: seq: 10, get_clock
Sent 99 51.143514 51.143514 6: seq: 11, emergency_stop
Dumping receive queue 100 messages
Receive: 0 31.002599 31.002503 49: seq: 11, identify_response offset=640 data=b'j\xe4LQ\x8e\xd9\xd6YbimD\x96\xf5\x9d\xfd\x16\x95\xfd|j\xcb|n\x0e\xacl\xaa\xfc\xc8B\xd6\xde\x0e\x1c\x03\x87e\x1d\x86'
Receive: 1 31.002965 31.002843 49: seq: 12, identify_response offset=680 data=b"Z\x9fY%\x06\xf3I\xdeR!;\xac\xa9\x96\xdc[4t\x07\x1b\x0f|h:\xf0\x11\xfdI\x89\xfa`'\xd4\xd4\x1d{l\xca\xa9\x18"
Receive: 2 31.003303 31.003211 49: seq: 13, identify_response offset=720 data=b'\xac\xb6\x0c\x8f\xf9\x91\x07d\xa3\x9dD\xdd\x1fE\xc3I\xc7\x9d\xbf\x1d\x07\x94\x87\x13+\x1c\xba\xe2\xb7\x13XT\x07!skF\xb0\xca^'
Receive: 3 31.003783 31.003548 49: seq: 14, identify_response offset=760 data=b'Y\x13\xddO`\xd1\x06^@0\x1a*>8\xdb@O\x19\x1a\x84\x87A\x8c\xfc\x08\x03\xd5\x98\x10\xc13\xf2\x86\x0f{\xde\x96O9z'
Receive: 4 31.005002 31.004875 49: seq: 15, identify_response offset=800 data=b'F`\x02\xa6\xc8K\xe6\x87\xae\xe1G\x81K\x16M\xef\x9b\x84\x1e\xdb\xb05\x0fl\xc0\xbas\xe9t\\+\xe3A\xec\xf7|\xc0C\xc8\x8e'
Receive: 5 31.006266 31.006134 49: seq: 16, identify_response offset=840 data=b'\xdcS\x98\xb8\xcdU\xd8\x04\x9e\x8a\x91[\x01\x85\xe0\xbev\x02\x02\x198\x95\x9cd\xc8\xca\xa1$\x8d9[\xed\xc1\x9f(>A\xc8z\xa4'
Receive: 6 31.006977 31.006858 49: seq: 17, identify_response offset=880 data=b'p\xc0\x1ch8\xf5x\x0b`\x99g+\xed\xdcs\t\xfb\xe5\xa0\x816\xe8\xe17\xc99\r\x17hx\x05\x06\xcd]G\nBD\xc7\xd8'
Receive: 7 31.007576 31.007457 49: seq: 18, identify_response offset=920 data=b't\x95\xd8=\xe5p\xd7v\xad\x81+\x93b:v\x03\x07\x08\xd5V\xb6%2\xba\xc39>\xce\xe55\xd7ndM\x88\x8a|\x92\xbe/'
Receive: 8 31.008186 31.008065 49: seq: 19, identify_response offset=960 data=b"VN\x11<)\xc8\x08\x7f\xf1z\xb9$]\x8fCG%\xbb\xdd\xf8P\x0c\xdc'\x07\xfb\xb46Y\x15\xe6\xf3\xd4JiB+i]Z"
Receive: 9 31.008803 31.008661 49: seq: 1a, identify_response offset=1000 data=b'\x1e?\xc6\xe3W\xbc\x1d\xe1\xf0\xac\xdb\xed`Ce\xd46\xfc\x02\xdc\xc4)\x80M\xcf\xa8\xd5x\x80\r\x0f]]\xa9\xc1\xcb\x8a\xc2(\xc2'
Receive: 10 31.009429 31.009299 49: seq: 1b, identify_response offset=1040 data=b'{\x8a\xb3\x01\xad5QH\xdd\x95U\x99\xc4\x87L}\xe5\xd4\x89\xd2\xb7\xc3\xe4\x9d%\x01\xc5 \xbd[\xe4T3\xa5\x06\x91l\x17xJ'
Receive: 11 31.009978 31.009871 49: seq: 1c, identify_response offset=1080 data=b"O'\xe7 \xd3\x8dEX\xa6]\xff\xa3!5\xce\x90t\xacq#H\x1d\xf7@x\xe0\xe5\x9d\x97\xf6D\x81\xe1a\x91\xabY\x0e\xfa\x0e"
Receive: 12 31.010473 31.010348 49: seq: 1d, identify_response offset=1120 data=b'|\xd5r\x7f/\x18\xa7f\x81E\xbe\xf5L\x12\xeb\xb1(|\x0e\x05\xb8\xb2\xb5Yj\x91\xd8,\x04\xbb\t\x16xJY\x16^`\x13Z'
Receive: 13 31.011347 31.011178 49: seq: 1e, identify_response offset=1160 data=b'\xa4Y\x0e\xb3X+\xdb\xcc\xd1\x96w\x94e\x06\xbe\xc8r\x96\xeb$\x0b\xbc\xa3\x85\xac\xd6\x1c\x05\xe9g$\x85^\x08b\xb2\xd8\xd1Me'
Receive: 14 31.012318 31.012105 49: seq: 1f, identify_response offset=1200 data=b'\xf6@\xb4\xf2BHpb+\xbeSq\xeb\xcf\xafc\xa604\x80x\tn\xb4\xf2\xf4%\xa5\xeb\x9e\xf8\xa9t\xdd\xee\xd1\xf9\xe9Z\x90'
Receive: 15 31.013064 31.012866 49: seq: 10, identify_response offset=1240 data=b'\x18\x12\x9d\xad\x9d$\xb1\x8a\n\x07\xd9X\x82y\xbau\n9\xb6\xabc4g.\x9f\xe5\x03\x050\xe3d\x0e\xcaa\xc1/hZ\x08\xb2'
Receive: 16 31.013812 31.013587 49: seq: 11, identify_response offset=1280 data=b'\xa4\xccR\xa5\x00j\xdd\xe5&\x80\x05\x02E\x1c\xff\xa4\x8b\x8a\x04N\x17\x1d!)\xb6UNh\xd7\x9c%\x88@\x94\x12Q\xcb\x1f5\x0b'
Receive: 17 31.015387 31.015014 49: seq: 12, identify_response offset=1320 data=b'\x90\xa4X\xaf)\x06\x8ac\x01!\xf9R\xfb\xef\x13\\\x10g\xa6\xd7\xd1\xc2\xfc\x93\xa4\x15D\n\xaa\xeae\x8bXs\xee\x9ccp\x8e0'
Receive: 18 31.015989 31.015846 49: seq: 13, identify_response offset=1360 data=b"\x0b\x08\xcfs\xa5\x1e4\x8a\rt\x16\x91pJG$\x88\x85\xdc\x8b'@\x92:\x92S\xe1\xa8\x11\xb23A\xa8\xe9\xa48\x95F\x1e-"
Receive: 19 31.016513 31.016371 49: seq: 14, identify_response offset=1400 data=b'\x9aj>\x9e?G\x04*D\x19\xeaK\x81>\xd9\xce\xb1N\xc7\xf9d\x83X*\x17\xcd1\x99\x80\xf0!0\xd7\xb7V\x1al\x1d\x82J'
Receive: 20 31.017375 31.017219 49: seq: 15, identify_response offset=1440 data=b'a\xd0V(v1\x1b\xca\xbc\xc0\x06\x14\xb0\xa4\xce$g\xa2V\xa1\xd6f\x02\x14\xc7\xe0F45\xca\x10=\xc8\t\xf3\x01\xd5\xda8\xbc'
Receive: 21 31.017834 31.017699 49: seq: 16, identify_response offset=1480 data=b'\xd1\xcfPy\xdf\r:="_\xa1\xc6VI\xf8c/\xe0J\xfcdlkWZ\x9c\xc2G\x02\r\xa4\xa8z\xcakx\xb6\x14\x7f2'
Receive: 22 31.018257 31.018125 49: seq: 17, identify_response offset=1520 data=b'Y/6b.\xbf\xbd\xca\xaf/\xff\x85\xc9\xcd\x16\xae\xe8\xea\x87\x9f\xae\xbe\xcf\xbf\xfb\xe5\xcd\xcf\xd8c\xa0\xbf\xb3\xd5\xf5\xd5\xc7\xd5\xc5\xaa'
Receive: 23 31.018673 31.018542 49: seq: 18, identify_response offset=1560 data=b'\x16\xed\xf4\xb8:[\xbd\xbf\xbaT\xb6b\xc8@\xa1\xde\xff\xf3\x9a\x86Q\x98a\xc4\xbd\xf9p\xf9\xe1&\xbf\xf9x}\xf3s\xfe\xfa\xf2\xe6'
Receive: 24 31.019087 31.018956 49: seq: 19, identify_response offset=1600 data=b'\r&\x94\xe9\'L)\'HrUa\xa6\xda@:u\xd2\x9f\xaf\xd6\xab\x8b\x7f\xaf\xcf\x82\xe4W@\x05US\x8d"\x15\xb5\x11\xa0v'
Receive: 25 31.019499 31.019367 49: seq: 1a, identify_response offset=1640 data=b'\xda\xfc\n\xf9c/:\xc2\x0c7f\\\x1eD\xbf\xfe\xfa9H`!0\xbf\x80\x85\x16\x96@!=\x87E\x16\xb6\x01\r\x9f\xc3b\x0b'
Receive: 26 31.020208 31.020042 49: seq: 1b, identify_response offset=1680 data=b"\x0b\x02($\xe6\xc0\xc4\x01\xe3x\xc9M\xea\x80Y\xb8d's\xac\xae\x83%?\x1b\x07\x8c\xd6\x86!p9tz\xf8@P\x9a$`"
Receive: 27 31.020724 31.020591 49: seq: 1c, identify_response offset=1720 data=b'\xe3A\xea@\x81\x07\x02V}P\xe8\x81\xe0\xe2|P\xe4\x816\xf1\x0c\x14;P\n\xfa\xe1\x83\x12\x0f\x14\xcc\xd9H=P4g#\xf3'
Receive: 28 31.021149 31.021012 49: seq: 1d, identify_response offset=1760 data=b"@\xb1b\xe3\xd3\xcc=B\xdd\xa7\x94!\x88\xa2hu\x01\x1aY\xc8d\x1dg\x95\xcai\xc7\x9a'\xeb \xbc\x05%\xd3TZ\xa5\xe0\xb3"
Receive: 29 31.021703 31.021464 49: seq: 1e, identify_response offset=1800 data=b'\xe2\xf7k\xa3V\xb8\x1fM\x05j\nT\xd2\x9f\x0c\xd5d\x12\x84\xfed\xa4&3#\x1a\x9a\x8c\xd5d\xb0\x0ec\x7f6\xa1\xd9p3\xdb'
Receive: 30 31.022746 31.022026 49: seq: 1f, identify_response offset=1840 data=b'*\xa5Y{%4\x9b\xd1,8:sVH7\x04:\x8a\x01*\xcc\\T\xda4\x992\xe1\x1d\xe5\x95\xd4\x12\xbb\xack\xa6-\xd0\x84'
Receive: 31 31.025468 31.024338 49: seq: 10, identify_response offset=1880 data=b'&\xc9\x9aI\x8e\xecP\xdcs\xac\x971\x7f\xe4~\xe8\xa1v\xe1e\x8d.\xec\x89\x99\xb2\xad\xa2\xb8zU\xb4\xac\xedF\x06\xbe\x8ca<'
Receive: 32 31.031503 31.031072 49: seq: 11, identify_response offset=1920 data=b'`p\x13D\xcc\x141{8\x08\xf8&\xd7"Y\x0f\xce\x11X\xa4\xc0\r\xb4\x9f\x8f\x18(\x99\x14{X\x15v/F&$+\xf4^'
Receive: 33 31.032648 31.032463 49: seq: 12, identify_response offset=1960 data=b'\xd4F\xa1rR#KDE\xb7DE/\xcd\xaa 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4122018528: New connection
webhooks client 4122018528: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 69.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3660 bytes_read=7597 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=179998871 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=49998312 adj=49986354 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1448 bytes_read=5032 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=63998551 adj=63997503 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=355 bytes_read=2044 bytes_retransmit=0 bytes_invalid=0 send_seq=59 receive_seq=59 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31991094 adj=31990804 coil_temp=22.2 refs=0 mcu_temp=21.42 supply_voltage=2.977 sysload=1.62 cputime=12.593 memavail=3381844 print_time=7.640 buffer_time=0.248 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4122018528
webhooks: registering remote method 'reboot_machine' for connection id: 4122018528
webhooks: registering remote method 'pause_job_queue' for connection id: 4122018528
webhooks: registering remote method 'start_job_queue' for connection id: 4122018528
Stats 70.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3666 bytes_read=7700 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=180000068 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=49998376 adj=50007331 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1454 bytes_read=5146 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=63999679 adj=63999762 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=26.6 raspberry_pi: temp=43.3 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=361 bytes_read=2400 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=31997579 adj=31991509 coil_temp=22.2 refs=0 mcu_temp=21.42 supply_voltage=2.977 sysload=1.65 cputime=12.680 memavail=3383096 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 72.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3678 bytes_read=7921 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=180000566 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 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=49998314 adj=50005151 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1466 bytes_read=5333 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=63999484 adj=64000705 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=373 bytes_read=2976 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=31999165 adj=32001275 coil_temp=22.2 refs=0 mcu_temp=21.42 supply_voltage=2.977 sysload=1.65 cputime=12.765 memavail=3386288 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 73.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3684 bytes_read=8024 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=180000444 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 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=49998106 adj=50001908 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1472 bytes_read=5461 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=63999396 adj=63999443 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=379 bytes_read=3332 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=31999183 adj=32002690 coil_temp=22.2 refs=0 mcu_temp=21.43 supply_voltage=2.977 sysload=1.65 cputime=12.791 memavail=3386304 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 74.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3690 bytes_read=8156 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=180000347 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 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=49997914 adj=50000536 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1478 bytes_read=5561 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=63999378 adj=63999308 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=385 bytes_read=3688 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=31999253 adj=32001879 coil_temp=22.2 refs=0 mcu_temp=21.45 supply_voltage=2.977 sysload=1.65 cputime=12.815 memavail=3386304 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 75.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3696 bytes_read=8259 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=180000320 rpi: mcu_awake=0.004 mcu_task_avg=0.000024 mcu_task_stddev=0.000013 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=49997788 adj=49999448 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000026 bytes_write=1484 bytes_read=5661 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=63999351 adj=63999344 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=391 bytes_read=4044 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=31999326 adj=32001407 coil_temp=22.2 refs=0 mcu_temp=21.47 supply_voltage=2.977 sysload=1.52 cputime=12.840 memavail=3386332 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 76.2: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3702 bytes_read=8362 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=180000484 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=882 bytes_read=4804 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=49997714 adj=49998687 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1490 bytes_read=5803 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=63999352 adj=63999274 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=397 bytes_read=4400 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=31999450 adj=32001061 coil_temp=22.2 refs=0 mcu_temp=21.48 supply_voltage=2.977 sysload=1.52 cputime=12.872 memavail=3385572 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 77.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3708 bytes_read=8508 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=180000500 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 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=49997747 adj=49998054 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1496 bytes_read=5903 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=63999388 adj=63999078 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=403 bytes_read=4756 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=31999469 adj=32000881 coil_temp=22.2 refs=0 mcu_temp=21.50 supply_voltage=2.977 sysload=1.52 cputime=12.906 memavail=3388852 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 78.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3714 bytes_read=8611 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=180000568 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 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=49997832 adj=49998031 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1502 bytes_read=6003 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=63999393 adj=63999199 Octopus_V1.1_F446: temp=25.7 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=409 bytes_read=5112 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=31999530 adj=32000550 coil_temp=22.2 refs=0 mcu_temp=21.51 supply_voltage=2.977 sysload=1.52 cputime=12.944 memavail=3401072 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 79.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3720 bytes_read=8714 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=180000549 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 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=49997781 adj=49998166 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1508 bytes_read=6131 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=63999388 adj=63999130 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=415 bytes_read=5468 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=31999523 adj=32000419 coil_temp=22.2 refs=0 mcu_temp=21.52 supply_voltage=2.977 sysload=1.52 cputime=12.969 memavail=3401072 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 80.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3726 bytes_read=8846 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=180000517 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 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=49997743 adj=49997867 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1514 bytes_read=6231 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=63999378 adj=63999152 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=421 bytes_read=5824 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=31999546 adj=32000159 coil_temp=22.2 refs=0 mcu_temp=21.55 supply_voltage=2.977 sysload=1.40 cputime=12.993 memavail=3401072 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 81.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3732 bytes_read=8949 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=180000514 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 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=49997728 adj=49997692 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1520 bytes_read=6345 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=63999381 adj=63999172 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=427 bytes_read=6180 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=31999558 adj=32000084 coil_temp=22.2 refs=0 mcu_temp=21.56 supply_voltage=2.977 sysload=1.40 cputime=13.017 memavail=3401308 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 82.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3738 bytes_read=9052 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=180000608 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 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=49997778 adj=49997611 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1526 bytes_read=6473 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=63999387 adj=63999193 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=433 bytes_read=6536 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=31999561 adj=31999981 coil_temp=22.2 refs=0 mcu_temp=21.58 supply_voltage=2.977 sysload=1.40 cputime=13.047 memavail=3406000 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 83.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3744 bytes_read=9198 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=180000625 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 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=49997847 adj=49997709 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1532 bytes_read=6573 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=63999400 adj=63999071 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=439 bytes_read=6892 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=31999593 adj=31999788 coil_temp=22.2 refs=0 mcu_temp=21.60 supply_voltage=2.977 sysload=1.40 cputime=13.089 memavail=3402988 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 84.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3750 bytes_read=9301 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=180000676 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 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=49997919 adj=49997982 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1538 bytes_read=6673 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=63999415 adj=63999123 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=445 bytes_read=7248 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=31999609 adj=31999830 coil_temp=22.2 refs=0 mcu_temp=21.62 supply_voltage=2.977 sysload=1.40 cputime=13.139 memavail=3402988 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 85.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3756 bytes_read=9404 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=180000681 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 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=49997966 adj=49998188 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1544 bytes_read=6801 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=63999432 adj=63999121 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=451 bytes_read=7604 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=31999625 adj=31999773 coil_temp=22.2 refs=0 mcu_temp=21.63 supply_voltage=2.977 sysload=1.28 cputime=13.189 memavail=3402988 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 86.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3762 bytes_read=9529 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=180000663 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 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=49998007 adj=49998306 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1550 bytes_read=6915 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=63999443 adj=63999207 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=40.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=457 bytes_read=7960 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=31999638 adj=31999774 coil_temp=22.2 refs=0 mcu_temp=21.66 supply_voltage=2.977 sysload=1.28 cputime=13.241 memavail=3402988 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 87.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3768 bytes_read=9627 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=180000635 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49998009 adj=49998415 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1556 bytes_read=7015 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=63999434 adj=63999295 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=40.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=463 bytes_read=8316 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=31999649 adj=31999790 coil_temp=22.2 refs=0 mcu_temp=21.69 supply_voltage=2.977 sysload=1.28 cputime=13.286 memavail=3402536 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 88.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3774 bytes_read=9744 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=180000591 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49998012 adj=49998319 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1562 bytes_read=7143 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=63999442 adj=63999279 Octopus_V1.1_F446: temp=25.8 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=469 bytes_read=8672 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=31999650 adj=31999810 coil_temp=22.3 refs=0 mcu_temp=21.71 supply_voltage=2.977 sysload=1.28 cputime=13.310 memavail=3402536 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 89.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3780 bytes_read=9876 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=180000548 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49998024 adj=49998288 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1568 bytes_read=7243 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=63999444 adj=63999400 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=475 bytes_read=9028 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=31999653 adj=31999794 coil_temp=22.3 refs=0 mcu_temp=21.73 supply_voltage=2.978 sysload=1.28 cputime=13.335 memavail=3402536 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 90.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3786 bytes_read=9979 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=180000517 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49998048 adj=49998320 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1574 bytes_read=7343 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=63999444 adj=63999456 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=481 bytes_read=9384 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=31999655 adj=31999795 coil_temp=22.3 refs=0 mcu_temp=21.75 supply_voltage=2.978 sysload=1.18 cputime=13.359 memavail=3402536 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 91.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3792 bytes_read=10082 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=180000492 rpi: mcu_awake=0.001 mcu_task_avg=0.000017 mcu_task_stddev=0.000019 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=49998063 adj=49998405 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1580 bytes_read=7485 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=63999435 adj=63999477 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=40.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=487 bytes_read=9740 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=31999657 adj=31999778 coil_temp=22.3 refs=0 mcu_temp=21.76 supply_voltage=2.978 sysload=1.18 cputime=13.383 memavail=3402536 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 92.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3798 bytes_read=10214 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=180000471 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=49998107 adj=49998419 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1586 bytes_read=7585 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=63999428 adj=63999423 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=493 bytes_read=10096 bytes_retransmit=0 bytes_invalid=0 send_seq=82 receive_seq=82 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999665 adj=31999768 coil_temp=22.3 refs=0 mcu_temp=21.79 supply_voltage=2.978 sysload=1.18 cputime=13.415 memavail=3402540 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 93.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3804 bytes_read=10331 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=180000547 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=49998155 adj=49998612 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1592 bytes_read=7685 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=63999429 adj=63999386 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=499 bytes_read=10452 bytes_retransmit=0 bytes_invalid=0 send_seq=83 receive_seq=83 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999677 adj=31999792 coil_temp=22.3 refs=0 mcu_temp=21.81 supply_voltage=2.978 sysload=1.18 cputime=13.477 memavail=3402556 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 94.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3810 bytes_read=10434 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=180000547 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=49998196 adj=49998631 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1598 bytes_read=7813 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=63999432 adj=63999182 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=40.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=505 bytes_read=10808 bytes_retransmit=0 bytes_invalid=0 send_seq=84 receive_seq=84 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999685 adj=31999727 coil_temp=22.3 refs=0 mcu_temp=21.84 supply_voltage=2.977 sysload=1.18 cputime=13.527 memavail=3402556 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 95.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3816 bytes_read=10566 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=180000549 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=49998238 adj=49998756 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1604 bytes_read=7913 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=63999451 adj=63999212 Octopus_V1.1_F446: temp=25.9 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=517 bytes_read=11180 bytes_retransmit=0 bytes_invalid=0 send_seq=86 receive_seq=86 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999694 adj=31999739 coil_temp=22.3 refs=0 mcu_temp=21.85 supply_voltage=2.977 sysload=1.09 cputime=13.572 memavail=3398524 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 96.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3822 bytes_read=10669 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=180000523 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=49998254 adj=49998861 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1610 bytes_read=8027 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=63999447 adj=63999348 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=40.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=523 bytes_read=11536 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=31999692 adj=31999759 coil_temp=22.3 refs=0 mcu_temp=21.88 supply_voltage=2.977 sysload=1.09 cputime=13.597 memavail=3405548 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 97.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3828 bytes_read=10772 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=180000509 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49998277 adj=49998838 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1616 bytes_read=8155 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=63999440 adj=63999358 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=529 bytes_read=11892 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=31999703 adj=31999743 coil_temp=22.3 refs=0 mcu_temp=21.90 supply_voltage=2.977 sysload=1.09 cputime=13.622 memavail=3405428 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 98.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3834 bytes_read=10918 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=180000491 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49998302 adj=49998849 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1622 bytes_read=8255 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=63999432 adj=63999320 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=535 bytes_read=12248 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=31999702 adj=31999799 coil_temp=22.3 refs=0 mcu_temp=21.91 supply_voltage=2.977 sysload=1.09 cputime=13.646 memavail=3404924 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 99.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3840 bytes_read=11021 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=180000510 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49998327 adj=49998893 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1628 bytes_read=8355 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=63999447 adj=63999297 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=541 bytes_read=12604 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=31999701 adj=31999768 coil_temp=22.3 refs=0 mcu_temp=21.92 supply_voltage=2.977 sysload=1.09 cputime=13.670 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 100.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3846 bytes_read=11124 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=180000491 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49998352 adj=49998860 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1634 bytes_read=8483 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=63999439 adj=63999345 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=547 bytes_read=12960 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=31999708 adj=31999700 coil_temp=22.3 refs=0 mcu_temp=21.93 supply_voltage=2.977 sysload=1.08 cputime=13.701 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 101.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3852 bytes_read=11256 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=180000489 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000018 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=49998394 adj=49998932 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1640 bytes_read=8583 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=63999441 adj=63999320 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=553 bytes_read=13316 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=31999710 adj=31999753 coil_temp=22.3 refs=0 mcu_temp=21.95 supply_voltage=2.977 sysload=1.08 cputime=13.752 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
RatOS | DEBUG:: Debugging enabled.
Stats 102.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3858 bytes_read=11359 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=180000489 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 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=49998433 adj=49999087 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1646 bytes_read=8697 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=63999442 adj=63999329 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=40.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=559 bytes_read=13672 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=31999714 adj=31999742 coil_temp=22.3 refs=0 mcu_temp=21.96 supply_voltage=2.977 sysload=1.08 cputime=13.810 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 103.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3864 bytes_read=11476 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=180000490 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 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=49998478 adj=49999197 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1652 bytes_read=8825 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=63999443 adj=63999323 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=565 bytes_read=14028 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=31999729 adj=31999743 coil_temp=22.3 refs=0 mcu_temp=21.97 supply_voltage=2.977 sysload=1.08 cputime=13.861 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 104.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3870 bytes_read=11608 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=180000484 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 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=49998518 adj=49999340 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1658 bytes_read=8925 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=63999444 adj=63999310 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=40.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=571 bytes_read=14384 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=31999736 adj=31999836 coil_temp=22.3 refs=0 mcu_temp=21.99 supply_voltage=2.977 sysload=1.08 cputime=13.912 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 105.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3876 bytes_read=11711 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=180000478 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 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=49998555 adj=49999447 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1664 bytes_read=9025 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=63999446 adj=63999328 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=40.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=577 bytes_read=14740 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=31999738 adj=31999848 coil_temp=22.3 refs=0 mcu_temp=22.00 supply_voltage=2.977 sysload=0.99 cputime=13.962 memavail=3404936 print_time=7.640 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 106.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3882 bytes_read=11814 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=180000478 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000012 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=49998591 adj=49999510 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1670 bytes_read=9153 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=63999449 adj=63999345 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=40.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=583 bytes_read=15096 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=31999737 adj=31999826 coil_temp=22.3 refs=0 mcu_temp=22.01 supply_voltage=2.977 sysload=0.99 cputime=14.029 memavail=3404936 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 107.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3888 bytes_read=11946 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=180000476 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998628 adj=49999555 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1676 bytes_read=9267 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=63999447 adj=63999362 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=589 bytes_read=15452 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=31999738 adj=31999776 coil_temp=22.3 refs=0 mcu_temp=22.03 supply_voltage=2.977 sysload=0.99 cputime=14.083 memavail=3408016 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 108.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3894 bytes_read=12063 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=180000475 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998659 adj=49999608 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1682 bytes_read=9367 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=63999447 adj=63999329 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=595 bytes_read=15808 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=31999739 adj=31999757 coil_temp=22.3 refs=0 mcu_temp=22.04 supply_voltage=2.977 sysload=0.99 cputime=14.134 memavail=3408124 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 109.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3900 bytes_read=12166 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=180000474 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998695 adj=49999615 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1688 bytes_read=9495 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=63999444 adj=63999315 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=601 bytes_read=16164 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=31999740 adj=31999744 coil_temp=22.3 refs=0 mcu_temp=22.06 supply_voltage=2.978 sysload=0.99 cputime=14.185 memavail=3408124 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 110.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3906 bytes_read=12289 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=180000473 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998723 adj=49999673 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1694 bytes_read=9595 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=63999444 adj=63999286 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=40.4 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=607 bytes_read=16520 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=31999738 adj=31999729 coil_temp=22.3 refs=0 mcu_temp=22.08 supply_voltage=2.978 sysload=0.91 cputime=14.236 memavail=3407916 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 111.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3912 bytes_read=12389 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=180000479 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998751 adj=49999658 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1700 bytes_read=9695 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=63999446 adj=63999288 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=41.9 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=613 bytes_read=16876 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=31999740 adj=31999698 coil_temp=22.3 refs=0 mcu_temp=22.09 supply_voltage=2.978 sysload=0.91 cputime=14.287 memavail=3407916 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 112.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3918 bytes_read=12492 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=180000481 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49998778 adj=49999642 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1706 bytes_read=9837 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=63999445 adj=63999282 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=40.9 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=619 bytes_read=17232 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=31999739 adj=31999693 coil_temp=22.3 refs=0 mcu_temp=22.10 supply_voltage=2.978 sysload=0.91 cputime=14.338 memavail=3403128 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 113.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3924 bytes_read=12638 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=180000467 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49998799 adj=49999638 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1712 bytes_read=9937 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=63999441 adj=63999261 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=41.9 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=625 bytes_read=17588 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=31999737 adj=31999674 coil_temp=22.3 refs=0 mcu_temp=22.12 supply_voltage=2.978 sysload=0.91 cputime=14.364 memavail=3408548 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 114.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3930 bytes_read=12741 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=180000453 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49998815 adj=49999625 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1718 bytes_read=10037 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=63999437 adj=63999272 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=41.4 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=631 bytes_read=17944 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=31999735 adj=31999668 coil_temp=22.4 refs=0 mcu_temp=22.13 supply_voltage=2.978 sysload=0.91 cputime=14.389 memavail=3408548 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 115.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3936 bytes_read=12844 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=180000440 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49998831 adj=49999582 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1724 bytes_read=10165 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=63999432 adj=63999286 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=41.4 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=637 bytes_read=18300 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=31999734 adj=31999675 coil_temp=22.4 refs=0 mcu_temp=22.15 supply_voltage=2.978 sysload=0.84 cputime=14.413 memavail=3408548 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 116.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3942 bytes_read=12976 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000428 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000020 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=49998851 adj=49999560 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1730 bytes_read=10265 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=63999428 adj=63999285 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.9 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=643 bytes_read=18656 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=31999739 adj=31999679 coil_temp=22.4 refs=0 mcu_temp=22.16 supply_voltage=2.978 sysload=0.84 cputime=14.437 memavail=3408548 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 117.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3948 bytes_read=13079 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000415 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 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=49998871 adj=49999582 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1736 bytes_read=10379 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=63999425 adj=63999280 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=42.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=649 bytes_read=18996 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=31999738 adj=31999747 coil_temp=22.4 refs=0 mcu_temp=22.17 supply_voltage=2.978 sysload=0.84 cputime=14.464 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 118.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3954 bytes_read=13196 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000416 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 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=49998901 adj=49999608 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1742 bytes_read=10507 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=63999426 adj=63999292 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=41.4 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=655 bytes_read=19352 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=31999741 adj=31999744 coil_temp=22.4 refs=0 mcu_temp=22.18 supply_voltage=2.978 sysload=0.84 cputime=14.514 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 119.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3960 bytes_read=13328 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000417 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 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=49998929 adj=49999704 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1748 bytes_read=10607 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=63999426 adj=63999305 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=42.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=661 bytes_read=19708 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=31999742 adj=31999746 coil_temp=22.4 refs=0 mcu_temp=22.19 supply_voltage=2.978 sysload=0.84 cputime=14.566 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 120.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3966 bytes_read=13431 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000421 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 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=49998955 adj=49999758 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1754 bytes_read=10707 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=63999427 adj=63999294 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.4 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=667 bytes_read=20064 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=31999749 adj=31999739 coil_temp=22.4 refs=0 mcu_temp=22.19 supply_voltage=2.977 sysload=0.77 cputime=14.617 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 121.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3972 bytes_read=13534 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000421 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 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=49998977 adj=49999789 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1760 bytes_read=10835 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=63999426 adj=63999279 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=41.4 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=673 bytes_read=20420 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=31999754 adj=31999789 coil_temp=22.4 refs=0 mcu_temp=22.20 supply_voltage=2.977 sysload=0.77 cputime=14.668 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 122.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3978 bytes_read=13666 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000427 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999003 adj=49999788 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1766 bytes_read=10949 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=63999427 adj=63999271 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=41.4 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=679 bytes_read=20776 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=31999756 adj=31999804 coil_temp=22.4 refs=0 mcu_temp=22.20 supply_voltage=2.978 sysload=0.77 cputime=14.721 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 123.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3984 bytes_read=13783 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000431 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999028 adj=49999819 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1772 bytes_read=11049 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=63999428 adj=63999262 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=41.9 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=685 bytes_read=21132 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=31999756 adj=31999787 coil_temp=22.4 refs=0 mcu_temp=22.21 supply_voltage=2.978 sysload=0.77 cputime=14.771 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 124.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3990 bytes_read=13886 bytes_retransmit=9 bytes_invalid=0 send_seq=359 receive_seq=359 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000436 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49999053 adj=49999844 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1778 bytes_read=11177 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=63999427 adj=63999255 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=691 bytes_read=21488 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=31999757 adj=31999754 coil_temp=22.4 refs=0 mcu_temp=22.22 supply_voltage=2.978 sysload=0.77 cputime=14.821 memavail=3408296 print_time=44.004 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4122018528
Received 69.772393: b'{"id":4077708720,"method":"list_endpoints","params":{}}'
Received 69.774161: b'{"id":4077710400,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null},"response_template":{"method":"process_status_update"}}}'
Received 70.020506: b'{"id":4077710208,"method":"objects/list","params":{}}'
Received 70.022840: b'{"id":4086484416,"method":"objects/query","params":{"objects":{"configfile":null}}}'
Received 70.292118: b'{"id":4086484104,"method":"register_remote_method","params":{"response_template":{"method":"shutdown_machine"},"remote_method":"shutdown_machine"}}'
Received 70.294036: b'{"id":4086484176,"method":"register_remote_method","params":{"response_template":{"method":"reboot_machine"},"remote_method":"reboot_machine"}}'
Received 70.295192: b'{"id":4086484176,"method":"register_remote_method","params":{"response_template":{"method":"pause_job_queue"},"remote_method":"pause_job_queue"}}'
Received 70.296573: b'{"id":4086484176,"method":"register_remote_method","params":{"response_template":{"method":"start_job_queue"},"remote_method":"start_job_queue"}}'
Received 70.299179: b'{"id":4086484632,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 70.299179: b'{"id":4086484344,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 70.391517: b'{"id":4086483360,"method":"info","params":{}}'
Received 70.392062: b'{"id":4086484032,"method":"objects/list","params":{}}'
Received 70.479478: b'{"id":4086482040,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 70.563119: b'{"id":4077756368,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 70.801558: b'{"id":4077755696,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 71.436301: b'{"id":4077756056,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 101.992157: b'{"id":4087042808,"method":"gcode/script","params":{"script":"ENABLE_DEBUG"}}'
Received 105.905063: b'{"id":4087045040,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 118.243171: b'{"id":4086410784,"method":"gcode/script","params":{"script":"M117"}}'
Received 124.374689: b'{"id":4086411096,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 Y-10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=4065976814 clock_est=(99.858 2497686822 63999433.063) min_half_rtt=0.000082 min_rtt_time=67.939 time_avg=99.858(363.807) clock_avg=2497686822.904(23283459051.514) pred_variance=438197135.407 clock_adj=(-1.333 63999240.250)
Dumping serial stats: bytes_write=1790 bytes_read=11233 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
Dumping send queue 100 messages
Sent 0 68.615800 68.615800 9: seq: 1f, config_analog_in oid=6 pin=ADC_TEMPERATURE
Sent 1 68.615847 68.615847 15: seq: 10, spi_set_software_bus oid=0 miso_pin=PB2 mosi_pin=PB11 sclk_pin=PB10 mode=3 rate=5000000
Sent 2 68.615922 68.615922 15: seq: 11, config_digital_out oid=7 pin=PA0 value=1 default_value=0 max_duration=0, set_digital_out_pwm_cycle oid=7 cycle_ticks=2560
Sent 3 68.615997 68.615997 16: seq: 12, config_digital_out oid=8 pin=PA1 value=0 default_value=1 max_duration=0, set_digital_out_pwm_cycle oid=8 cycle_ticks=640000
Sent 4 68.616112 68.616112 12: seq: 13, config_tmcuart oid=2 rx_pin=PA15 pull_up=0 tx_pin=PA15 bit_time=1600
Sent 5 68.616163 68.616163 9: seq: 14, config_endstop oid=3 pin=PB6 pull_up=0
Sent 6 68.616190 68.616190 7: seq: 15, config_trsync oid=4
Sent 7 68.616252 68.616252 8: seq: 16, config_analog_in oid=9 pin=PA3
Sent 8 68.616295 68.616295 15: seq: 17, config_digital_out oid=10 pin=PB13 value=0 default_value=0 max_duration=320000000
Sent 9 68.616334 68.616334 11: seq: 18, set_digital_out_pwm_cycle oid=10 cycle_ticks=6400000
Sent 10 68.616416 68.616416 11: seq: 19, config_stepper oid=5 step_pin=PD0 dir_pin=PD1 invert_step=4294967295 step_pulse_ticks=0
Sent 11 68.616464 68.616464 11: seq: 1a, config_digital_out oid=11 pin=PD2 value=1 default_value=1 max_duration=0
Sent 12 68.616547 68.616547 11: seq: 1b, finalize_config crc=588137470
Sent 13 68.616599 68.616599 25: seq: 1c, query_analog_in oid=6 clock=537125190 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=0 max_value=65535 range_check_count=4
Sent 14 68.616638 68.616638 14: seq: 1d, queue_digital_out oid=7 clock=510897847 on_ticks=2560
Sent 15 68.616726 68.616726 13: seq: 1e, queue_digital_out oid=8 clock=510901865 on_ticks=0
Sent 16 68.616802 68.616802 26: seq: 1f, query_analog_in oid=9 clock=539045190 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=10237 max_value=16734 range_check_count=4
Sent 17 68.616839 68.616839 13: seq: 10, queue_digital_out oid=10 clock=510920205 on_ticks=0
Sent 18 68.616942 68.616942 6: seq: 11, get_config
Sent 19 68.975988 68.975988 6: seq: 12, get_clock
Sent 20 69.194893 69.194893 14: seq: 13, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 21 69.199565 69.199565 19: seq: 14, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 22 69.202841 69.202841 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 23 69.207760 69.207760 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 24 69.210980 69.210980 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 25 69.216067 69.216067 19: seq: 18, tmcuart_send oid=2 write=b'\xea\x03\x88=\x91\x04\x1a\x88\xae\xe7' read=0
Sent 26 69.219151 69.219151 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 27 69.224077 69.224077 19: seq: 1a, tmcuart_send oid=2 write=b'\xea\x03\x082\x80\x10\xb2\xc8\xa2\xa4' read=0
Sent 28 69.227111 69.227111 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 29 69.233080 69.233080 19: seq: 1c, tmcuart_send oid=2 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 30 69.236144 69.236144 14: seq: 1d, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 31 69.240903 69.240903 19: seq: 1e, tmcuart_send oid=2 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 32 69.243884 69.243884 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 33 69.248641 69.248641 19: seq: 10, tmcuart_send oid=2 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 34 69.251571 69.251571 14: seq: 11, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 35 69.256332 69.256332 19: seq: 12, tmcuart_send oid=2 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 36 69.259309 69.259309 14: seq: 13, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 37 69.264058 69.264058 19: seq: 14, tmcuart_send oid=2 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 38 69.267063 69.267063 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 39 69.271852 69.271852 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 40 69.274943 69.274943 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 41 69.548102 69.548102 7: seq: 18, stepper_get_position oid=5
Sent 42 69.548977 69.548977 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 43 69.960645 69.960645 6: seq: 1a, get_clock
Sent 44 70.945578 70.945578 6: seq: 1b, get_clock
Sent 45 72.188789 72.188789 6: seq: 1c, get_clock
Sent 46 73.173254 73.173254 6: seq: 1d, get_clock
Sent 47 74.157382 74.157382 6: seq: 1e, get_clock
Sent 48 75.141681 75.141681 6: seq: 1f, get_clock
Sent 49 76.126186 76.126186 6: seq: 10, get_clock
Sent 50 77.110692 77.110692 6: seq: 11, get_clock
Sent 51 78.094764 78.094764 6: seq: 12, get_clock
Sent 52 79.079980 79.079980 6: seq: 13, get_clock
Sent 53 80.064144 80.064144 6: seq: 14, get_clock
Sent 54 81.048720 81.048720 6: seq: 15, get_clock
Sent 55 82.033165 82.033165 6: seq: 16, get_clock
Sent 56 83.017763 83.017763 6: seq: 17, get_clock
Sent 57 84.003031 84.003031 6: seq: 18, get_clock
Sent 58 84.986882 84.986882 6: seq: 19, get_clock
Sent 59 85.971144 85.971144 6: seq: 1a, get_clock
Sent 60 86.955624 86.955624 6: seq: 1b, get_clock
Sent 61 87.939740 87.939740 6: seq: 1c, get_clock
Sent 62 88.924083 88.924083 6: seq: 1d, get_clock
Sent 63 89.908415 89.908415 6: seq: 1e, get_clock
Sent 64 90.892664 90.892664 6: seq: 1f, get_clock
Sent 65 91.876850 91.876850 6: seq: 10, get_clock
Sent 66 92.861599 92.861599 6: seq: 11, get_clock
Sent 67 93.846666 93.846666 6: seq: 12, get_clock
Sent 68 94.830741 94.830741 6: seq: 13, get_clock
Sent 69 95.814483 95.814483 6: seq: 14, get_clock
Sent 70 96.798804 96.798804 6: seq: 15, get_clock
Sent 71 97.782957 97.782957 6: seq: 16, get_clock
Sent 72 98.769344 98.769344 6: seq: 17, get_clock
Sent 73 99.753851 99.753851 6: seq: 18, get_clock
Sent 74 100.739237 100.739237 6: seq: 19, get_clock
Sent 75 101.723126 101.723126 6: seq: 1a, get_clock
Sent 76 102.707173 102.707173 6: seq: 1b, get_clock
Sent 77 103.691417 103.691417 6: seq: 1c, get_clock
Sent 78 104.675818 104.675818 6: seq: 1d, get_clock
Sent 79 105.659968 105.659968 6: seq: 1e, get_clock
Sent 80 106.644141 106.644141 6: seq: 1f, get_clock
Sent 81 107.628357 107.628357 6: seq: 10, get_clock
Sent 82 108.612612 108.612612 6: seq: 11, get_clock
Sent 83 109.596898 109.596898 6: seq: 12, get_clock
Sent 84 110.581256 110.581256 6: seq: 13, get_clock
Sent 85 111.566087 111.566087 6: seq: 14, get_clock
Sent 86 112.550321 112.550321 6: seq: 15, get_clock
Sent 87 113.534271 113.534271 6: seq: 16, get_clock
Sent 88 114.518443 114.518443 6: seq: 17, get_clock
Sent 89 115.502712 115.502712 6: seq: 18, get_clock
Sent 90 116.487014 116.487014 6: seq: 19, get_clock
Sent 91 117.471975 117.471975 6: seq: 1a, get_clock
Sent 92 118.456224 118.456224 6: seq: 1b, get_clock
Sent 93 119.440563 119.440563 6: seq: 1c, get_clock
Sent 94 120.424778 120.424778 6: seq: 1d, get_clock
Sent 95 121.409252 121.409252 6: seq: 1e, get_clock
Sent 96 122.393998 122.393998 6: seq: 1f, get_clock
Sent 97 123.377893 123.377893 6: seq: 10, get_clock
Sent 98 124.362790 124.362790 6: seq: 11, get_clock
Sent 99 124.522536 124.522536 6: seq: 12, emergency_stop
Dumping receive queue 100 messages
Receive: 0 112.131760 111.566087 14: seq: 15, analog_in_state oid=6 next_clock=3301925190 value=7428
Receive: 1 112.161748 111.566087 14: seq: 15, analog_in_state oid=9 next_clock=3303845190 value=10859
Receive: 2 112.431758 111.566087 14: seq: 15, analog_in_state oid=6 next_clock=3321125190 value=7435
Receive: 3 112.461713 111.566087 14: seq: 15, analog_in_state oid=9 next_clock=3323045190 value=10859
Receive: 4 112.550508 112.550321 11: seq: 16, clock clock=3309982389
Receive: 5 112.731735 112.550321 14: seq: 16, analog_in_state oid=6 next_clock=3340325190 value=7428
Receive: 6 112.761690 112.550321 14: seq: 16, analog_in_state oid=9 next_clock=3342245190 value=10858
Receive: 7 113.031720 112.550321 14: seq: 16, analog_in_state oid=6 next_clock=3359525190 value=7430
Receive: 8 113.061749 112.550321 14: seq: 16, analog_in_state oid=9 next_clock=3361445190 value=10858
Receive: 9 113.331764 112.550321 14: seq: 16, analog_in_state oid=6 next_clock=3378725190 value=7432
Receive: 10 113.361739 112.550321 14: seq: 16, analog_in_state oid=9 next_clock=3380645190 value=10857
Receive: 11 113.534440 113.534271 11: seq: 17, clock clock=3372954661
Receive: 12 113.631720 113.534271 14: seq: 17, analog_in_state oid=6 next_clock=3397925190 value=7429
Receive: 13 113.661717 113.534271 14: seq: 17, analog_in_state oid=9 next_clock=3399845190 value=10857
Receive: 14 113.931726 113.534271 14: seq: 17, analog_in_state oid=6 next_clock=3417125190 value=7431
Receive: 15 113.961729 113.534271 14: seq: 17, analog_in_state oid=9 next_clock=3419045190 value=10863
Receive: 16 114.231766 113.534271 14: seq: 17, analog_in_state oid=6 next_clock=3436325190 value=7431
Receive: 17 114.261725 113.534271 14: seq: 17, analog_in_state oid=9 next_clock=3438245190 value=10858
Receive: 18 114.518611 114.518443 11: seq: 18, clock clock=3435940629
Receive: 19 114.531739 114.518443 14: seq: 18, analog_in_state oid=6 next_clock=3455525190 value=7426
Receive: 20 114.561739 114.518443 14: seq: 18, analog_in_state oid=9 next_clock=3457445190 value=10856
Receive: 21 114.831739 114.518443 14: seq: 18, analog_in_state oid=6 next_clock=3474725190 value=7428
Receive: 22 114.861723 114.518443 14: seq: 18, analog_in_state oid=9 next_clock=3476645190 value=10853
Receive: 23 115.131738 114.518443 14: seq: 18, analog_in_state oid=6 next_clock=3493925190 value=7432
Receive: 24 115.161718 114.518443 14: seq: 18, analog_in_state oid=9 next_clock=3495845190 value=10861
Receive: 25 115.431749 114.518443 14: seq: 18, analog_in_state oid=6 next_clock=3513125190 value=7431
Receive: 26 115.461734 114.518443 14: seq: 18, analog_in_state oid=9 next_clock=3515045190 value=10856
Receive: 27 115.502896 115.502712 11: seq: 19, clock clock=3498933019
Receive: 28 115.731759 115.502712 14: seq: 19, analog_in_state oid=6 next_clock=3532325190 value=7431
Receive: 29 115.761723 115.502712 14: seq: 19, analog_in_state oid=9 next_clock=3534245190 value=10858
Receive: 30 116.031738 115.502712 14: seq: 19, analog_in_state oid=6 next_clock=3551525190 value=7428
Receive: 31 116.061764 115.502712 14: seq: 19, analog_in_state oid=9 next_clock=3553445190 value=10859
Receive: 32 116.331776 115.502712 14: seq: 19, analog_in_state oid=6 next_clock=3570725190 value=7428
Receive: 33 116.361781 115.502712 14: seq: 19, analog_in_state oid=9 next_clock=3572645190 value=10857
Receive: 34 116.487229 116.487014 11: seq: 1a, clock clock=3561928178
Receive: 35 116.487252 116.487014 14: seq: 1a, stats count=170 sum=160717 sumsq=841920
Receive: 36 116.631767 116.487014 14: seq: 1a, analog_in_state oid=6 next_clock=3589925190 value=7428
Receive: 37 116.661759 116.487014 14: seq: 1a, analog_in_state oid=9 next_clock=3591845190 value=10857
Receive: 38 116.931776 116.487014 14: seq: 1a, analog_in_state oid=6 next_clock=3609125190 value=7426
Receive: 39 116.961742 116.487014 14: seq: 1a, analog_in_state oid=9 next_clock=3611045190 value=10858
Receive: 40 117.231870 116.487014 14: seq: 1a, analog_in_state oid=6 next_clock=3628325190 value=7431
Receive: 41 117.261866 116.487014 14: seq: 1a, analog_in_state oid=9 next_clock=3630245190 value=10858
Receive: 42 117.472238 117.471975 11: seq: 1b, clock clock=3624966914
Receive: 43 117.531843 117.471975 14: seq: 1b, analog_in_state oid=6 next_clock=3647525190 value=7430
Receive: 44 117.561840 117.471975 14: seq: 1b, analog_in_state oid=9 next_clock=3649445190 value=10860
Receive: 45 117.831899 117.471975 14: seq: 1b, analog_in_state oid=6 next_clock=3666725190 value=7431
Receive: 46 117.861842 117.471975 14: seq: 1b, analog_in_state oid=9 next_clock=3668645190 value=10856
Receive: 47 118.131835 117.471975 14: seq: 1b, analog_in_state oid=6 next_clock=3685925190 value=7426
Receive: 48 118.161804 117.471975 14: seq: 1b, analog_in_state oid=9 next_clock=3687845190 value=10860
Receive: 49 118.431849 117.471975 14: seq: 1b, analog_in_state oid=6 next_clock=3705125190 value=7430
Receive: 50 118.456484 118.456224 11: seq: 1c, clock clock=3687957602
Receive: 51 118.461811 118.456224 14: seq: 1c, analog_in_state oid=9 next_clock=3707045190 value=10859
Receive: 52 118.731853 118.456224 14: seq: 1c, analog_in_state oid=6 next_clock=3724325190 value=7427
Receive: 53 118.761842 118.456224 14: seq: 1c, analog_in_state oid=9 next_clock=3726245190 value=10859
Receive: 54 119.031854 118.456224 14: seq: 1c, analog_in_state oid=6 next_clock=3743525190 value=7431
Receive: 55 119.061913 118.456224 14: seq: 1c, analog_in_state oid=9 next_clock=3745445190 value=10859
Receive: 56 119.331925 118.456224 14: seq: 1c, analog_in_state oid=6 next_clock=3762725190 value=7429
Receive: 57 119.361863 118.456224 14: seq: 1c, analog_in_state oid=9 next_clock=3764645190 value=10855
Receive: 58 119.440947 119.440563 11: seq: 1d, clock clock=3750954874
Receive: 59 119.631839 119.440563 14: seq: 1d, analog_in_state oid=6 next_clock=3781925190 value=7431
Receive: 60 119.661836 119.440563 14: seq: 1d, analog_in_state oid=9 next_clock=3783845190 value=10858
Receive: 61 119.931847 119.440563 14: seq: 1d, analog_in_state oid=6 next_clock=3801125190 value=7428
Receive: 62 119.961841 119.440563 14: seq: 1d, analog_in_state oid=9 next_clock=3803045190 value=10859
Receive: 63 120.231901 119.440563 14: seq: 1d, analog_in_state oid=6 next_clock=3820325190 value=7430
Receive: 64 120.261874 119.440563 14: seq: 1d, analog_in_state oid=9 next_clock=3822245190 value=10862
Receive: 65 120.425035 120.424778 11: seq: 1e, clock clock=3813943739
Receive: 66 120.531928 120.424778 14: seq: 1e, analog_in_state oid=6 next_clock=3839525190 value=7427
Receive: 67 120.561846 120.424778 14: seq: 1e, analog_in_state oid=9 next_clock=3841445190 value=10859
Receive: 68 120.831889 120.424778 14: seq: 1e, analog_in_state oid=6 next_clock=3858725190 value=7428
Receive: 69 120.861888 120.424778 14: seq: 1e, analog_in_state oid=9 next_clock=3860645190 value=10858
Receive: 70 121.131877 120.424778 14: seq: 1e, analog_in_state oid=6 next_clock=3877925190 value=7431
Receive: 71 121.161855 120.424778 14: seq: 1e, analog_in_state oid=9 next_clock=3879845190 value=10854
Receive: 72 121.409544 121.409252 11: seq: 1f, clock clock=3876950125
Receive: 73 121.431848 121.409252 14: seq: 1f, analog_in_state oid=6 next_clock=3897125190 value=7431
Receive: 74 121.461840 121.409252 14: seq: 1f, analog_in_state oid=9 next_clock=3899045190 value=10860
Receive: 75 121.532207 121.409252 14: seq: 1f, stats count=171 sum=159732 sumsq=825942
Receive: 76 121.731887 121.409252 14: seq: 1f, analog_in_state oid=6 next_clock=3916325190 value=7433
Receive: 77 121.761881 121.409252 14: seq: 1f, analog_in_state oid=9 next_clock=3918245190 value=10859
Receive: 78 122.031899 121.409252 14: seq: 1f, analog_in_state oid=6 next_clock=3935525190 value=7432
Receive: 79 122.061927 121.409252 14: seq: 1f, analog_in_state oid=9 next_clock=3937445190 value=10855
Receive: 80 122.331895 121.409252 14: seq: 1f, analog_in_state oid=6 next_clock=3954725190 value=7429
Receive: 81 122.361927 121.409252 14: seq: 1f, analog_in_state oid=9 next_clock=3956645190 value=10857
Receive: 82 122.394269 122.393998 11: seq: 10, clock clock=3939973221
Receive: 83 122.631879 122.393998 14: seq: 10, analog_in_state oid=6 next_clock=3973925190 value=7431
Receive: 84 122.661840 122.393998 14: seq: 10, analog_in_state oid=9 next_clock=3975845190 value=10858
Receive: 85 122.931875 122.393998 14: seq: 10, analog_in_state oid=6 next_clock=3993125190 value=7429
Receive: 86 122.961838 122.393998 14: seq: 10, analog_in_state oid=9 next_clock=3995045190 value=10857
Receive: 87 123.231890 122.393998 14: seq: 10, analog_in_state oid=6 next_clock=4012325190 value=7429
Receive: 88 123.261911 122.393998 14: seq: 10, analog_in_state oid=9 next_clock=4014245190 value=10857
Receive: 89 123.378310 123.377893 11: seq: 11, clock clock=4002941537
Receive: 90 123.531900 123.377893 14: seq: 11, analog_in_state oid=6 next_clock=4031525190 value=7430
Receive: 91 123.561852 123.377893 14: seq: 11, analog_in_state oid=9 next_clock=4033445190 value=10860
Receive: 92 123.831904 123.377893 14: seq: 11, analog_in_state oid=6 next_clock=4050725190 value=7431
Receive: 93 123.861934 123.377893 14: seq: 11, analog_in_state oid=9 next_clock=4052645190 value=10859
Receive: 94 124.131870 123.377893 14: seq: 11, analog_in_state oid=6 next_clock=4069925190 value=7435
Receive: 95 124.161847 123.377893 14: seq: 11, analog_in_state oid=9 next_clock=4071845190 value=10858
Receive: 96 124.363077 124.362790 11: seq: 12, clock clock=4065976814
Receive: 97 124.431890 124.362790 14: seq: 12, analog_in_state oid=6 next_clock=4089125190 value=7431
Receive: 98 124.461874 124.362790 14: seq: 12, analog_in_state oid=9 next_clock=4091045190 value=10856
Receive: 99 124.522995 124.522536 12: seq: 13, shutdown clock=4076198664 static_string_id=Command request
MCU 'mcu' shutdown: Command request
clocksync state: mcu_freq=180000000 last_clock=11195784047 clock_est=(99.701 6756571841 180000442.400) min_half_rtt=0.000065 min_rtt_time=66.671 time_avg=99.701(374.083) clock_avg=6756571841.836(67335052811.804) pred_variance=3351707898.729
Dumping serial stats: bytes_write=4548 bytes_read=14079 bytes_retransmit=9 bytes_invalid=0 send_seq=375 receive_seq=375 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0
Dumping send queue 100 messages
Sent 0 69.152096 69.152096 14: seq: 13, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 1 69.156680 69.156680 19: seq: 14, tmcuart_send oid=8 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 2 69.159626 69.159626 14: seq: 15, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 3 69.164317 69.164317 19: seq: 16, tmcuart_send oid=8 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 4 69.167227 69.167227 14: seq: 17, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 5 69.171942 69.171942 19: seq: 18, tmcuart_send oid=8 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 6 69.174902 69.174902 14: seq: 19, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 7 69.179576 69.179576 19: seq: 1a, tmcuart_send oid=8 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 8 69.182580 69.182580 14: seq: 1b, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 9 69.187276 69.187276 19: seq: 1c, tmcuart_send oid=8 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 10 69.190169 69.190169 14: seq: 1d, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 11 69.494208 69.494208 7: seq: 1e, stepper_get_position oid=9
Sent 12 69.495134 69.495134 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 13 69.500373 69.500373 7: seq: 10, stepper_get_position oid=11
Sent 14 69.501138 69.501138 14: seq: 11, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 15 69.504760 69.504760 14: seq: 12, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 16 69.508711 69.508711 14: seq: 13, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 17 69.512342 69.512342 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 18 69.515963 69.515963 14: seq: 15, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 19 69.520098 69.520098 7: seq: 16, stepper_get_position oid=12
Sent 20 69.520887 69.520887 14: seq: 17, tmcuart_send oid=4 write=b'\xea\x03H-\xd5' read=10
Sent 21 69.525474 69.525474 7: seq: 18, stepper_get_position oid=15
Sent 22 69.526139 69.526139 14: seq: 19, tmcuart_send oid=5 write=b'\xea\x03H-\xd5' read=10
Sent 23 69.530815 69.530815 7: seq: 1a, stepper_get_position oid=16
Sent 24 69.531938 69.531938 14: seq: 1b, tmcuart_send oid=6 write=b'\xea\x03H-\xd5' read=10
Sent 25 69.536639 69.536639 7: seq: 1c, stepper_get_position oid=18
Sent 26 69.537362 69.537362 14: seq: 1d, tmcuart_send oid=7 write=b'\xea\x03H-\xd5' read=10
Sent 27 69.542040 69.542040 7: seq: 1e, stepper_get_position oid=19
Sent 28 69.542764 69.542764 14: seq: 1f, tmcuart_send oid=8 write=b'\xea\x03H-\xd5' read=10
Sent 29 69.828581 69.828581 6: seq: 10, get_clock
Sent 30 70.813476 70.813476 6: seq: 11, get_clock
Sent 31 72.188664 72.188664 6: seq: 12, get_clock
Sent 32 73.173145 73.173145 6: seq: 13, get_clock
Sent 33 74.157275 74.157275 6: seq: 14, get_clock
Sent 34 75.141570 75.141570 6: seq: 15, get_clock
Sent 35 76.126083 76.126083 6: seq: 16, get_clock
Sent 36 77.110126 77.110126 6: seq: 17, get_clock
Sent 37 78.094584 78.094584 6: seq: 18, get_clock
Sent 38 79.079571 79.079571 6: seq: 19, get_clock
Sent 39 80.063895 80.063895 6: seq: 1a, get_clock
Sent 40 81.048268 81.048268 6: seq: 1b, get_clock
Sent 41 82.032653 82.032653 6: seq: 1c, get_clock
Sent 42 83.017497 83.017497 6: seq: 1d, get_clock
Sent 43 84.002231 84.002231 6: seq: 1e, get_clock
Sent 44 84.986559 84.986559 6: seq: 1f, get_clock
Sent 45 85.970889 85.970889 6: seq: 10, get_clock
Sent 46 86.955445 86.955445 6: seq: 11, get_clock
Sent 47 87.939629 87.939629 6: seq: 12, get_clock
Sent 48 88.923972 88.923972 6: seq: 13, get_clock
Sent 49 89.908298 89.908298 6: seq: 14, get_clock
Sent 50 90.892553 90.892553 6: seq: 15, get_clock
Sent 51 91.876717 91.876717 6: seq: 16, get_clock
Sent 52 92.861404 92.861404 6: seq: 17, get_clock
Sent 53 93.846009 93.846009 6: seq: 18, get_clock
Sent 54 94.830198 94.830198 6: seq: 19, get_clock
Sent 55 95.814356 95.814356 6: seq: 1a, get_clock
Sent 56 96.798660 96.798660 6: seq: 1b, get_clock
Sent 57 97.782758 97.782758 6: seq: 1c, get_clock
Sent 58 98.768897 98.768897 6: seq: 1d, get_clock
Sent 59 99.753600 99.753600 6: seq: 1e, get_clock
Sent 60 100.738587 100.738587 6: seq: 1f, get_clock
Sent 61 101.722875 101.722875 6: seq: 10, get_clock
Sent 62 102.707105 102.707105 6: seq: 11, get_clock
Sent 63 103.691369 103.691369 6: seq: 12, get_clock
Sent 64 104.675772 104.675772 6: seq: 13, get_clock
Sent 65 105.659936 105.659936 6: seq: 14, get_clock
Sent 66 106.644097 106.644097 6: seq: 15, get_clock
Sent 67 107.628319 107.628319 6: seq: 16, get_clock
Sent 68 108.612563 108.612563 6: seq: 17, get_clock
Sent 69 109.596837 109.596837 6: seq: 18, get_clock
Sent 70 110.581191 110.581191 6: seq: 19, get_clock
Sent 71 111.566045 111.566045 6: seq: 1a, get_clock
Sent 72 112.549962 112.549962 6: seq: 1b, get_clock
Sent 73 113.534030 113.534030 6: seq: 1c, get_clock
Sent 74 114.518331 114.518331 6: seq: 1d, get_clock
Sent 75 115.502602 115.502602 6: seq: 1e, get_clock
Sent 76 116.486907 116.486907 6: seq: 1f, get_clock
Sent 77 117.471731 117.471731 6: seq: 10, get_clock
Sent 78 118.455998 118.455998 6: seq: 11, get_clock
Sent 79 119.440331 119.440331 6: seq: 12, get_clock
Sent 80 120.424550 120.424550 6: seq: 13, get_clock
Sent 81 121.408936 121.408936 6: seq: 14, get_clock
Sent 82 122.393223 122.393223 6: seq: 15, get_clock
Sent 83 123.377640 123.377640 6: seq: 16, get_clock
Sent 84 124.362725 124.362725 6: seq: 17, get_clock
Sent 85 124.479794 124.479794 37: seq: 18, queue_digital_out oid=24 clock=2671457234 on_ticks=0, queue_digital_out oid=25 clock=2671457234 on_ticks=0, queue_digital_out oid=26 clock=2671457234 on_ticks=0, queue_digital_out oid=27 clock=2671457234 on_ticks=0
Sent 86 124.481771 124.481771 58: seq: 19, set_next_step_dir oid=9 dir=0, set_next_step_dir oid=11 dir=1, set_next_step_dir oid=12 dir=1, set_next_step_dir oid=15 dir=0, queue_step oid=9 interval=2671640946 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=2671640946 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0, queue_step oid=12 interval=2671640946 count=1 add=0
Sent 87 124.481771 124.481771 64: seq: 1a, queue_step oid=12 interval=134486 count=1 add=0, queue_step oid=15 interval=2671640946 count=1 add=0, queue_step oid=15 interval=134486 count=1 add=0, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513, queue_step oid=12 interval=88158 count=4 add=-10513, queue_step oid=15 interval=88158 count=4 add=-10513
Sent 88 124.481771 124.481771 61: seq: 1b, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=12 interval=50683 count=10 add=-2094, queue_step oid=15 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=12 interval=31419 count=22 add=-541
Sent 89 124.481771 124.481771 61: seq: 1c, queue_step oid=15 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=12 interval=20980 count=34 add=-191, queue_step oid=15 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72, queue_step oid=11 interval=15169 count=61 add=-72
Sent 90 124.481771 124.481771 59: seq: 1d, queue_step oid=12 interval=15169 count=61 add=-72, queue_step oid=15 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=12 interval=11220 count=93 add=-31, queue_step oid=15 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15
Sent 91 124.481771 124.481771 61: seq: 1e, queue_step oid=12 interval=8640 count=127 add=-15, queue_step oid=15 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=12 interval=6917 count=165 add=-8, queue_step oid=15 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1, queue_step oid=11 interval=5707 count=156 add=-1
Sent 92 124.482680 124.482680 61: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=12 interval=5707 count=156 add=-1, queue_step oid=15 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0, queue_step oid=12 interval=5626 count=2021 add=0, queue_step oid=15 interval=5626 count=2021 add=0
Sent 93 124.485937 124.485937 14: seq: 10, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 94 124.490936 124.490936 14: seq: 11, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 124.494768 124.494768 14: seq: 12, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 124.498584 124.498584 14: seq: 13, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 124.502411 124.502411 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 98 124.506215 124.506215 14: seq: 15, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 124.512961 124.512961 6: seq: 16, emergency_stop
Dumping receive queue 100 messages
Receive: 0 112.871307 112.549962 14: seq: 1c, analog_in_state oid=20 next_clock=590065408 value=7504
Receive: 1 112.881323 112.549962 15: seq: 1c, analog_in_state oid=21 next_clock=591865408 value=31472
Receive: 2 113.171319 112.549962 14: seq: 1c, analog_in_state oid=20 next_clock=644065408 value=7504
Receive: 3 113.181310 112.549962 15: seq: 1c, analog_in_state oid=21 next_clock=645865408 value=31473
Receive: 4 113.471323 112.549962 14: seq: 1c, analog_in_state oid=20 next_clock=698065408 value=7506
Receive: 5 113.481295 112.549962 15: seq: 1c, analog_in_state oid=21 next_clock=699865408 value=31474
Receive: 6 113.534186 113.534030 11: seq: 1d, clock clock=656672913
Receive: 7 113.771330 113.534030 14: seq: 1d, analog_in_state oid=20 next_clock=752065408 value=7503
Receive: 8 113.781298 113.534030 15: seq: 1d, analog_in_state oid=21 next_clock=753865408 value=31475
Receive: 9 114.071357 113.534030 14: seq: 1d, analog_in_state oid=20 next_clock=806065408 value=7506
Receive: 10 114.081298 113.534030 15: seq: 1d, analog_in_state oid=21 next_clock=807865408 value=31474
Receive: 11 114.371324 113.534030 14: seq: 1d, analog_in_state oid=20 next_clock=860065408 value=7506
Receive: 12 114.381318 113.534030 15: seq: 1d, analog_in_state oid=21 next_clock=861865408 value=31478
Receive: 13 114.518498 114.518331 11: seq: 1e, clock clock=833847258
Receive: 14 114.671337 114.518331 14: seq: 1e, analog_in_state oid=20 next_clock=914065408 value=7506
Receive: 15 114.681331 114.518331 15: seq: 1e, analog_in_state oid=21 next_clock=915865408 value=31479
Receive: 16 114.971310 114.518331 14: seq: 1e, analog_in_state oid=20 next_clock=968065408 value=7505
Receive: 17 114.981295 114.518331 15: seq: 1e, analog_in_state oid=21 next_clock=969865408 value=31476
Receive: 18 115.271327 114.518331 14: seq: 1e, analog_in_state oid=20 next_clock=1022065408 value=7504
Receive: 19 115.281297 114.518331 15: seq: 1e, analog_in_state oid=21 next_clock=1023865408 value=31479
Receive: 20 115.502760 115.502602 11: seq: 1f, clock clock=1011016084
Receive: 21 115.571351 115.502602 14: seq: 1f, analog_in_state oid=20 next_clock=1076065408 value=7503
Receive: 22 115.581297 115.502602 15: seq: 1f, analog_in_state oid=21 next_clock=1077865408 value=31482
Receive: 23 115.871316 115.502602 14: seq: 1f, analog_in_state oid=20 next_clock=1130065408 value=7504
Receive: 24 115.881309 115.502602 15: seq: 1f, analog_in_state oid=21 next_clock=1131865408 value=31485
Receive: 25 116.171314 115.502602 14: seq: 1f, analog_in_state oid=20 next_clock=1184065408 value=7505
Receive: 26 116.181294 115.502602 15: seq: 1f, analog_in_state oid=21 next_clock=1185865408 value=31485
Receive: 27 116.471308 115.502602 14: seq: 1f, analog_in_state oid=20 next_clock=1238065408 value=7504
Receive: 28 116.481308 115.502602 15: seq: 1f, analog_in_state oid=21 next_clock=1239865408 value=31484
Receive: 29 116.487064 116.486907 11: seq: 10, clock clock=1188191002
Receive: 30 116.771310 116.486907 14: seq: 10, analog_in_state oid=20 next_clock=1292065408 value=7504
Receive: 31 116.781305 116.486907 15: seq: 10, analog_in_state oid=21 next_clock=1293865408 value=31487
Receive: 32 117.071382 116.486907 14: seq: 10, analog_in_state oid=20 next_clock=1346065408 value=7501
Receive: 33 117.081358 116.486907 15: seq: 10, analog_in_state oid=21 next_clock=1347865408 value=31487
Receive: 34 117.371577 116.486907 14: seq: 10, analog_in_state oid=20 next_clock=1400065408 value=7506
Receive: 35 117.381421 116.486907 15: seq: 10, analog_in_state oid=21 next_clock=1401865408 value=31487
Receive: 36 117.471983 117.471731 11: seq: 11, clock clock=1365464201
Receive: 37 117.671385 117.471731 14: seq: 11, analog_in_state oid=20 next_clock=1454065408 value=7506
Receive: 38 117.681356 117.471731 15: seq: 11, analog_in_state oid=21 next_clock=1455865408 value=31488
Receive: 39 117.964213 117.471731 14: seq: 11, stats count=130 sum=116002 sumsq=605968
Receive: 40 117.971360 117.471731 14: seq: 11, analog_in_state oid=20 next_clock=1508065408 value=7507
Receive: 41 117.981355 117.471731 15: seq: 11, analog_in_state oid=21 next_clock=1509865408 value=31489
Receive: 42 118.271430 117.471731 14: seq: 11, analog_in_state oid=20 next_clock=1562065408 value=7504
Receive: 43 118.281388 117.471731 15: seq: 11, analog_in_state oid=21 next_clock=1563865408 value=31489
Receive: 44 118.456260 118.455998 11: seq: 12, clock clock=1542632906
Receive: 45 118.571401 118.455998 14: seq: 12, analog_in_state oid=20 next_clock=1616065408 value=7504
Receive: 46 118.581420 118.455998 15: seq: 12, analog_in_state oid=21 next_clock=1617865408 value=31486
Receive: 47 118.871408 118.455998 14: seq: 12, analog_in_state oid=20 next_clock=1670065408 value=7507
Receive: 48 118.881390 118.455998 15: seq: 12, analog_in_state oid=21 next_clock=1671865408 value=31484
Receive: 49 119.171369 118.455998 14: seq: 12, analog_in_state oid=20 next_clock=1724065408 value=7502
Receive: 50 119.181357 118.455998 15: seq: 12, analog_in_state oid=21 next_clock=1725865408 value=31485
Receive: 51 119.440582 119.440331 11: seq: 13, clock clock=1719814350
Receive: 52 119.471353 119.440331 14: seq: 13, analog_in_state oid=20 next_clock=1778065408 value=7506
Receive: 53 119.481365 119.440331 15: seq: 13, analog_in_state oid=21 next_clock=1779865408 value=31485
Receive: 54 119.771387 119.440331 14: seq: 13, analog_in_state oid=20 next_clock=1832065408 value=7507
Receive: 55 119.781367 119.440331 15: seq: 13, analog_in_state oid=21 next_clock=1833865408 value=31484
Receive: 56 120.071436 119.440331 14: seq: 13, analog_in_state oid=20 next_clock=1886065408 value=7508
Receive: 57 120.081446 119.440331 15: seq: 13, analog_in_state oid=21 next_clock=1887865408 value=31482
Receive: 58 120.371408 119.440331 14: seq: 13, analog_in_state oid=20 next_clock=1940065408 value=7508
Receive: 59 120.381377 119.440331 15: seq: 13, analog_in_state oid=21 next_clock=1941865408 value=31481
Receive: 60 120.424800 120.424550 11: seq: 14, clock clock=1896973188
Receive: 61 120.671376 120.424550 14: seq: 14, analog_in_state oid=20 next_clock=1994065408 value=7505
Receive: 62 120.681353 120.424550 15: seq: 14, analog_in_state oid=21 next_clock=1995865408 value=31480
Receive: 63 120.971378 120.424550 14: seq: 14, analog_in_state oid=20 next_clock=2048065408 value=7508
Receive: 64 120.981357 120.424550 15: seq: 14, analog_in_state oid=21 next_clock=2049865408 value=31479
Receive: 65 121.271400 120.424550 14: seq: 14, analog_in_state oid=20 next_clock=2102065408 value=7505
Receive: 66 121.281411 120.424550 15: seq: 14, analog_in_state oid=21 next_clock=2103865408 value=31478
Receive: 67 121.409260 121.408936 11: seq: 15, clock clock=2074165196
Receive: 68 121.571372 121.408936 14: seq: 15, analog_in_state oid=20 next_clock=2156065408 value=7506
Receive: 69 121.581358 121.408936 15: seq: 15, analog_in_state oid=21 next_clock=2157865408 value=31476
Receive: 70 121.871416 121.408936 14: seq: 15, analog_in_state oid=20 next_clock=2210065408 value=7508
Receive: 71 121.881377 121.408936 15: seq: 15, analog_in_state oid=21 next_clock=2211865408 value=31476
Receive: 72 122.171379 121.408936 14: seq: 15, analog_in_state oid=20 next_clock=2264065408 value=7510
Receive: 73 122.181343 121.408936 15: seq: 15, analog_in_state oid=21 next_clock=2265865408 value=31471
Receive: 74 122.393495 122.393223 11: seq: 16, clock clock=2251337040
Receive: 75 122.471371 122.393223 14: seq: 16, analog_in_state oid=20 next_clock=2318065408 value=7505
Receive: 76 122.481336 122.393223 15: seq: 16, analog_in_state oid=21 next_clock=2319865408 value=31470
Receive: 77 122.771373 122.393223 14: seq: 16, analog_in_state oid=20 next_clock=2372065408 value=7506
Receive: 78 122.781376 122.393223 15: seq: 16, analog_in_state oid=21 next_clock=2373865408 value=31467
Receive: 79 123.064305 122.393223 14: seq: 16, stats count=130 sum=115870 sumsq=605345
Receive: 80 123.071360 122.393223 14: seq: 16, analog_in_state oid=20 next_clock=2426065408 value=7509
Receive: 81 123.081343 122.393223 15: seq: 16, analog_in_state oid=21 next_clock=2427865408 value=31462
Receive: 82 123.371416 122.393223 14: seq: 16, analog_in_state oid=20 next_clock=2480065408 value=7505
Receive: 83 123.378008 123.377640 11: seq: 17, clock clock=2428532703
Receive: 84 123.381377 123.377640 15: seq: 17, analog_in_state oid=21 next_clock=2481865408 value=31462
Receive: 85 123.671406 123.377640 14: seq: 17, analog_in_state oid=20 next_clock=2534065408 value=7505
Receive: 86 123.681391 123.377640 15: seq: 17, analog_in_state oid=21 next_clock=2535865408 value=31459
Receive: 87 123.971371 123.377640 14: seq: 17, analog_in_state oid=20 next_clock=2588065408 value=7508
Receive: 88 123.981342 123.377640 15: seq: 17, analog_in_state oid=21 next_clock=2589865408 value=31458
Receive: 89 124.271465 123.377640 14: seq: 17, analog_in_state oid=20 next_clock=2642065408 value=7507
Receive: 90 124.281401 123.377640 15: seq: 17, analog_in_state oid=21 next_clock=2643865408 value=31455
Receive: 91 124.363061 124.362725 11: seq: 18, clock clock=2605849455
Receive: 92 124.485172 124.482680 8: seq: 10, tmcuart_response oid=2 read=b''
Receive: 93 124.489958 124.485937 18: seq: 11, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02\xc8\xa2\xa9'
Receive: 94 124.494079 124.490936 8: seq: 12, tmcuart_response oid=3 read=b''
Receive: 95 124.497906 124.494768 8: seq: 13, tmcuart_response oid=3 read=b''
Receive: 96 124.501720 124.498584 8: seq: 14, tmcuart_response oid=3 read=b''
Receive: 97 124.505546 124.502411 8: seq: 15, tmcuart_response oid=3 read=b''
Receive: 98 124.509335 124.506215 8: seq: 16, tmcuart_response oid=3 read=b''
Receive: 99 124.513328 124.512961 12: seq: 17, shutdown clock=2632892678 static_string_id=Command request
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[200.0, 190.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
Reactor garbage collection: (120.821417205, 92.714081204, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=3172547599 clock_est=(99.848 1942378178 49999077.524) min_half_rtt=0.000053 min_rtt_time=67.139 time_avg=99.848(370.157) clock_avg=1942378178.600(18507507370.895) pred_variance=357392102.669 clock_adj=(-1.163 49999871.250)
Dumping serial stats: bytes_write=1188 bytes_read=5733 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
Dumping send queue 100 messages
Sent 0 66.896082 66.896082 9: seq: 18, identify offset=2240 count=40
Sent 1 66.896443 66.896443 9: seq: 19, identify offset=2280 count=40
Sent 2 66.896799 66.896799 9: seq: 1a, identify offset=2320 count=40
Sent 3 66.897154 66.897154 9: seq: 1b, identify offset=2360 count=40
Sent 4 66.897506 66.897506 9: seq: 1c, identify offset=2400 count=40
Sent 5 66.897857 66.897857 9: seq: 1d, identify offset=2440 count=40
Sent 6 66.898210 66.898210 9: seq: 1e, identify offset=2480 count=40
Sent 7 66.898563 66.898563 9: seq: 1f, identify offset=2520 count=40
Sent 8 66.898917 66.898917 9: seq: 10, identify offset=2560 count=40
Sent 9 66.899272 66.899272 9: seq: 11, identify offset=2600 count=40
Sent 10 66.899628 66.899628 9: seq: 12, identify offset=2640 count=40
Sent 11 66.899982 66.899982 9: seq: 13, identify offset=2680 count=40
Sent 12 66.900417 66.900417 9: seq: 14, identify offset=2720 count=40
Sent 13 66.900779 66.900779 9: seq: 15, identify offset=2760 count=40
Sent 14 66.901133 66.901133 9: seq: 16, identify offset=2800 count=40
Sent 15 66.901488 66.901488 9: seq: 17, identify offset=2840 count=40
Sent 16 66.901845 66.901845 9: seq: 18, identify offset=2880 count=40
Sent 17 66.902198 66.902198 9: seq: 19, identify offset=2920 count=40
Sent 18 66.902552 66.902552 9: seq: 1a, identify offset=2960 count=40
Sent 19 66.902906 66.902906 9: seq: 1b, identify offset=3000 count=40
Sent 20 66.903260 66.903260 9: seq: 1c, identify offset=3040 count=40
Sent 21 66.903611 66.903611 9: seq: 1d, identify offset=3080 count=40
Sent 22 66.903967 66.903967 9: seq: 1e, identify offset=3120 count=40
Sent 23 66.904350 66.904350 9: seq: 1f, identify offset=3160 count=40
Sent 24 66.904708 66.904708 9: seq: 10, identify offset=3200 count=40
Sent 25 66.905062 66.905062 9: seq: 11, identify offset=3240 count=40
Sent 26 66.905415 66.905415 9: seq: 12, identify offset=3265 count=40
Sent 27 66.931900 66.931900 6: seq: 13, get_uptime
Sent 28 66.983107 66.983107 6: seq: 14, get_clock
Sent 29 67.036779 67.036779 6: seq: 15, get_clock
Sent 30 67.087915 67.087915 6: seq: 16, get_clock
Sent 31 67.138699 67.138699 6: seq: 17, get_clock
Sent 32 67.189348 67.189348 6: seq: 18, get_clock
Sent 33 67.239988 67.239988 6: seq: 19, get_clock
Sent 34 67.291095 67.291095 6: seq: 1a, get_clock
Sent 35 67.341763 67.341763 6: seq: 1b, get_clock
Sent 36 67.348778 67.348778 6: seq: 1c, get_clock
Sent 37 68.333105 68.333105 6: seq: 1d, get_clock
Sent 38 68.611427 68.611427 6: seq: 1e, get_config
Sent 39 68.612389 68.612389 7: seq: 1f, allocate_oids count=0
Sent 40 68.612557 68.612557 11: seq: 10, finalize_config crc=3912464276
Sent 41 68.612737 68.612737 6: seq: 11, get_config
Sent 42 69.317660 69.317660 6: seq: 12, get_clock
Sent 43 70.301851 70.301851 6: seq: 13, get_clock
Sent 44 71.286195 71.286195 6: seq: 14, get_clock
Sent 45 72.270955 72.270955 6: seq: 15, get_clock
Sent 46 73.255092 73.255092 6: seq: 16, get_clock
Sent 47 74.239352 74.239352 6: seq: 17, get_clock
Sent 48 75.223669 75.223669 6: seq: 18, get_clock
Sent 49 76.208290 76.208290 6: seq: 19, get_clock
Sent 50 77.193045 77.193045 6: seq: 1a, get_clock
Sent 51 78.177628 78.177628 6: seq: 1b, get_clock
Sent 52 79.162509 79.162509 6: seq: 1c, get_clock
Sent 53 80.146739 80.146739 6: seq: 1d, get_clock
Sent 54 81.131013 81.131013 6: seq: 1e, get_clock
Sent 55 82.115604 82.115604 6: seq: 1f, get_clock
Sent 56 83.099862 83.099862 6: seq: 10, get_clock
Sent 57 84.084534 84.084534 6: seq: 11, get_clock
Sent 58 85.068867 85.068867 6: seq: 12, get_clock
Sent 59 86.053319 86.053319 6: seq: 13, get_clock
Sent 60 87.037638 87.037638 6: seq: 14, get_clock
Sent 61 88.021852 88.021852 6: seq: 15, get_clock
Sent 62 89.006534 89.006534 6: seq: 16, get_clock
Sent 63 89.993978 89.993978 6: seq: 17, get_clock
Sent 64 90.978423 90.978423 6: seq: 18, get_clock
Sent 65 91.962772 91.962772 6: seq: 19, get_clock
Sent 66 92.947645 92.947645 6: seq: 1a, get_clock
Sent 67 93.931956 93.931956 6: seq: 1b, get_clock
Sent 68 94.916834 94.916834 6: seq: 1c, get_clock
Sent 69 95.901057 95.901057 6: seq: 1d, get_clock
Sent 70 96.885972 96.885972 6: seq: 1e, get_clock
Sent 71 97.870206 97.870206 6: seq: 1f, get_clock
Sent 72 98.854471 98.854471 6: seq: 10, get_clock
Sent 73 99.838734 99.838734 6: seq: 11, get_clock
Sent 74 100.823692 100.823692 6: seq: 12, get_clock
Sent 75 101.809190 101.809190 6: seq: 13, get_clock
Sent 76 102.794015 102.794015 6: seq: 14, get_clock
Sent 77 103.778386 103.778386 6: seq: 15, get_clock
Sent 78 104.762510 104.762510 6: seq: 16, get_clock
Sent 79 105.747089 105.747089 6: seq: 17, get_clock
Sent 80 106.731291 106.731291 6: seq: 18, get_clock
Sent 81 107.716085 107.716085 6: seq: 19, get_clock
Sent 82 108.700565 108.700565 6: seq: 1a, get_clock
Sent 83 109.684792 109.684792 6: seq: 1b, get_clock
Sent 84 110.669057 110.669057 6: seq: 1c, get_clock
Sent 85 111.653309 111.653309 6: seq: 1d, get_clock
Sent 86 112.638047 112.638047 6: seq: 1e, get_clock
Sent 87 113.622176 113.622176 6: seq: 1f, get_clock
Sent 88 114.606477 114.606477 6: seq: 10, get_clock
Sent 89 115.590548 115.590548 6: seq: 11, get_clock
Sent 90 116.574802 116.574802 6: seq: 12, get_clock
Sent 91 117.559825 117.559825 6: seq: 13, get_clock
Sent 92 118.544131 118.544131 6: seq: 14, get_clock
Sent 93 119.528436 119.528436 6: seq: 15, get_clock
Sent 94 120.513098 120.513098 6: seq: 16, get_clock
Sent 95 121.497827 121.497827 6: seq: 17, get_clock
Sent 96 122.482194 122.482194 6: seq: 18, get_clock
Sent 97 123.466910 123.466910 6: seq: 19, get_clock
Sent 98 124.451848 124.451848 6: seq: 1a, get_clock
Sent 99 124.517242 124.517242 6: seq: 1b, emergency_stop
Dumping receive queue 100 messages
Receive: 0 66.899373 66.899272 49: seq: 12, identify_response offset=2600 data=b'\x1d\xa1\xa5GhNv\xf4\xea\xe7\xc0*\x1a\xcdX\t}0\x86\xdf\x9b\xf7\xefTeG\xdd\xb7c\x98\xec9&\rI\xb2\x04\xb6]{'
Receive: 1 66.899729 66.899628 49: seq: 13, identify_response offset=2640 data=b'~\x8b\x91G\xd9\xde\x82\x8b\x19\x93\xda\x01\x1a\xa9i\x7f\x95\xcc\xee\x90\xba\x9b\xb8t/\xa8G\xafa\x04\x98\x9d\x01nW\xbd$\xe7\xe5a'
Receive: 2 66.900146 66.899982 49: seq: 14, identify_response offset=2680 data=b'j\xef@\xf9 U\xa9\xe8\x81\xd2\x9b\x97\x0e\x00\xdc\x90\xd7\xd3A\x16\x9d:T[\x92\x95\x92\xa9\x8a#^\xcf\x9f\x8a\xe0<5\xe41\xf7'
Receive: 3 66.900520 66.900417 49: seq: 15, identify_response offset=2720 data=b'\xb0\x001\xa1\xd2\x13k"\xdb\xa3\x8e\xf3\x05\xfb\t\xf2!\xa8sn\xb1L\xdb\xe1\x8b\x83\xfc\x1bU\x83\xea\xad\xdb\xa6F\xfa\x05\xbc\xa2g'
Receive: 4 66.900881 66.900779 49: seq: 16, identify_response offset=2760 data=b'\x04\x89}[\xf4\xf0\xe4{J\x00#\x08\xebjH\xca\xd4\xe3\xe4\x8f\x97W\xdf\xd3\x8b\x8fy\xf3P\xe51\x1aX]\x0c\x98E`;\xe0'
Receive: 5 66.901235 66.901133 49: seq: 17, identify_response offset=2800 data=b'D\r\x88VMN\x1d_\x90tREN\x10+_H?\x8f^Y0\xff\x84\x82.\n6I\xa2\x12n=HU\xc6M\x834Q'
Receive: 6 66.901589 66.901488 49: seq: 18, identify_response offset=2840 data=b'.\x02\x06i\x9a\xc1w\xf4\tV\xaa\xe1bZ4\xf6\x15\xfeK\xc0\xdb\xf7?\xdcG+\xd5\x07\x82$Fr\xe9J\xba\\\xb4\xb3n\xa2'
Receive: 7 66.901946 66.901845 49: seq: 19, identify_response offset=2880 data=b'\xf2\xd8\xf9\xa9\xee\xd39\xfa\x1a\xf3\x86?#)\xbc6+S\x10j\x10\x9cc\x10\xa1\\\xc8\xd5\xe3\xe7\x91}}\x06?\xa1\x1f$T\xc9'
Receive: 8 66.902299 66.902198 49: seq: 1a, identify_response offset=2920 data=b'\xae\xde-p\xce\xdc\xab\xea\x83@x\xc8m[\x0b\xc9\x95f\xa8\xfe\xedK\x8ck\x12\xfd\x91{\xfbc\x8f\xc1\xbc\x16I\xf0\x92\xf6\xf1\xe7'
Receive: 9 66.902653 66.902552 49: seq: 1b, identify_response offset=2960 data=b'\x1c\x95Cwv\r\xec%\xa1\x08\xf2\xb2z\xd5\xd0\xbd\xd4\xcc\xd8:t\r\xd8\xe3\xf1"\xfeC\x10\xee\x9d\xba\xd7\x8f\xdc\xdc\x93\xd7\x80U'
Receive: 10 66.903007 66.902906 49: seq: 1c, identify_response offset=3000 data=b'c#\xd6\xd0\xbd0x\xb8\xf6\xa9\x81Z4\xaf\x10\x17\x9fJ\x9c@\xd9\xb2\xbe!\x99n#\xf7"q\xd4^\xf6\x0e`\xde\x1d|a&'
Receive: 11 66.903361 66.903260 49: seq: 1d, identify_response offset=3040 data=b'\xdek\xc2\\fr*K\xf5d\x82\xc7\xc3\xe8\x0bl\xfa\xafv\xe7\x18)\xc9\xfe\xa1R\xac\xeff]&\x89Y^[\xf2\xc5{\xc49'
Receive: 12 66.903712 66.903611 49: seq: 1e, identify_response offset=3080 data=b'\xb5 \x1d\xcd\xac\xf3\xec\x9a\xa6\xba7lz9\xd4{\xf4\x97\xbc\x9dv;\x0e\xf1\x96\xba\xfeP\x0c\x81S\xc9M&"\xb5\xaaar\xe9'
Receive: 13 66.904088 66.903967 49: seq: 1f, identify_response offset=3120 data=b"\x12o\xfbLqZ\x86'\x1b\x89G7\xe9\xb7\xa6\xfd+\r\xd2y\xe7\xeeOU R\xc5\xea0\xaa\x84\x1d\xeaWU\xbaJ\xa7\xf6r"
Receive: 14 66.904453 66.904350 49: seq: 10, identify_response offset=3160 data=b'j\xf4\x8f\xfcM]\xd56q\xcd\xb8E\xa7\x8e\x1e~\x04.\x9b-\x9c\xd0_0\x83\xc9\x98\x81\xbag\xe7\x16O\x1c\x01[w\xc4\xfe\xda'
Receive: 15 66.904810 66.904708 49: seq: 11, identify_response offset=3200 data=b'o\xca9]+\x0b\xdb!<\xfd\xd0\xe5\xa9\x1e\x16\xb3\xf4~\xc9\xe8\xff\x03\xa6\x99\x97\xc1&\x84\xfe\x97*\xf0\x82\xff\x80-\xc3x\x9d\x85'
Receive: 16 66.905164 66.905062 34: seq: 12, identify_response offset=3240 data=b'Y\x1eDa\xb2\x8e\xcew\xf7\xe7\xc5\xefi\xb2=\xcf\xe2`\xf5\xe9?\x84\x7f}\xc9'
Receive: 17 66.905515 66.905415 9: seq: 13, identify_response offset=3265 data=b''
Receive: 18 66.932112 66.931900 12: seq: 14, uptime high=0 clock=296602936
Receive: 19 66.984197 66.983107 11: seq: 15, clock clock=299207283
Receive: 20 67.036934 67.036779 11: seq: 16, clock clock=301844211
Receive: 21 67.088083 67.087915 11: seq: 17, clock clock=304401609
Receive: 22 67.138806 67.138699 11: seq: 18, clock clock=306937891
Receive: 23 67.189459 67.189348 11: seq: 19, clock clock=309470591
Receive: 24 67.240130 67.239988 11: seq: 1a, clock clock=312004134
Receive: 25 67.291244 67.291095 11: seq: 1b, clock clock=314559576
Receive: 26 67.341870 67.341763 11: seq: 1c, clock clock=317091066
Receive: 27 67.348908 67.348778 11: seq: 1d, clock clock=317442759
Receive: 28 68.333232 68.333105 11: seq: 1e, clock clock=366659014
Receive: 29 68.611574 68.611427 10: seq: 1f, config is_config=0 crc=0 is_shutdown=0 move_count=0
Receive: 30 68.612832 68.612737 15: seq: 12, config is_config=1 crc=3912464276 is_shutdown=0 move_count=1024
Receive: 31 69.317932 69.317660 11: seq: 13, clock clock=415890889
Receive: 32 70.301981 70.301851 11: seq: 14, clock clock=465095520
Receive: 33 71.100233 70.301851 14: seq: 14, stats count=150 sum=177625 sumsq=1051699
Receive: 34 71.286352 71.286195 11: seq: 15, clock clock=514310513
Receive: 35 72.271104 72.270955 11: seq: 16, clock clock=563544708
Receive: 36 73.255221 73.255092 11: seq: 17, clock clock=612748100
Receive: 37 74.239478 74.239352 11: seq: 18, clock clock=661958342
Receive: 38 75.223798 75.223669 11: seq: 19, clock clock=711171800
Receive: 39 76.100565 75.223669 13: seq: 19, stats count=55 sum=27358 sumsq=103590
Receive: 40 76.208466 76.208290 11: seq: 1a, clock clock=760402751
Receive: 41 77.193294 77.193045 11: seq: 1b, clock clock=809639759
Receive: 42 78.177817 78.177628 11: seq: 1c, clock clock=858866142
Receive: 43 79.162632 79.162509 11: seq: 1d, clock clock=908105012
Receive: 44 80.146851 80.146739 11: seq: 1e, clock clock=957314092
Receive: 45 81.131169 81.131013 11: seq: 1f, clock clock=1006526245
Receive: 46 81.131179 81.131013 13: seq: 1f, stats count=56 sum=32731 sumsq=165361
Receive: 47 82.115801 82.115604 11: seq: 10, clock clock=1055757591
Receive: 48 83.100140 83.099862 11: seq: 11, clock clock=1104970752
Receive: 49 84.084832 84.084534 11: seq: 12, clock clock=1154204098
Receive: 50 85.069208 85.068867 11: seq: 13, clock clock=1203418055
Receive: 51 86.053597 86.053319 11: seq: 14, clock clock=1252639192
Receive: 52 86.201089 86.053319 13: seq: 14, stats count=56 sum=46899 sumsq=343419
Receive: 53 87.037782 87.037638 11: seq: 15, clock clock=1301850071
Receive: 54 88.021985 88.021852 11: seq: 16, clock clock=1351059062
Receive: 55 89.006670 89.006534 11: seq: 17, clock clock=1400292345
Receive: 56 89.994133 89.993978 11: seq: 18, clock clock=1449664508
Receive: 57 90.978555 90.978423 11: seq: 19, clock clock=1498884288
Receive: 58 91.300981 90.978423 13: seq: 19, stats count=56 sum=30836 sumsq=132297
Receive: 59 91.963038 91.962772 11: seq: 1a, clock clock=1548104524
Receive: 60 92.947926 92.947645 11: seq: 1b, clock clock=1597348415
Receive: 61 93.932224 93.931956 11: seq: 1c, clock clock=1646562459
Receive: 62 94.917044 94.916834 11: seq: 1d, clock clock=1695805893
Receive: 63 95.901175 95.901057 11: seq: 1e, clock clock=1745012131
Receive: 64 96.301042 95.901057 13: seq: 1e, stats count=55 sum=43100 sumsq=298334
Receive: 65 96.886102 96.885972 11: seq: 1f, clock clock=1794257847
Receive: 66 97.870337 97.870206 11: seq: 10, clock clock=1843469039
Receive: 67 98.854600 98.854471 11: seq: 11, clock clock=1892681549
Receive: 68 99.838893 99.838734 11: seq: 12, clock clock=1941894080
Receive: 69 100.823951 100.823692 11: seq: 13, clock clock=1991145008
Receive: 70 101.301248 100.823692 13: seq: 13, stats count=55 sum=32766 sumsq=157220
Receive: 71 101.809487 101.809190 11: seq: 14, clock clock=2040419224
Receive: 72 102.794303 102.794015 11: seq: 15, clock clock=2089661956
Receive: 73 103.778679 103.778386 11: seq: 16, clock clock=2138879572
Receive: 74 104.762790 104.762510 11: seq: 17, clock clock=2188084822
Receive: 75 105.747377 105.747089 11: seq: 18, clock clock=2237313626
Receive: 76 106.301296 105.747089 13: seq: 18, stats count=55 sum=55009 sumsq=448770
Receive: 77 106.731655 106.731291 11: seq: 19, clock clock=2286523902
Receive: 78 107.716352 107.716085 11: seq: 1a, clock clock=2335762096
Receive: 79 108.700871 108.700565 11: seq: 1b, clock clock=2384987586
Receive: 80 109.685064 109.684792 11: seq: 1c, clock clock=2434196547
Receive: 81 110.669312 110.669057 11: seq: 1d, clock clock=2483409817
Receive: 82 111.401293 110.669057 13: seq: 1d, stats count=56 sum=55416 sumsq=442884
Receive: 83 111.653559 111.653309 11: seq: 1e, clock clock=2532621968
Receive: 84 112.638209 112.638047 11: seq: 1f, clock clock=2581856542
Receive: 85 113.622299 113.622176 11: seq: 10, clock clock=2631061147
Receive: 86 114.606594 114.606477 11: seq: 11, clock clock=2680275933
Receive: 87 115.590686 115.590548 11: seq: 12, clock clock=2729480251
Receive: 88 116.501164 115.590548 13: seq: 12, stats count=56 sum=31341 sumsq=159976
Receive: 89 116.574940 116.574802 11: seq: 13, clock clock=2778692792
Receive: 90 117.560109 117.559825 11: seq: 14, clock clock=2827947710
Receive: 91 118.544401 118.544131 11: seq: 15, clock clock=2877162220
Receive: 92 119.528705 119.528436 11: seq: 16, clock clock=2926377223
Receive: 93 120.513324 120.513098 11: seq: 17, clock clock=2975608846
Receive: 94 121.498091 121.497827 11: seq: 18, clock clock=3024846808
Receive: 95 121.501262 121.497827 13: seq: 18, stats count=56 sum=53018 sumsq=424260
Receive: 96 122.482457 122.482194 11: seq: 19, clock clock=3074065022
Receive: 97 123.467182 123.466910 11: seq: 1a, clock clock=3123301019
Receive: 98 124.452113 124.451848 11: seq: 1b, clock clock=3172547599
Receive: 99 124.517673 124.517242 12: seq: 1c, shutdown clock=3175818844 static_string_id=Command request
MCU 'beacon' shutdown: Emergency stop
clocksync state: mcu_freq=32000000 last_clock=2009999838 clock_est=(99.408 1231632468 31999757.054) min_half_rtt=0.000181 min_rtt_time=68.497 time_avg=99.408(352.343) clock_avg=1231632468.436(11274880918.568) pred_variance=115226658.131 clock_adj=(-1.244 31999732.000)
Dumping serial stats: bytes_write=704 bytes_read=21646 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
Dumping send queue 100 messages
Sent 0 68.171215 68.171215 8: seq: 11, identify offset=40 count=40
Sent 1 68.171969 68.171969 8: seq: 12, identify offset=80 count=40
Sent 2 68.172686 68.172686 9: seq: 13, identify offset=120 count=40
Sent 3 68.173506 68.173506 9: seq: 14, identify offset=160 count=40
Sent 4 68.174264 68.174264 9: seq: 15, identify offset=200 count=40
Sent 5 68.175004 68.175004 9: seq: 16, identify offset=240 count=40
Sent 6 68.175689 68.175689 9: seq: 17, identify offset=280 count=40
Sent 7 68.176505 68.176505 9: seq: 18, identify offset=320 count=40
Sent 8 68.177219 68.177219 9: seq: 19, identify offset=360 count=40
Sent 9 68.177955 68.177955 9: seq: 1a, identify offset=400 count=40
Sent 10 68.178637 68.178637 9: seq: 1b, identify offset=440 count=40
Sent 11 68.179338 68.179338 9: seq: 1c, identify offset=480 count=40
Sent 12 68.180144 68.180144 9: seq: 1d, identify offset=520 count=40
Sent 13 68.180878 68.180878 9: seq: 1e, identify offset=560 count=40
Sent 14 68.181571 68.181571 9: seq: 1f, identify offset=600 count=40
Sent 15 68.182294 68.182294 9: seq: 10, identify offset=640 count=40
Sent 16 68.183026 68.183026 9: seq: 11, identify offset=680 count=40
Sent 17 68.184131 68.184131 9: seq: 12, identify offset=720 count=40
Sent 18 68.184856 68.184856 9: seq: 13, identify offset=760 count=40
Sent 19 68.185562 68.185562 9: seq: 14, identify offset=800 count=40
Sent 20 68.186284 68.186284 9: seq: 15, identify offset=840 count=40
Sent 21 68.187019 68.187019 9: seq: 16, identify offset=880 count=40
Sent 22 68.187708 68.187708 9: seq: 17, identify offset=920 count=40
Sent 23 68.188437 68.188437 9: seq: 18, identify offset=937 count=40
Sent 24 68.190653 68.190653 6: seq: 19, get_uptime
Sent 25 68.241605 68.241605 6: seq: 1a, get_clock
Sent 26 68.293213 68.293213 6: seq: 1b, get_clock
Sent 27 68.344387 68.344387 6: seq: 1c, get_clock
Sent 28 68.395323 68.395323 6: seq: 1d, get_clock
Sent 29 68.446205 68.446205 6: seq: 1e, get_clock
Sent 30 68.497043 68.497043 6: seq: 1f, get_clock
Sent 31 68.548690 68.548690 6: seq: 10, get_clock
Sent 32 68.599656 68.599656 6: seq: 11, get_clock
Sent 33 68.601413 68.601413 6: seq: 12, get_clock
Sent 34 69.279783 69.279783 6: seq: 13, get_config
Sent 35 69.487090 69.487090 10: seq: 14, beacon_nvm_read len=8 offset=65534
Sent 36 69.488245 69.488245 8: seq: 15, beacon_nvm_read len=20 offset=0
Sent 37 69.489925 69.489925 7: seq: 16, beacon_stream en=0
Sent 38 69.491017 69.491017 8: seq: 17, beacon_accel_stream en=0 scale=0
Sent 39 69.492193 69.492193 7: seq: 18, allocate_oids count=1
Sent 40 69.492305 69.492305 13: seq: 19, config_trsync oid=0, finalize_config crc=2501485974
Sent 41 69.492458 69.492458 6: seq: 1a, get_config
Sent 42 69.585883 69.585883 6: seq: 1b, get_clock
Sent 43 70.569993 70.569993 6: seq: 1c, get_clock
Sent 44 71.554688 71.554688 6: seq: 1d, get_clock
Sent 45 72.538926 72.538926 6: seq: 1e, get_clock
Sent 46 73.523092 73.523092 6: seq: 1f, get_clock
Sent 47 74.507878 74.507878 6: seq: 10, get_clock
Sent 48 75.492542 75.492542 6: seq: 11, get_clock
Sent 49 76.476647 76.476647 6: seq: 12, get_clock
Sent 50 77.461424 77.461424 6: seq: 13, get_clock
Sent 51 78.445581 78.445581 6: seq: 14, get_clock
Sent 52 79.430476 79.430476 6: seq: 15, get_clock
Sent 53 80.414755 80.414755 6: seq: 16, get_clock
Sent 54 81.399098 81.399098 6: seq: 17, get_clock
Sent 55 82.383863 82.383863 6: seq: 18, get_clock
Sent 56 83.368492 83.368492 6: seq: 19, get_clock
Sent 57 84.352587 84.352587 6: seq: 1a, get_clock
Sent 58 85.337628 85.337628 6: seq: 1b, get_clock
Sent 59 86.321998 86.321998 6: seq: 1c, get_clock
Sent 60 87.306798 87.306798 6: seq: 1d, get_clock
Sent 61 88.291367 88.291367 6: seq: 1e, get_clock
Sent 62 89.276180 89.276180 6: seq: 1f, get_clock
Sent 63 90.260618 90.260618 6: seq: 10, get_clock
Sent 64 91.246359 91.246359 6: seq: 11, get_clock
Sent 65 92.230606 92.230606 6: seq: 12, get_clock
Sent 66 93.214680 93.214680 6: seq: 13, get_clock
Sent 67 94.199648 94.199648 6: seq: 14, get_clock
Sent 68 95.183643 95.183643 6: seq: 15, get_clock
Sent 69 96.167899 96.167899 6: seq: 16, get_clock
Sent 70 97.152093 97.152093 6: seq: 17, get_clock
Sent 71 98.136303 98.136303 6: seq: 18, get_clock
Sent 72 99.120548 99.120548 6: seq: 19, get_clock
Sent 73 100.105305 100.105305 6: seq: 1a, get_clock
Sent 74 101.090343 101.090343 6: seq: 1b, get_clock
Sent 75 102.074980 102.074980 6: seq: 1c, get_clock
Sent 76 103.059950 103.059950 6: seq: 1d, get_clock
Sent 77 104.044625 104.044625 6: seq: 1e, get_clock
Sent 78 105.028749 105.028749 6: seq: 1f, get_clock
Sent 79 106.013291 106.013291 6: seq: 10, get_clock
Sent 80 106.997302 106.997302 6: seq: 11, get_clock
Sent 81 107.981483 107.981483 6: seq: 12, get_clock
Sent 82 108.965547 108.965547 6: seq: 13, get_clock
Sent 83 109.949646 109.949646 6: seq: 14, get_clock
Sent 84 110.934017 110.934017 6: seq: 15, get_clock
Sent 85 111.918825 111.918825 6: seq: 16, get_clock
Sent 86 112.903104 112.903104 6: seq: 17, get_clock
Sent 87 113.887354 113.887354 6: seq: 18, get_clock
Sent 88 114.871614 114.871614 6: seq: 19, get_clock
Sent 89 115.855930 115.855930 6: seq: 1a, get_clock
Sent 90 116.840249 116.840249 6: seq: 1b, get_clock
Sent 91 117.826319 117.826319 6: seq: 1c, get_clock
Sent 92 118.811193 118.811193 6: seq: 1d, get_clock
Sent 93 119.795510 119.795510 6: seq: 1e, get_clock
Sent 94 120.779697 120.779697 6: seq: 1f, get_clock
Sent 95 121.763871 121.763871 6: seq: 10, get_clock
Sent 96 122.748090 122.748090 6: seq: 11, get_clock
Sent 97 123.732348 123.732348 6: seq: 12, get_clock
Sent 98 124.540350 124.540350 6: seq: 13, emergency_stop
Sent 99 124.540620 124.540620 7: seq: 14, beacon_stream en=0
Dumping receive queue 100 messages
Receive: 0 119.820158 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1884763055 delta_clock=0 data=b'\x82\x8esf'
Receive: 1 119.915054 119.795510 16: seq: 1f, beacon_status mcu_temp=44338 supply_voltage=48786 coil_temp=55136 status=1
Receive: 2 119.920158 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1887963835 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 3 120.015107 119.795510 16: seq: 1f, beacon_status mcu_temp=44338 supply_voltage=48786 coil_temp=55136 status=1
Receive: 4 120.020202 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1891164621 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 5 120.115397 119.795510 16: seq: 1f, beacon_status mcu_temp=44338 supply_voltage=48786 coil_temp=55136 status=1
Receive: 6 120.120202 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1894365404 delta_clock=0 data=b'\x82\x8esf'
Receive: 7 120.215526 119.795510 16: seq: 1f, beacon_status mcu_temp=44338 supply_voltage=48786 coil_temp=55136 status=1
Receive: 8 120.220250 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1897566185 delta_clock=0 data=b'\x82\x8esf'
Receive: 9 120.315743 119.795510 16: seq: 1f, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 10 120.320268 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1900766973 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 11 120.415948 119.795510 16: seq: 1f, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 12 120.420274 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1903967760 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 13 120.516062 119.795510 16: seq: 1f, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 14 120.520342 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1907168543 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 15 120.616335 119.795510 16: seq: 1f, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 16 120.620328 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1910369331 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 17 120.716461 119.795510 16: seq: 1f, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 18 120.720375 119.795510 18: seq: 1f, beacon_data samples=1 start_clock=1913570117 delta_clock=0 data=b'\x82\x8esf'
Receive: 19 120.780279 120.779697 11: seq: 10, clock clock=1915517037
Receive: 20 120.816643 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 21 120.820391 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1916770903 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 22 120.916868 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 23 120.920410 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1919971692 delta_clock=0 data=b'\x82\x8esf'
Receive: 24 121.017000 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 25 121.020461 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1923172483 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 26 121.117302 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 27 121.120473 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1926373262 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 28 121.217435 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48786 coil_temp=55136 status=1
Receive: 29 121.220510 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1929574033 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 30 121.317705 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48787 coil_temp=55136 status=1
Receive: 31 121.320510 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1932774811 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 32 121.417900 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48787 coil_temp=55136 status=1
Receive: 33 121.420548 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1935975594 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 34 121.518024 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48787 coil_temp=55136 status=1
Receive: 35 121.520556 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1939176373 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 36 121.618343 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48787 coil_temp=55136 status=1
Receive: 37 121.620589 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1942377156 delta_clock=0 data=b'\x82\x8esf'
Receive: 38 121.718352 120.779697 16: seq: 10, beacon_status mcu_temp=44339 supply_voltage=48787 coil_temp=55136 status=1
Receive: 39 121.720601 120.779697 18: seq: 10, beacon_data samples=1 start_clock=1945577940 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 40 121.764424 121.763871 11: seq: 11, clock clock=1947009741
Receive: 41 121.818584 121.763871 16: seq: 11, beacon_status mcu_temp=44339 supply_voltage=48788 coil_temp=55136 status=1
Receive: 42 121.820654 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1948778719 delta_clock=0 data=b'\x82\x8esf'
Receive: 43 121.918806 121.763871 16: seq: 11, beacon_status mcu_temp=44339 supply_voltage=48788 coil_temp=55135 status=1
Receive: 44 121.920681 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1951979497 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 45 122.018967 121.763871 16: seq: 11, beacon_status mcu_temp=44339 supply_voltage=48788 coil_temp=55134 status=1
Receive: 46 122.020686 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1955180277 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 47 122.119238 121.763871 16: seq: 11, beacon_status mcu_temp=44339 supply_voltage=48788 coil_temp=55133 status=1
Receive: 48 122.120739 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1958381064 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 49 122.219355 121.763871 16: seq: 11, beacon_status mcu_temp=44340 supply_voltage=48788 coil_temp=55133 status=1
Receive: 50 122.220728 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1961581845 delta_clock=0 data=b'\x82\x8esf'
Receive: 51 122.319585 121.763871 16: seq: 11, beacon_status mcu_temp=44340 supply_voltage=48788 coil_temp=55133 status=1
Receive: 52 122.320769 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1964782625 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 53 122.419760 121.763871 16: seq: 11, beacon_status mcu_temp=44340 supply_voltage=48788 coil_temp=55133 status=1
Receive: 54 122.420805 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1967983413 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 55 122.519934 121.763871 16: seq: 11, beacon_status mcu_temp=44340 supply_voltage=48788 coil_temp=55132 status=1
Receive: 56 122.520809 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1971184194 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 57 122.620187 121.763871 16: seq: 11, beacon_status mcu_temp=44340 supply_voltage=48788 coil_temp=55132 status=1
Receive: 58 122.620855 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1974384974 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 59 122.720265 121.763871 16: seq: 11, beacon_status mcu_temp=44341 supply_voltage=48788 coil_temp=55132 status=1
Receive: 60 122.720898 121.763871 18: seq: 11, beacon_data samples=1 start_clock=1977586073 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 61 122.748640 122.748090 11: seq: 12, clock clock=1978503753
Receive: 62 122.820493 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48788 coil_temp=55131 status=1
Receive: 63 122.820943 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1980786528 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 64 122.920813 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48788 coil_temp=55130 status=1
Receive: 65 122.920944 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1983987327 delta_clock=0 data=b'\x82\x8esf'
Receive: 66 123.020921 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48788 coil_temp=55129 status=1
Receive: 67 123.021110 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1987188108 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 68 123.121167 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1990388896 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 69 123.121299 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48788 coil_temp=55129 status=1
Receive: 70 123.221145 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1993589681 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 71 123.221380 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48789 coil_temp=55128 status=1
Receive: 72 123.321053 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1996790467 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 73 123.321590 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48789 coil_temp=55126 status=1
Receive: 74 123.421217 122.748090 18: seq: 12, beacon_data samples=1 start_clock=1999991257 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 75 123.421793 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48789 coil_temp=55125 status=1
Receive: 76 123.521183 122.748090 18: seq: 12, beacon_data samples=1 start_clock=2003192042 delta_clock=0 data=b'\x82\x8esf'
Receive: 77 123.522004 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48789 coil_temp=55124 status=1
Receive: 78 123.621219 122.748090 18: seq: 12, beacon_data samples=1 start_clock=2006392831 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 79 123.622218 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48790 coil_temp=55124 status=1
Receive: 80 123.721173 122.748090 18: seq: 12, beacon_data samples=1 start_clock=2009593615 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 81 123.722405 122.748090 16: seq: 12, beacon_status mcu_temp=44341 supply_voltage=48790 coil_temp=55124 status=1
Receive: 82 123.732875 123.732348 11: seq: 13, clock clock=2009999838
Receive: 83 123.821227 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2012794407 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 84 123.822553 123.732348 16: seq: 13, beacon_status mcu_temp=44341 supply_voltage=48790 coil_temp=55124 status=1
Receive: 85 123.921187 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2015995191 delta_clock=0 data=b'\x82\x8esf'
Receive: 86 123.922757 123.732348 16: seq: 13, beacon_status mcu_temp=44341 supply_voltage=48790 coil_temp=55123 status=1
Receive: 87 124.021194 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2019195975 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 88 124.022908 123.732348 16: seq: 13, beacon_status mcu_temp=44341 supply_voltage=48790 coil_temp=55123 status=1
Receive: 89 124.121293 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2022396748 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 90 124.123136 123.732348 16: seq: 13, beacon_status mcu_temp=44342 supply_voltage=48790 coil_temp=55123 status=1
Receive: 91 124.221281 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2025597535 delta_clock=0 data=b'\x82\x8esf'
Receive: 92 124.223435 123.732348 16: seq: 13, beacon_status mcu_temp=44342 supply_voltage=48790 coil_temp=55123 status=1
Receive: 93 124.321288 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2028798328 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 94 124.323564 123.732348 16: seq: 13, beacon_status mcu_temp=44342 supply_voltage=48790 coil_temp=55122 status=1
Receive: 95 124.421363 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2031999119 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 96 124.423811 123.732348 16: seq: 13, beacon_status mcu_temp=44342 supply_voltage=48790 coil_temp=55121 status=1
Receive: 97 124.521356 123.732348 18: seq: 13, beacon_data samples=1 start_clock=2035199901 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 98 124.523901 123.732348 16: seq: 13, beacon_status mcu_temp=44343 supply_voltage=48790 coil_temp=55121 status=1
Receive: 99 124.540868 124.540350 12: seq: 14, shutdown clock=2035855285 static_string_id=Emergency stop
Requested toolhead position at shutdown time 62.349040: (200.0, 200.0, 200.0)
Stats 125.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4871 bytes_read=14438 bytes_retransmit=9 bytes_invalid=0 send_seq=382 receive_seq=382 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000442 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=1188 bytes_read=5733 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=49999077 adj=49999871 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1790 bytes_read=11261 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=63999433 adj=63999240 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=710 bytes_read=21874 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=31999756 adj=31999732 coil_temp=22.4 refs=0 mcu_temp=22.23 supply_voltage=2.978 sysload=0.79 cputime=14.954 memavail=3408188 print_time=62.697 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 126.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4931 bytes_read=14577 bytes_retransmit=9 bytes_invalid=0 send_seq=386 receive_seq=386 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000452 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 bytes_write=1194 bytes_read=5749 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=49999098 adj=49999880 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1796 bytes_read=11361 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=63999433 adj=63999280 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=716 bytes_read=22230 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=31999755 adj=31999697 coil_temp=22.4 refs=0 mcu_temp=22.24 supply_voltage=2.978 sysload=0.79 cputime=15.005 memavail=3408188 print_time=62.697 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 127.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4975 bytes_read=14704 bytes_retransmit=9 bytes_invalid=0 send_seq=389 receive_seq=389 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000454 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000019 bytes_write=1200 bytes_read=5778 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=49999120 adj=49999854 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1802 bytes_read=11499 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=63999433 adj=63999247 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=40.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=722 bytes_read=22586 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=31999755 adj=31999661 coil_temp=22.4 refs=0 mcu_temp=22.25 supply_voltage=2.978 sysload=0.79 cputime=15.060 memavail=3407484 print_time=62.697 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 128.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=5019 bytes_read=14875 bytes_retransmit=9 bytes_invalid=0 send_seq=392 receive_seq=392 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000454 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000019 bytes_write=1206 bytes_read=5794 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=49999144 adj=49999875 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1808 bytes_read=11592 bytes_retransmit=9 bytes_invalid=0 send_seq=214 receive_seq=214 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999433 adj=63999241 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=41.9 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=728 bytes_read=22942 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=31999758 adj=31999668 coil_temp=22.4 refs=0 mcu_temp=22.24 supply_voltage=2.978 sysload=0.79 cputime=15.111 memavail=3407508 print_time=62.697 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 129.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000007 mcu_task_stddev=0.000006 bytes_write=5063 bytes_read=15002 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=180000458 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000019 bytes_write=1212 bytes_read=5810 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=49999168 adj=49999925 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1814 bytes_read=11685 bytes_retransmit=9 bytes_invalid=0 send_seq=215 receive_seq=215 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999433 adj=63999247 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=41.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=734 bytes_read=23298 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=31999758 adj=31999698 coil_temp=22.4 refs=0 mcu_temp=22.23 supply_voltage=2.978 sysload=0.79 cputime=15.164 memavail=3407508 print_time=62.697 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 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 4122018528: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:40:24 2025 (1751046024.3 131.3)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4100189752: New connection
webhooks client 4100189752: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 138.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3660 bytes_read=7597 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=179999150 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=49997093 adj=49989116 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5028 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=63998933 adj=64000068 Octopus_V1.1_F446: temp=27.6 EBB42_v1.2_T0: temp=26.5 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.7 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=32000038 adj=32000764 coil_temp=22.4 refs=0 mcu_temp=21.93 supply_voltage=2.977 sysload=0.75 cputime=19.981 memavail=3403644 print_time=7.514 buffer_time=0.248 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4100189752
webhooks: registering remote method 'reboot_machine' for connection id: 4100189752
webhooks: registering remote method 'pause_job_queue' for connection id: 4100189752
webhooks: registering remote method 'start_job_queue' for connection id: 4100189752
Stats 139.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3666 bytes_read=7700 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=179999648 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=49998192 adj=50002895 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1464 bytes_read=5142 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=63999261 adj=63998755 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.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=32000297 adj=31999934 coil_temp=22.4 refs=0 mcu_temp=21.91 supply_voltage=2.977 sysload=0.75 cputime=20.102 memavail=3406316 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 141.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3672 bytes_read=7890 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=1 freq=180001323 rpi: mcu_awake=0.004 mcu_task_avg=0.000025 mcu_task_stddev=0.000013 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=49998326 adj=50003614 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1476 bytes_read=5343 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=63999449 adj=63999057 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2981 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=32000319 adj=32000215 coil_temp=22.4 refs=0 mcu_temp=21.88 supply_voltage=2.977 sysload=0.85 cputime=20.251 memavail=3401604 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 142.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3684 bytes_read=8024 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=180000919 rpi: mcu_awake=0.004 mcu_task_avg=0.000025 mcu_task_stddev=0.000013 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=49997965 adj=50000903 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1482 bytes_read=5443 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=63999405 adj=63998541 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.6 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3337 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=32000035 adj=31999792 coil_temp=22.4 refs=0 mcu_temp=21.88 supply_voltage=2.977 sysload=0.85 cputime=20.277 memavail=3401592 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 143.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3690 bytes_read=8127 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=180000983 rpi: mcu_awake=0.004 mcu_task_avg=0.000025 mcu_task_stddev=0.000013 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=49997787 adj=49999267 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1488 bytes_read=5571 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=63999378 adj=63998552 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=44.8 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3693 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=31999895 adj=31999241 coil_temp=22.4 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=0.85 cputime=20.301 memavail=3401592 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 144.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3696 bytes_read=8259 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=180000770 rpi: mcu_awake=0.004 mcu_task_avg=0.000025 mcu_task_stddev=0.000013 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=49997717 adj=49998340 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1494 bytes_read=5671 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=63999365 adj=63998552 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4049 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=31999875 adj=31999025 coil_temp=22.4 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=0.85 cputime=20.326 memavail=3401592 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 145.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3702 bytes_read=8362 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=180000665 rpi: mcu_awake=0.004 mcu_task_avg=0.000025 mcu_task_stddev=0.000013 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=49997698 adj=49998106 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=5785 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=63999356 adj=63998864 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=43.8 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4405 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=31999831 adj=31999260 coil_temp=22.4 refs=0 mcu_temp=21.87 supply_voltage=2.977 sysload=0.78 cputime=20.350 memavail=3401596 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 146.5: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3708 bytes_read=8465 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=180000832 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49997706 adj=49997991 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=5913 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=63999403 adj=63999017 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.8 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4761 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=31999844 adj=31999315 coil_temp=22.4 refs=0 mcu_temp=21.88 supply_voltage=2.977 sysload=0.78 cputime=20.384 memavail=3401596 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 147.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3714 bytes_read=8611 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=180000756 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=49997930 adj=49997735 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=6013 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=63999397 adj=63998987 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5117 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=31999826 adj=31999350 coil_temp=22.4 refs=0 mcu_temp=21.90 supply_voltage=2.977 sysload=0.78 cputime=20.419 memavail=3404756 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 148.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3720 bytes_read=8714 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=180000672 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=49997924 adj=49998568 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6113 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=63999382 adj=63999100 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=43.8 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5473 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=31999858 adj=31999428 coil_temp=22.4 refs=0 mcu_temp=21.91 supply_voltage=2.977 sysload=0.78 cputime=20.444 memavail=3404756 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 149.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3726 bytes_read=8817 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=180000596 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=49997925 adj=49998425 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6241 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=63999377 adj=63999169 Octopus_V1.1_F446: temp=26.0 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=43.8 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5829 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=31999841 adj=31999667 coil_temp=22.4 refs=0 mcu_temp=21.93 supply_voltage=2.977 sysload=0.78 cputime=20.468 memavail=3404756 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 150.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3732 bytes_read=8949 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=180000575 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=49997931 adj=49998345 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=6355 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=63999392 adj=63999254 Octopus_V1.1_F446: temp=26.1 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.3 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6185 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=31999829 adj=31999676 coil_temp=22.4 refs=0 mcu_temp=21.95 supply_voltage=2.977 sysload=0.72 cputime=20.493 memavail=3404756 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 151.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3738 bytes_read=9052 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=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=49997941 adj=49998248 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=6455 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=63999388 adj=63999327 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=43.8 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6541 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=31999811 adj=31999659 coil_temp=22.4 refs=0 mcu_temp=21.99 supply_voltage=2.977 sysload=0.72 cputime=20.517 memavail=3404756 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 152.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3744 bytes_read=9169 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=180000565 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=49998019 adj=49998217 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=6583 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=63999401 adj=63999326 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.8 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6897 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=31999808 adj=31999629 coil_temp=22.4 refs=0 mcu_temp=22.00 supply_voltage=2.977 sysload=0.72 cputime=20.562 memavail=3404760 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 153.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3750 bytes_read=9301 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=180000621 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=49998078 adj=49998445 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=6683 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=63999418 adj=63999317 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.3 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7253 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=31999812 adj=31999615 coil_temp=22.4 refs=0 mcu_temp=22.02 supply_voltage=2.977 sysload=0.72 cputime=20.613 memavail=3404760 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 154.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3756 bytes_read=9404 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=180000666 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=49998124 adj=49998511 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1554 bytes_read=6783 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=63999430 adj=63999266 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=456 bytes_read=7609 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=31999815 adj=31999609 coil_temp=22.4 refs=0 mcu_temp=22.03 supply_voltage=2.977 sysload=0.72 cputime=20.664 memavail=3404760 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 155.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3762 bytes_read=9502 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=180000705 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=49998161 adj=49998527 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1560 bytes_read=6925 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=63999450 adj=63999227 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=462 bytes_read=7965 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=31999817 adj=31999608 coil_temp=22.4 refs=0 mcu_temp=22.05 supply_voltage=2.977 sysload=0.66 cputime=20.717 memavail=3404760 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 156.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3768 bytes_read=9627 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=180000693 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 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=49998195 adj=49998516 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1566 bytes_read=7025 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=63999456 adj=63999249 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=43.3 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=468 bytes_read=8321 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=31999816 adj=31999601 coil_temp=22.4 refs=0 mcu_temp=22.06 supply_voltage=2.977 sysload=0.66 cputime=20.770 memavail=3404760 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 157.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3774 bytes_read=9744 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=180000668 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 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=49998234 adj=49998586 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1572 bytes_read=7125 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=63999456 adj=63999293 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=474 bytes_read=8677 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=31999810 adj=31999630 coil_temp=22.4 refs=0 mcu_temp=22.08 supply_voltage=2.978 sysload=0.66 cputime=20.820 memavail=3405396 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 158.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3780 bytes_read=9847 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=180000673 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 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=49998267 adj=49998702 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1578 bytes_read=7253 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=63999458 adj=63999323 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=480 bytes_read=9033 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=31999809 adj=31999641 coil_temp=22.4 refs=0 mcu_temp=22.08 supply_voltage=2.978 sysload=0.66 cputime=20.871 memavail=3405460 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 159.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3786 bytes_read=9979 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=180000655 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 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=49998302 adj=49998723 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1584 bytes_read=7353 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=63999493 adj=63999297 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=486 bytes_read=9389 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=31999809 adj=31999642 coil_temp=22.4 refs=0 mcu_temp=22.09 supply_voltage=2.978 sysload=0.66 cputime=20.921 memavail=3405460 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 160.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3792 bytes_read=10082 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=180000651 rpi: mcu_awake=0.001 mcu_task_avg=0.000018 mcu_task_stddev=0.000017 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=49998339 adj=49998803 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1590 bytes_read=7453 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=63999486 adj=63999526 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=26.7 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=492 bytes_read=9745 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=31999808 adj=31999672 coil_temp=22.4 refs=0 mcu_temp=22.10 supply_voltage=2.978 sysload=0.61 cputime=20.972 memavail=3405460 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 161.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3798 bytes_read=10185 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=180000647 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000022 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=49998363 adj=49998870 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1596 bytes_read=7595 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=63999485 adj=63999426 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=498 bytes_read=10101 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=31999816 adj=31999675 coil_temp=22.4 refs=0 mcu_temp=22.11 supply_voltage=2.978 sysload=0.61 cputime=21.024 memavail=3405460 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 162.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3804 bytes_read=10331 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=180000646 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000022 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=49998382 adj=49998853 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1602 bytes_read=7695 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=63999485 adj=63999385 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=504 bytes_read=10457 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=31999815 adj=31999735 coil_temp=22.5 refs=0 mcu_temp=22.12 supply_voltage=2.978 sysload=0.61 cputime=21.088 memavail=3404464 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 163.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3810 bytes_read=10434 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=180000635 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000022 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=49998399 adj=49998814 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1608 bytes_read=7795 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=63999481 adj=63999356 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=26.8 raspberry_pi: temp=42.8 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=510 bytes_read=10813 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=31999812 adj=31999719 coil_temp=22.5 refs=0 mcu_temp=22.13 supply_voltage=2.978 sysload=0.61 cputime=21.138 memavail=3404464 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 164.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3816 bytes_read=10537 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=180000611 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000022 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=49998394 adj=49998798 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1614 bytes_read=7923 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=63999480 adj=63999333 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=42.4 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=516 bytes_read=11169 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=31999806 adj=31999713 coil_temp=22.5 refs=0 mcu_temp=22.15 supply_voltage=2.978 sysload=0.61 cputime=21.176 memavail=3406124 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 165.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3822 bytes_read=10669 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=180000581 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000022 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=49998399 adj=49998665 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1620 bytes_read=8023 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=63999469 adj=63999362 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=522 bytes_read=11525 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=31999802 adj=31999699 coil_temp=22.5 refs=0 mcu_temp=22.18 supply_voltage=2.978 sysload=0.56 cputime=21.201 memavail=3406124 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 166.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3828 bytes_read=10772 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=180000563 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000022 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=49998399 adj=49998652 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1626 bytes_read=8137 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=63999460 adj=63999338 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=528 bytes_read=11881 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=31999796 adj=31999706 coil_temp=22.5 refs=0 mcu_temp=22.20 supply_voltage=2.978 sysload=0.56 cputime=21.225 memavail=3406124 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 167.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3834 bytes_read=10889 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=180000542 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000022 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=49998405 adj=49998586 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1632 bytes_read=8265 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=63999452 adj=63999301 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=534 bytes_read=12237 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=31999791 adj=31999684 coil_temp=22.5 refs=0 mcu_temp=22.21 supply_voltage=2.978 sysload=0.56 cputime=21.250 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 168.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3840 bytes_read=11021 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=180000534 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000022 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=49998410 adj=49998586 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1638 bytes_read=8365 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=63999448 adj=63999287 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=540 bytes_read=12593 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=31999791 adj=31999679 coil_temp=22.5 refs=0 mcu_temp=22.23 supply_voltage=2.978 sysload=0.56 cputime=21.274 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 169.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3846 bytes_read=11124 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=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000022 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=49998431 adj=49998558 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1644 bytes_read=8465 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=63999449 adj=63999273 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=546 bytes_read=12949 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=31999789 adj=31999694 coil_temp=22.5 refs=0 mcu_temp=22.24 supply_voltage=2.977 sysload=0.56 cputime=21.314 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 170.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3852 bytes_read=11227 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=180000547 rpi: mcu_awake=0.001 mcu_task_avg=0.000016 mcu_task_stddev=0.000022 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=49998452 adj=49998623 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1650 bytes_read=8593 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=63999450 adj=63999252 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=552 bytes_read=13305 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=31999791 adj=31999668 coil_temp=22.5 refs=0 mcu_temp=22.26 supply_voltage=2.977 sysload=0.51 cputime=21.365 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 171.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3858 bytes_read=11359 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=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 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=49998478 adj=49998699 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1656 bytes_read=8707 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=63999450 adj=63999251 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=558 bytes_read=13661 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=31999789 adj=31999682 coil_temp=22.5 refs=0 mcu_temp=22.29 supply_voltage=2.977 sysload=0.51 cputime=21.415 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 172.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3864 bytes_read=11476 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=180000546 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 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=49998501 adj=49998816 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1662 bytes_read=8807 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=63999453 adj=63999262 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=564 bytes_read=14017 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=31999790 adj=31999674 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.977 sysload=0.51 cputime=21.466 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 173.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3870 bytes_read=11579 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=180000540 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 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=49998532 adj=49998882 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1668 bytes_read=8935 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=63999455 adj=63999277 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=570 bytes_read=14373 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=31999789 adj=31999690 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.977 sysload=0.51 cputime=21.517 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 174.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3876 bytes_read=11711 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=180000549 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 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=49998554 adj=49999026 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1674 bytes_read=9035 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=63999458 adj=63999310 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=576 bytes_read=14729 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=31999788 adj=31999687 coil_temp=22.5 refs=0 mcu_temp=22.31 supply_voltage=2.977 sysload=0.51 cputime=21.569 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 175.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3882 bytes_read=11814 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=180000543 rpi: mcu_awake=0.001 mcu_task_avg=0.000015 mcu_task_stddev=0.000017 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=49998575 adj=49999030 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1680 bytes_read=9135 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=63999456 adj=63999291 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=582 bytes_read=15085 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=31999788 adj=31999668 coil_temp=22.5 refs=0 mcu_temp=22.33 supply_voltage=2.977 sysload=0.47 cputime=21.619 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 176.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3888 bytes_read=11917 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=180000566 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998594 adj=49999065 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1686 bytes_read=9277 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=63999454 adj=63999287 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=588 bytes_read=15441 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=31999786 adj=31999688 coil_temp=22.5 refs=0 mcu_temp=22.33 supply_voltage=2.977 sysload=0.47 cputime=21.671 memavail=3404916 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 177.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3894 bytes_read=12063 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=180000556 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998612 adj=49999018 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1692 bytes_read=9377 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=63999455 adj=63999194 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=594 bytes_read=15797 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=31999786 adj=31999633 coil_temp=22.5 refs=0 mcu_temp=22.34 supply_voltage=2.977 sysload=0.47 cputime=21.723 memavail=3404948 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 178.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3900 bytes_read=12166 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=180000550 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998633 adj=49999065 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1698 bytes_read=9477 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=63999456 adj=63999246 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=600 bytes_read=16153 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=31999798 adj=31999663 coil_temp=22.5 refs=0 mcu_temp=22.36 supply_voltage=2.977 sysload=0.47 cputime=21.773 memavail=3404948 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 179.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3906 bytes_read=12263 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=180000544 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998654 adj=49999118 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1704 bytes_read=9605 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=63999453 adj=63999276 Octopus_V1.1_F446: temp=26.2 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=606 bytes_read=16509 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=31999795 adj=31999785 coil_temp=22.5 refs=0 mcu_temp=22.36 supply_voltage=2.977 sysload=0.47 cputime=21.825 memavail=3404424 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 180.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3912 bytes_read=12390 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=180000543 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998666 adj=49999173 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1710 bytes_read=9705 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=63999453 adj=63999268 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=42.4 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=612 bytes_read=16865 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=31999796 adj=31999742 coil_temp=22.5 refs=0 mcu_temp=22.38 supply_voltage=2.977 sysload=0.43 cputime=21.876 memavail=3404424 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 181.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3918 bytes_read=12493 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=180000548 rpi: mcu_awake=0.001 mcu_task_avg=0.000020 mcu_task_stddev=0.000021 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=49998679 adj=49999117 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1716 bytes_read=9819 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=63999454 adj=63999273 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=26.9 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=618 bytes_read=17221 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=31999794 adj=31999743 coil_temp=22.5 refs=0 mcu_temp=22.39 supply_voltage=2.977 sysload=0.43 cputime=21.919 memavail=3399132 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 182.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3924 bytes_read=12610 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=180000529 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49998682 adj=49999076 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1722 bytes_read=9947 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=63999465 adj=63999260 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=624 bytes_read=17577 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=31999789 adj=31999705 coil_temp=22.5 refs=0 mcu_temp=22.40 supply_voltage=2.977 sysload=0.43 cputime=21.944 memavail=3406556 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 183.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3930 bytes_read=12742 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=180000515 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49998688 adj=49999016 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1728 bytes_read=10047 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=63999463 adj=63999433 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=630 bytes_read=17933 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=31999787 adj=31999693 coil_temp=22.5 refs=0 mcu_temp=22.40 supply_voltage=2.977 sysload=0.43 cputime=21.968 memavail=3406556 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 184.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3936 bytes_read=12845 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=180000512 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49998693 adj=49999002 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1734 bytes_read=10147 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=63999457 adj=63999419 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=636 bytes_read=18289 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=31999784 adj=31999697 coil_temp=22.5 refs=0 mcu_temp=22.42 supply_voltage=2.977 sysload=0.43 cputime=21.992 memavail=3406556 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 185.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3942 bytes_read=12948 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000499 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49998702 adj=49998940 toolboard_t0: mcu_awake=0.003 mcu_task_avg=0.000015 mcu_task_stddev=0.000010 bytes_write=1740 bytes_read=10275 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=63999453 adj=63999432 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=642 bytes_read=18645 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=31999782 adj=31999672 coil_temp=22.5 refs=0 mcu_temp=22.43 supply_voltage=2.977 sysload=0.40 cputime=22.017 memavail=3406296 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 186.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3948 bytes_read=13080 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000485 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000020 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=49998711 adj=49998968 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1746 bytes_read=10389 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=63999448 adj=63999394 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=648 bytes_read=19001 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=31999780 adj=31999681 coil_temp=22.5 refs=0 mcu_temp=22.44 supply_voltage=2.977 sysload=0.40 cputime=22.052 memavail=3406320 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 187.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3954 bytes_read=13197 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000486 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49998733 adj=49998998 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1752 bytes_read=10489 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=63999447 adj=63999365 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=44.3 heater_bed: target=0 temp=21.4 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=654 bytes_read=19357 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=31999780 adj=31999687 coil_temp=22.5 refs=0 mcu_temp=22.45 supply_voltage=2.977 sysload=0.40 cputime=22.103 memavail=3405856 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 188.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3960 bytes_read=13300 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000486 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49998747 adj=49999119 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1758 bytes_read=10617 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=63999447 adj=63999336 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=660 bytes_read=19713 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=31999780 adj=31999689 coil_temp=22.5 refs=0 mcu_temp=22.46 supply_voltage=2.978 sysload=0.40 cputime=22.153 memavail=3405864 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 189.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3966 bytes_read=13432 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000487 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49998769 adj=49999139 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1764 bytes_read=10717 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=63999447 adj=63999317 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=666 bytes_read=20069 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=31999779 adj=31999693 coil_temp=22.5 refs=0 mcu_temp=22.47 supply_voltage=2.977 sysload=0.40 cputime=22.203 memavail=3405864 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000
Stats 190.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3972 bytes_read=13535 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000490 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49998784 adj=49999234 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1770 bytes_read=10817 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=63999449 adj=63999301 Octopus_V1.1_F446: temp=26.6 EBB42_v1.2_T0: temp=27.0 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=672 bytes_read=20409 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=31999779 adj=31999681 coil_temp=22.5 refs=0 mcu_temp=22.48 supply_voltage=2.977 sysload=0.37 cputime=22.252 memavail=3405864 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 191.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3978 bytes_read=13638 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000490 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49998801 adj=49999241 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1776 bytes_read=10959 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=63999450 adj=63999304 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=678 bytes_read=20765 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=31999778 adj=31999673 coil_temp=22.5 refs=0 mcu_temp=22.50 supply_voltage=2.977 sysload=0.37 cputime=22.304 memavail=3405864 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 192.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3984 bytes_read=13784 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000499 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 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=49998815 adj=49999274 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1782 bytes_read=11059 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=63999451 adj=63999308 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=684 bytes_read=21121 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=31999781 adj=31999672 coil_temp=22.5 refs=0 mcu_temp=22.50 supply_voltage=2.977 sysload=0.37 cputime=22.354 memavail=3405864 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 193.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3990 bytes_read=13887 bytes_retransmit=9 bytes_invalid=0 send_seq=359 receive_seq=359 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000501 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 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=49998829 adj=49999243 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1788 bytes_read=11159 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=63999451 adj=63999274 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=690 bytes_read=21477 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=31999781 adj=31999696 coil_temp=22.5 refs=0 mcu_temp=22.51 supply_voltage=2.977 sysload=0.37 cputime=22.405 memavail=3405868 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
Stats 194.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3996 bytes_read=13990 bytes_retransmit=9 bytes_invalid=0 send_seq=360 receive_seq=360 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000509 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 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=49998846 adj=49999249 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1794 bytes_read=11287 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=63999450 adj=63999270 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=42.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=696 bytes_read=21833 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=31999785 adj=31999684 coil_temp=22.5 refs=0 mcu_temp=22.51 supply_voltage=2.977 sysload=0.37 cputime=22.455 memavail=3405868 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 195.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4002 bytes_read=14122 bytes_retransmit=9 bytes_invalid=0 send_seq=361 receive_seq=361 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000517 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 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=49998857 adj=49999269 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1800 bytes_read=11387 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=63999478 adj=63999234 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=43.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=702 bytes_read=22189 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=31999785 adj=31999718 coil_temp=22.5 refs=0 mcu_temp=22.53 supply_voltage=2.977 sysload=0.34 cputime=22.505 memavail=3405868 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 196.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4008 bytes_read=14225 bytes_retransmit=9 bytes_invalid=0 send_seq=362 receive_seq=362 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000531 rpi: mcu_awake=0.001 mcu_task_avg=0.000021 mcu_task_stddev=0.000022 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=49998868 adj=49999227 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1806 bytes_read=11499 bytes_retransmit=9 bytes_invalid=0 send_seq=214 receive_seq=214 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999476 adj=63999511 Octopus_V1.1_F446: temp=26.3 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=44.8 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=708 bytes_read=22545 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=31999786 adj=31999699 coil_temp=22.5 refs=0 mcu_temp=22.54 supply_voltage=2.977 sysload=0.34 cputime=22.554 memavail=3405628 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 197.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4014 bytes_read=14342 bytes_retransmit=9 bytes_invalid=0 send_seq=363 receive_seq=363 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000530 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49998894 adj=49999184 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1812 bytes_read=11618 bytes_retransmit=9 bytes_invalid=0 send_seq=215 receive_seq=215 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999474 adj=63999389 Octopus_V1.1_F446: temp=26.5 EBB42_v1.2_T0: temp=27.1 raspberry_pi: temp=43.3 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=714 bytes_read=22901 bytes_retransmit=0 bytes_invalid=0 send_seq=119 receive_seq=119 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999789 adj=31999675 coil_temp=22.5 refs=0 mcu_temp=22.55 supply_voltage=2.977 sysload=0.34 cputime=22.606 memavail=3405660 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000
Stats 198.5: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4020 bytes_read=14474 bytes_retransmit=9 bytes_invalid=0 send_seq=364 receive_seq=364 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000527 rpi: mcu_awake=0.001 mcu_task_avg=0.000019 mcu_task_stddev=0.000018 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=49998910 adj=49999368 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1818 bytes_read=11711 bytes_retransmit=9 bytes_invalid=0 send_seq=216 receive_seq=216 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999474 adj=63999344 Octopus_V1.1_F446: temp=26.4 EBB42_v1.2_T0: temp=27.2 raspberry_pi: temp=42.4 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=720 bytes_read=23257 bytes_retransmit=0 bytes_invalid=0 send_seq=120 receive_seq=120 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999788 adj=31999718 coil_temp=22.5 refs=0 mcu_temp=22.55 supply_voltage=2.978 sysload=0.34 cputime=22.654 memavail=3400368 print_time=7.514 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000
webhooks client 4100189752: Disconnected
Starting Klippy...
Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-396-gb7233d119-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/ratos.py, klippy/extras/ratos_homing.py, klippy/extras/resonance_generator.py, klippy/extras/z_offset_probe.py, klippy/kinematics/ratos_hybrid_corexy.py
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Mar 20 2025, 22:21:41) \n[GCC 10.2.1 20210110]'
Start printer at Fri Jun 27 18:54:12 2025 (1751046852.6 24.1)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4101875408: New connection
webhooks client 4101875408: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 33.8: gcodein=0 mcu: mcu_awake=0.003 mcu_task_avg=0.000008 mcu_task_stddev=0.000009 bytes_write=3655 bytes_read=7563 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=179999131 rpi: mcu_awake=0.004 mcu_task_avg=0.000027 mcu_task_stddev=0.000014 bytes_write=846 bytes_read=4734 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=50004015 adj=49998403 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5000 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=63996461 adj=63992997 Octopus_V1.1_F446: temp=0.0 EBB42_v1.2_T0: temp=0.0 raspberry_pi: temp=49.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=366 bytes_read=2083 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=31999657 adj=32000251 coil_temp=0.0 refs=0 sysload=1.00 cputime=6.732 memavail=3401360 print_time=41.206 buffer_time=0.248 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4101875408
webhooks: registering remote method 'reboot_machine' for connection id: 4101875408
webhooks: registering remote method 'pause_job_queue' for connection id: 4101875408
webhooks: registering remote method 'start_job_queue' for connection id: 4101875408
Stats 34.8: gcodein=0 mcu: mcu_awake=0.003 mcu_task_avg=0.000008 mcu_task_stddev=0.000009 bytes_write=3661 bytes_read=7666 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=180000115 rpi: mcu_awake=0.004 mcu_task_avg=0.000027 mcu_task_stddev=0.000014 bytes_write=852 bytes_read=4750 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=50001459 adj=50008639 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1464 bytes_read=5114 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=63997893 adj=63999340 Octopus_V1.1_F446: temp=26.7 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=49.7 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=372 bytes_read=2455 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=31999862 adj=31999713 coil_temp=22.5 refs=0 mcu_temp=21.66 supply_voltage=2.977 sysload=1.00 cputime=6.826 memavail=3395972 print_time=41.206 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 40.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000004 bytes_write=3673 bytes_read=8233 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=180000332 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=50000810 adj=50002286 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1476 bytes_read=5651 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=63999245 adj=64000629 Octopus_V1.1_F446: temp=26.8 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=4307 bytes_retransmit=0 bytes_invalid=0 send_seq=64 receive_seq=64 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999964 adj=31999697 coil_temp=22.5 refs=0 mcu_temp=21.69 supply_voltage=2.977 sysload=1.15 cputime=6.987 memavail=3383236 print_time=41.206 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
RatOS | DEBUG:: Debugging enabled.
Stats 41.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000004 bytes_write=3679 bytes_read=8329 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=180000351 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=50000012 adj=49996932 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1482 bytes_read=5779 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=63999340 adj=64000686 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=48.7 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=4663 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=31999851 adj=31999990 coil_temp=22.5 refs=0 mcu_temp=21.71 supply_voltage=2.977 sysload=1.15 cputime=7.018 memavail=3385492 print_time=41.206 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 42.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000004 bytes_write=3685 bytes_read=8459 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=180000639 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49999863 adj=49997201 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1488 bytes_read=5893 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=63999622 adj=64000706 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=48.7 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=5019 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=31999813 adj=31999686 coil_temp=22.5 refs=0 mcu_temp=21.73 supply_voltage=2.977 sysload=1.15 cputime=7.042 memavail=3385492 print_time=41.206 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
RatOS:: 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_KINEMATIC_POSITION pos=200.000,200.000,200.000
Stats 43.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3691 bytes_read=8576 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=180000648 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000009 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=49999944 adj=49997268 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1494 bytes_read=5993 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=63999600 adj=64000938 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=48.7 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=5375 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=31999821 adj=31999389 coil_temp=22.5 refs=0 mcu_temp=21.75 supply_voltage=2.977 sysload=1.15 cputime=7.084 memavail=3385244 print_time=49.932 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 44.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3697 bytes_read=8679 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=180000541 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=888 bytes_read=4872 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=49999900 adj=49998183 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=6121 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=63999478 adj=64000456 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=5731 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=31999794 adj=31999487 coil_temp=22.5 refs=0 mcu_temp=21.78 supply_voltage=2.977 sysload=1.15 cputime=7.115 memavail=3387296 print_time=49.932 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 45.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3703 bytes_read=8811 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=180000551 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=894 bytes_read=4888 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=50000101 adj=49998521 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=6221 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=63999422 adj=63999859 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=6087 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=31999840 adj=31999521 coil_temp=22.5 refs=0 mcu_temp=21.80 supply_voltage=2.977 sysload=1.14 cputime=7.147 memavail=3382780 print_time=49.932 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Transition to shutdown state: Unable to read tmc uart 'stepper_x1' register IFCNT
Dumping gcode input 0 blocks
Dumping 20 requests for client 4101875408
Received 34.526118: b'{"id":4083026360,"method":"info","params":{}}'
Received 34.537894: b'{"id":4074165632,"method":"register_remote_method","params":{"response_template":{"method":"shutdown_machine"},"remote_method":"shutdown_machine"}}'
Received 34.539671: b'{"id":4074165632,"method":"register_remote_method","params":{"response_template":{"method":"reboot_machine"},"remote_method":"reboot_machine"}}'
Received 34.541161: b'{"id":4074165632,"method":"register_remote_method","params":{"response_template":{"method":"pause_job_queue"},"remote_method":"pause_job_queue"}}'
Received 34.542597: b'{"id":4074165632,"method":"register_remote_method","params":{"response_template":{"method":"start_job_queue"},"remote_method":"start_job_queue"}}'
Received 34.545432: b'{"id":4074165896,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 34.545432: b'{"id":4074166040,"method":"objects/query","params":{"objects":{"heaters":null}}}'
Received 34.547861: b'{"id":4074165272,"method":"info","params":{}}'
Received 34.547861: b'{"id":4074165776,"method":"objects/list","params":{}}'
Received 34.598740: b'{"id":4074165344,"method":"info","params":{}}'
Received 34.598740: b'{"id":4074165800,"method":"objects/list","params":{}}'
Received 34.605694: b'{"id":4074168008,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 34.825089: b'{"id":4074165416,"method":"objects/subscribe","params":{"objects":{"gcode":null,"webhooks":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"temperature_sensor raspberry_pi":null,"gcode_move":null,"print_stats":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"heater_bed":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"temperature_sensor beacon_coil":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null,"extruder":null},"response_template":{"method":"process_status_update"}}}'
Received 35.048574: b'{"id":4074165968,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 35.295764: b'{"id":4074165464,"method":"objects/subscribe","params":{"objects":{"webhooks":null,"print_stats":null,"temperature_sensor Octopus_V1.1_F446":null,"temperature_sensor EBB42_v1.2_T0":null,"temperature_sensor raspberry_pi":null,"heater_bed":null,"temperature_sensor beacon_coil":null,"extruder":null,"gcode":null,"configfile":null,"mcu":null,"mcu rpi":null,"mcu toolboard_t0":null,"heaters":null,"gcode_macro RatOS":null,"gcode_macro HOME_X":null,"gcode_macro HOME_Y":null,"gcode_macro HOME_Z":null,"gcode_macro HOME_X_SENSORLESS":null,"gcode_macro HOME_Y_SENSORLESS":null,"gcode_macro _Z_HOP":null,"gcode_macro _MOVE_TO_SAFE_Z_HOME":null,"gcode_macro MAYBE_HOME":null,"gcode_macro PID_CALIBRATE_HOTEND":null,"gcode_macro PID_CALIBRATE_BED":null,"gcode_macro PID_CALIBRATE_CHAMBER_HEATER":null,"gcode_macro INITIALIZE_PA_TUNING":null,"gcode_macro CHAMBER_FILTER_ON":null,"gcode_macro CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_ON":null,"gcode_macro _CHAMBER_FILTER_OFF":null,"gcode_macro _CHAMBER_FILTER_TURN_ON":null,"gcode_macro _CHAMBER_FILTER_TURN_OFF":null,"gcode_macro _CHAMBER_FILTER_SANITY_CHECK":null,"gcode_macro CHAMBER_HEATER_ON":null,"gcode_macro CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_ON":null,"gcode_macro _CHAMBER_HEATER_OFF":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_ON":null,"gcode_macro _CHAMBER_HEATER_EXTRA_FAN_OFF":null,"gcode_macro _USER_CHAMBER_HEATER_BEFORE_PREHEATING":null,"gcode_macro _USER_CHAMBER_HEATER_AFTER_PREHEATING":null,"gcode_macro _LED_START_PRINTING":null,"gcode_macro _LED_START_PRINTING_ERROR":null,"gcode_macro _LED_PRINTING":null,"gcode_macro _LED_PAUSE":null,"gcode_macro _LED_CHAMBER_FILTER_ON":null,"gcode_macro _LED_CHAMBER_FILTER_OFF":null,"gcode_macro _LED_LOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_LOADED":null,"gcode_macro _LED_FILAMENT_RUNOUT":null,"gcode_macro _LED_FILAMENT_CLOG":null,"gcode_macro _LED_UNLOADING_FILAMENT":null,"gcode_macro _LED_FILAMENT_UNLOADED":null,"gcode_macro _LED_DEACTIVATE_TOOLHEAD":null,"gcode_macro _LED_TOOLHEAD_STANDBY":null,"gcode_macro _LED_TOOLHEAD_WAKEUP":null,"gcode_macro _LED_MOTORS_OFF":null,"gcode_macro _LED_INPUT_SHAPER_START":null,"gcode_macro _LED_INPUT_SHAPER_END":null,"gcode_macro _LED_BEACON_CALIBRATION_START":null,"gcode_macro _LED_BEACON_CALIBRATION_END":null,"gcode_macro _LED_BEACON_CALIBRATION_ERROR":null,"gcode_macro _LED_VAOC_ON":null,"gcode_macro _LED_VAOC_OFF":null,"gcode_macro _LED_ACTION":null,"gcode_macro _LED_SUCCESS":null,"gcode_macro _LED_HEATING":null,"gcode_macro _LED_COOLING":null,"gcode_macro _LED_ERROR":null,"gcode_macro _LED_ON":null,"gcode_macro _LED_OFF":null,"gcode_macro _LED_STANDBY":null,"gcode_macro _LED_SET":null,"gcode_macro _USER_LED_SET":null,"gcode_macro LOAD_FILAMENT":null,"gcode_macro _DEFAULT_LOAD_FILAMENT":null,"gcode_macro _IDEX_LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT":null,"gcode_macro _LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE":null,"gcode_macro _LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_INSERT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_INSERT":null,"gcode_macro _PURGE_BEFORE_UNLOAD":null,"gcode_macro _PURGE_FILAMENT":null,"gcode_macro _MOVE_TO_PARKING_POSITION":null,"gcode_macro _MOVE_TO_LOADING_POSITION":null,"gcode_macro _CLEANING_MOVE":null,"gcode_macro _START_PRINT_BED_MESH":null,"gcode_macro CALIBRATE_ADAPTIVE_MESH":null,"gcode_macro M84":null,"gcode_macro M104":null,"gcode_macro M109":null,"gcode_macro SET_HEATER_TEMPERATURE":null,"gcode_macro TEMPERATURE_WAIT":null,"gcode_macro SET_GCODE_OFFSET":null,"gcode_macro SDCARD_PRINT_FILE":null,"gcode_macro SKEW_PROFILE":null,"gcode_macro SET_SKEW":null,"gcode_macro SET_VELOCITY_LIMIT":null,"gcode_macro _START_PRINT_PARK":null,"gcode_macro _END_PRINT_PARK":null,"gcode_macro _PARK":null,"gcode_macro SAVE_PROBE_RESULT":null,"gcode_macro PROBE_FOR_PRIMING":null,"gcode_macro RESET_PRIME_PROBE_STATE":null,"gcode_macro PROBE_CURRENT_POSITION":null,"gcode_macro PRIME_BLOB":null,"gcode_macro UNLOAD_FILAMENT":null,"gcode_macro _LEGACY_UNLOAD_FILAMENT":null,"gcode_macro _DEFAULT_UNLOAD_FILAMENT":null,"gcode_macro _IDEX_UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT":null,"gcode_macro _UNLOAD_FILAMENT_FROM_NOZZLE_TO_COOLING_ZONE":null,"gcode_macro _UNLOAD_FILAMENT_FROM_COOLING_ZONE_TO_EXTRUDER":null,"gcode_macro _UNLOAD_WITH_TIP_FORMING":null,"gcode_macro _UNLOAD_KNOWN_FILAMENT":null,"gcode_macro _UNLOAD_UNKNOWN_FILAMENT":null,"gcode_macro _TIP_FORMING":null,"gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_TOOLHEAD_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_RUNOUT":null,"gcode_macro _ON_BOWDEN_FILAMENT_SENSOR_CLOG":null,"gcode_macro _ON_FILAMENT_END":null,"gcode_macro M600":null,"gcode_macro COLD_PULL":null,"gcode_macro _USER_START_PRINT_BEFORE_HOMING":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _USER_START_PRINT_BED_MESH":null,"gcode_macro _USER_START_PRINT_PARK":null,"gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _USER_START_PRINT_HEAT_CHAMBER":null,"gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _USER_END_PRINT_PARK":null,"gcode_macro _USER_END_PRINT_FINISHED":null,"gcode_macro _USER_START_PRINT":null,"gcode_macro _USER_END_START_PRINT":null,"gcode_macro _USER_START_FEATURE":null,"gcode_macro _USER_END_FEATURE":null,"gcode_macro ECHO_T_VARS":null,"gcode_macro ECHO_RATOS_VARS":null,"gcode_macro INITIAL_FRONTEND_UPDATE":null,"gcode_macro CALCULATE_PRINTABLE_AREA":null,"gcode_macro CACHE_TOOLHEAD_SETTINGS":null,"gcode_macro RESTORE_TOOLHEAD_SETTINGS":null,"gcode_macro SET_MACRO_TRAVEL_SETTINGS":null,"gcode_macro SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro IDEX_SET_CENTER_KINEMATIC_POSITION":null,"gcode_macro VERIFY_HYBRID_INVERTED":null,"gcode_macro RATOS_ECHO":null,"gcode_macro ENABLE_DEBUG":null,"gcode_macro DISABLE_DEBUG":null,"gcode_macro DEBUG_ECHO":null,"gcode_macro START_FEATURE":null,"gcode_macro END_FEATURE":null,"gcode_macro _ON_LAYER_CHANGE":null,"gcode_macro _LEARN_MORE_CALIBRATION":null,"gcode_macro _LEARN_MORE_CHAMBER_FILTER":null,"gcode_macro _LEARN_MORE_FILAMENT":null,"gcode_macro _CONSOLE_SAVE_CONFIG":null,"gcode_macro SAVE_Z_OFFSET":null,"gcode_macro _LOAD_RATOS_SKEW_PROFILE":null,"gcode_macro M601":null,"gcode_macro PAUSE":null,"gcode_macro RESUME":null,"gcode_macro CANCEL_PRINT":null,"gcode_macro START_PRINT":null,"gcode_macro _START_PRINT_BEFORE_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED":null,"gcode_macro _START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_CONTACT_WITH_OPTIONAL_WIPE":null,"gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER":null,"gcode_macro _PRIME":null,"gcode_macro END_PRINT":null,"gcode_macro _END_PRINT_BEFORE_HEATERS_OFF":null,"gcode_macro _END_PRINT_AFTER_HEATERS_OFF":null,"gcode_macro _SET_EXTRUSION_MODE":null,"gcode_macro GENERATE_SHAPER_GRAPHS":null,"gcode_macro MEASURE_COREXY_BELT_TENSION":null,"idle_timeout":null,"temperature_host raspberry_pi":null,"gcode_move":null,"virtual_sdcard":null,"display_status":null,"pause_resume":null,"ratos":null,"exclude_object":null,"fan":null,"heater_fan toolhead_cooling_fan":null,"gcode_macro Z_TILT_ADJUST":null,"bed_mesh":null,"z_tilt":null,"firmware_retraction":null,"stepper_enable":null,"tmc2209 stepper_x":null,"tmc2209 stepper_x1":null,"tmc2209 stepper_y":null,"tmc2209 stepper_y1":null,"tmc2209 stepper_z":null,"tmc2209 stepper_z1":null,"tmc2209 stepper_z2":null,"tmc2209 extruder":null,"beacons":null,"mcu beacon":null,"probe":null,"beacon":null,"gcode_macro BEACON_RATOS_CALIBRATION":null,"gcode_macro BEACON_RATOS_CALIBRATE":null,"gcode_macro BEACON_INITIAL_CALIBRATION":null,"gcode_macro BEACON_FINAL_CALIBRATION":null,"gcode_macro BEACON_POKE_TEST":null,"gcode_macro _BEACON_PROBE_POKE":null,"gcode_macro _BEACON_STORE_POKE":null,"gcode_macro _BEACON_CHECK_POKE":null,"gcode_macro _BEACON_ECHO_POKE":null,"gcode_macro BEACON_CALIBRATE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_PROBE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_STORE_NOZZLE_TEMP_OFFSET":null,"gcode_macro _BEACON_ECHO_NOZZLE_TEMP_OFFSETS":null,"gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET":null,"gcode_macro BEACON_MEASURE_GANTRY_TWIST":null,"gcode_macro _BEACON_PROBE_GANTRY_TWIST":null,"gcode_macro _BEACON_STORE_GANTRY_TWIST":null,"gcode_macro _BEACON_ECHO_GANTRY_TWIST":null,"gcode_macro BEACON_CREATE_SCAN_COMPENSATION_MESH":null,"gcode_macro _BEACON_APPLY_SCAN_COMPENSATION":null,"gcode_macro _BEACON_MAYBE_SCAN_COMPENSATION":null,"gcode_macro _BEACON_HOME_AND_ABL":null,"gcode_macro _BEACON_SAVE_MULTIPLIER":null,"gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER":null,"controller_fan controller_fan":null,"gcode_macro T0":null,"save_variables":null,"motion_report":null,"query_endstops":null,"system_stats":null,"manual_probe":null,"toolhead":null},"response_template":{"method":"process_status_update"}}}'
Received 35.647863: b'{"id":4074167720,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 40.144608: b'{"id":4074166136,"method":"objects/query","params":{"objects":{"extruder":["can_extrude"]}}}'
Received 40.144608: b'{"id":4083211016,"method":"gcode/script","params":{"script":"ENABLE_DEBUG"}}'
Received 42.483544: b'{"id":4074165824,"method":"gcode/script","params":{"script":"SET_CENTER_KINEMATIC_POSITION"}}'
Received 45.913341: b'{"id":4083399816,"method":"gcode/script","params":{"script":"SAVE_GCODE_STATE NAME=_ui_movement\\nG91\\nG1 X-10 F6000\\nRESTORE_GCODE_STATE NAME=_ui_movement"}}'
gcode state: absolute_coord=True absolute_extrude=True base_position=[0.0, 0.0, 0.0, 0.0] last_position=[190.0, 200.0, 200.0, 0.0] homing_position=[0.0, 0.0, 0.0, 0.0] speed_factor=0.016666666666666666 extrude_factor=1.0 speed=25.0
Reactor garbage collection: (42.490664067, 0.0, 0.0)
Unable to read tmc uart 'stepper_x1' register IFCNT
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
MCU 'rpi' shutdown: Command request
clocksync state: mcu_freq=50000000 last_clock=1853411223 clock_est=(33.449 1272479426 50000101.101) min_half_rtt=0.000051 min_rtt_time=42.114 time_avg=33.449(20.714) clock_avg=1272479426.336(1035710500.647) pred_variance=1367491576.834 clock_adj=(15.193 49999694.000)
Dumping serial stats: bytes_write=900 bytes_read=4900 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
Dumping send queue 100 messages
Sent 0 30.846184 30.846184 9: seq: 18, identify offset=320 count=40
Sent 1 30.846664 30.846664 9: seq: 19, identify offset=360 count=40
Sent 2 30.847125 30.847125 9: seq: 1a, identify offset=400 count=40
Sent 3 30.847581 30.847581 9: seq: 1b, identify offset=440 count=40
Sent 4 30.848030 30.848030 9: seq: 1c, identify offset=480 count=40
Sent 5 30.848576 30.848576 9: seq: 1d, identify offset=520 count=40
Sent 6 30.849003 30.849003 9: seq: 1e, identify offset=560 count=40
Sent 7 30.849410 30.849410 9: seq: 1f, identify offset=600 count=40
Sent 8 30.849812 30.849812 9: seq: 10, identify offset=640 count=40
Sent 9 30.850215 30.850215 9: seq: 11, identify offset=680 count=40
Sent 10 30.850644 30.850644 9: seq: 12, identify offset=720 count=40
Sent 11 30.851121 30.851121 9: seq: 13, identify offset=760 count=40
Sent 12 30.851617 30.851617 9: seq: 14, identify offset=800 count=40
Sent 13 30.852111 30.852111 9: seq: 15, identify offset=840 count=40
Sent 14 30.852581 30.852581 9: seq: 16, identify offset=880 count=40
Sent 15 30.853051 30.853051 9: seq: 17, identify offset=920 count=40
Sent 16 30.853547 30.853547 9: seq: 18, identify offset=960 count=40
Sent 17 30.854074 30.854074 9: seq: 19, identify offset=1000 count=40
Sent 18 30.854605 30.854605 9: seq: 1a, identify offset=1040 count=40
Sent 19 30.855197 30.855197 9: seq: 1b, identify offset=1080 count=40
Sent 20 30.855671 30.855671 9: seq: 1c, identify offset=1120 count=40
Sent 21 30.856124 30.856124 9: seq: 1d, identify offset=1160 count=40
Sent 22 30.856644 30.856644 9: seq: 1e, identify offset=1200 count=40
Sent 23 30.857212 30.857212 9: seq: 1f, identify offset=1240 count=40
Sent 24 30.857685 30.857685 9: seq: 10, identify offset=1280 count=40
Sent 25 30.858137 30.858137 9: seq: 11, identify offset=1320 count=40
Sent 26 30.858600 30.858600 9: seq: 12, identify offset=1360 count=40
Sent 27 30.859113 30.859113 9: seq: 13, identify offset=1400 count=40
Sent 28 30.859658 30.859658 9: seq: 14, identify offset=1440 count=40
Sent 29 30.860250 30.860250 9: seq: 15, identify offset=1480 count=40
Sent 30 30.860845 30.860845 9: seq: 16, identify offset=1520 count=40
Sent 31 30.861333 30.861333 9: seq: 17, identify offset=1560 count=40
Sent 32 30.861795 30.861795 9: seq: 18, identify offset=1600 count=40
Sent 33 30.862255 30.862255 9: seq: 19, identify offset=1640 count=40
Sent 34 30.862699 30.862699 9: seq: 1a, identify offset=1680 count=40
Sent 35 30.863147 30.863147 9: seq: 1b, identify offset=1720 count=40
Sent 36 30.863600 30.863600 9: seq: 1c, identify offset=1760 count=40
Sent 37 30.864140 30.864140 9: seq: 1d, identify offset=1800 count=40
Sent 38 30.864706 30.864706 9: seq: 1e, identify offset=1840 count=40
Sent 39 30.865236 30.865236 9: seq: 1f, identify offset=1880 count=40
Sent 40 30.865812 30.865812 9: seq: 10, identify offset=1920 count=40
Sent 41 30.866304 30.866304 9: seq: 11, identify offset=1960 count=40
Sent 42 30.866761 30.866761 9: seq: 12, identify offset=2000 count=40
Sent 43 30.867322 30.867322 9: seq: 13, identify offset=2040 count=40
Sent 44 30.867830 30.867830 9: seq: 14, identify offset=2080 count=40
Sent 45 30.868391 30.868391 9: seq: 15, identify offset=2120 count=40
Sent 46 30.868985 30.868985 9: seq: 16, identify offset=2160 count=40
Sent 47 30.869584 30.869584 9: seq: 17, identify offset=2200 count=40
Sent 48 30.870150 30.870150 9: seq: 18, identify offset=2240 count=40
Sent 49 30.870670 30.870670 9: seq: 19, identify offset=2280 count=40
Sent 50 30.871260 30.871260 9: seq: 1a, identify offset=2320 count=40
Sent 51 30.871766 30.871766 9: seq: 1b, identify offset=2360 count=40
Sent 52 30.872370 30.872370 9: seq: 1c, identify offset=2400 count=40
Sent 53 30.872946 30.872946 9: seq: 1d, identify offset=2440 count=40
Sent 54 30.873543 30.873543 9: seq: 1e, identify offset=2480 count=40
Sent 55 30.874082 30.874082 9: seq: 1f, identify offset=2520 count=40
Sent 56 30.879933 30.879933 9: seq: 10, identify offset=2560 count=40
Sent 57 30.884209 30.884209 9: seq: 11, identify offset=2600 count=40
Sent 58 30.885003 30.885003 9: seq: 12, identify offset=2640 count=40
Sent 59 30.885674 30.885674 9: seq: 13, identify offset=2680 count=40
Sent 60 30.886360 30.886360 9: seq: 14, identify offset=2720 count=40
Sent 61 30.887089 30.887089 9: seq: 15, identify offset=2760 count=40
Sent 62 30.887713 30.887713 9: seq: 16, identify offset=2800 count=40
Sent 63 30.888324 30.888324 9: seq: 17, identify offset=2840 count=40
Sent 64 30.888919 30.888919 9: seq: 18, identify offset=2880 count=40
Sent 65 30.889528 30.889528 9: seq: 19, identify offset=2920 count=40
Sent 66 30.890123 30.890123 9: seq: 1a, identify offset=2960 count=40
Sent 67 30.890715 30.890715 9: seq: 1b, identify offset=3000 count=40
Sent 68 30.891255 30.891255 9: seq: 1c, identify offset=3040 count=40
Sent 69 30.891830 30.891830 9: seq: 1d, identify offset=3080 count=40
Sent 70 30.892494 30.892494 9: seq: 1e, identify offset=3120 count=40
Sent 71 30.893022 30.893022 9: seq: 1f, identify offset=3160 count=40
Sent 72 30.893594 30.893594 9: seq: 10, identify offset=3200 count=40
Sent 73 30.894106 30.894106 9: seq: 11, identify offset=3240 count=40
Sent 74 30.894661 30.894661 9: seq: 12, identify offset=3265 count=40
Sent 75 30.929969 30.929969 6: seq: 13, get_uptime
Sent 76 30.981246 30.981246 6: seq: 14, get_clock
Sent 77 31.032665 31.032665 6: seq: 15, get_clock
Sent 78 31.083949 31.083949 6: seq: 16, get_clock
Sent 79 31.135171 31.135171 6: seq: 17, get_clock
Sent 80 31.186177 31.186177 6: seq: 18, get_clock
Sent 81 31.238159 31.238159 6: seq: 19, get_clock
Sent 82 31.289216 31.289216 6: seq: 1a, get_clock
Sent 83 31.340500 31.340500 6: seq: 1b, get_clock
Sent 84 31.356395 31.356395 6: seq: 1c, get_clock
Sent 85 32.340798 32.340798 6: seq: 1d, get_clock
Sent 86 32.772643 32.772643 6: seq: 1e, get_config
Sent 87 32.773613 32.773613 7: seq: 1f, allocate_oids count=0
Sent 88 32.773826 32.773826 11: seq: 10, finalize_config crc=3912464276
Sent 89 32.773975 32.773975 6: seq: 11, get_config
Sent 90 33.324934 33.324934 6: seq: 12, get_clock
Sent 91 34.309156 34.309156 6: seq: 13, get_clock
Sent 92 35.293414 35.293414 6: seq: 14, get_clock
Sent 93 40.145218 40.145218 6: seq: 15, get_clock
Sent 94 41.129512 41.129512 6: seq: 16, get_clock
Sent 95 42.113778 42.113778 6: seq: 17, get_clock
Sent 96 43.098767 43.098767 6: seq: 18, get_clock
Sent 97 44.083231 44.083231 6: seq: 19, get_clock
Sent 98 45.067891 45.067891 6: seq: 1a, get_clock
Sent 99 46.042996 46.042996 6: seq: 1b, emergency_stop
Dumping receive queue 100 messages
Receive: 0 30.846798 30.846664 49: seq: 1a, identify_response offset=360 data=b'\xbc\xf5d\xb0\xb9\r\xd7\xf6\xc4|\x10E\xfd\xcdg_IE\xc5\x87\xa1\x1b<\xae\xb7\x81%\xe4\xa0\x08c\xd7\xcf\x98(g\\\x87\xa9E'
Receive: 1 30.847261 30.847125 49: seq: 1b, identify_response offset=400 data=b'>Tq\x9cm\xec.\x83\xcc5\xd3\xdc|T\xb1\xfdJ\xecWj\xbf2\xfb\xc5\xeb\xe2\xc9\xde\xf6\xea"\x8d\xec&",\x99\xb9\xad\xd8'
Receive: 2 30.847712 30.847581 49: seq: 1c, identify_response offset=440 data=b'M\xd7U\x19\xa4Ah\xf6\x06,{\xa7\x9bd\x89\x95?\x88\xf1\x007;\xde\x1e\xe33\x9c&>\x906v\xb4B\x86\xd5\xc3I\xa5\xd9'
Receive: 3 30.848181 30.848030 49: seq: 1d, identify_response offset=480 data=b'Z\xa4\xa6\x9f\xb6a\xb2>\xc5F\xe6\x04\xd5\xf2\xae\x17\x8f\xbc^\xdcmU\x8cE.\xc5\xefp\x9d\x87\t\xccv\xcc\xf1v<\x9d\x97\x1c'
Receive: 4 30.848709 30.848576 49: seq: 1e, identify_response offset=520 data=b'\xa6D\xeb\t&qg\xeb\xcbb\x9bn\x12\xa7\x8b\xca\xd6\xc0\xfa\x06eG\x87\xa2my\xad>\x9f\xc04\xdc\xb2Z\x81\x0e\xd3R\xa5`'
Receive: 5 30.849127 30.849003 49: seq: 1f, identify_response offset=560 data=b"\xe6H\xa76\xee\xa8\xfdCsB?\xff\x9f\xc5c'!uV\xd8\xce\xcd\x80\xc0\x97[\xa1\xf3\x19\xc5=\xcf\x0fb\x7fP2\x8e6>"
Receive: 6 30.849532 30.849410 49: seq: 10, identify_response offset=600 data=b'>\x98\xf0\xbe\xe6\xc77\xc6,,\x1f\x9fzN\xb7\x13\xcd(\x8d\xdb8E\xacAy#\xf7hB\xb0\xeb\x9c\x16\x95\x0b\x04\x93\x97\xd2*'
Receive: 7 30.849936 30.849812 49: seq: 11, identify_response offset=640 data=b'j\xe4LQ\x8e\xd9\xd6YbimD\x96\xf5\x9d\xfd\x16\x95\xfd|j\xcb|n\x0e\xacl\xaa\xfc\xc8B\xd6\xde\x0e\x1c\x03\x87e\x1d\x86'
Receive: 8 30.850356 30.850215 49: seq: 12, identify_response offset=680 data=b"Z\x9fY%\x06\xf3I\xdeR!;\xac\xa9\x96\xdc[4t\x07\x1b\x0f|h:\xf0\x11\xfdI\x89\xfa`'\xd4\xd4\x1d{l\xca\xa9\x18"
Receive: 9 30.850768 30.850644 49: seq: 13, identify_response offset=720 data=b'\xac\xb6\x0c\x8f\xf9\x91\x07d\xa3\x9dD\xdd\x1fE\xc3I\xc7\x9d\xbf\x1d\x07\x94\x87\x13+\x1c\xba\xe2\xb7\x13XT\x07!skF\xb0\xca^'
Receive: 10 30.851268 30.851121 49: seq: 14, identify_response offset=760 data=b'Y\x13\xddO`\xd1\x06^@0\x1a*>8\xdb@O\x19\x1a\x84\x87A\x8c\xfc\x08\x03\xd5\x98\x10\xc13\xf2\x86\x0f{\xde\x96O9z'
Receive: 11 30.851748 30.851617 49: seq: 15, identify_response offset=800 data=b'F`\x02\xa6\xc8K\xe6\x87\xae\xe1G\x81K\x16M\xef\x9b\x84\x1e\xdb\xb05\x0fl\xc0\xbas\xe9t\\+\xe3A\xec\xf7|\xc0C\xc8\x8e'
Receive: 12 30.852242 30.852111 49: seq: 16, identify_response offset=840 data=b'\xdcS\x98\xb8\xcdU\xd8\x04\x9e\x8a\x91[\x01\x85\xe0\xbev\x02\x02\x198\x95\x9cd\xc8\xca\xa1$\x8d9[\xed\xc1\x9f(>A\xc8z\xa4'
Receive: 13 30.852717 30.852581 49: seq: 17, identify_response offset=880 data=b'p\xc0\x1ch8\xf5x\x0b`\x99g+\xed\xdcs\t\xfb\xe5\xa0\x816\xe8\xe17\xc99\r\x17hx\x05\x06\xcd]G\nBD\xc7\xd8'
Receive: 14 30.853183 30.853051 49: seq: 18, identify_response offset=920 data=b't\x95\xd8=\xe5p\xd7v\xad\x81+\x93b:v\x03\x07\x08\xd5V\xb6%2\xba\xc39>\xce\xe55\xd7ndM\x88\x8a|\x92\xbe/'
Receive: 15 30.853698 30.853547 49: seq: 19, identify_response offset=960 data=b"VN\x11<)\xc8\x08\x7f\xf1z\xb9$]\x8fCG%\xbb\xdd\xf8P\x0c\xdc'\x07\xfb\xb46Y\x15\xe6\xf3\xd4JiB+i]Z"
Receive: 16 30.854219 30.854074 49: seq: 1a, identify_response offset=1000 data=b'\x1e?\xc6\xe3W\xbc\x1d\xe1\xf0\xac\xdb\xed`Ce\xd46\xfc\x02\xdc\xc4)\x80M\xcf\xa8\xd5x\x80\r\x0f]]\xa9\xc1\xcb\x8a\xc2(\xc2'
Receive: 17 30.854759 30.854605 49: seq: 1b, identify_response offset=1040 data=b'{\x8a\xb3\x01\xad5QH\xdd\x95U\x99\xc4\x87L}\xe5\xd4\x89\xd2\xb7\xc3\xe4\x9d%\x01\xc5 \xbd[\xe4T3\xa5\x06\x91l\x17xJ'
Receive: 18 30.855348 30.855197 49: seq: 1c, identify_response offset=1080 data=b"O'\xe7 \xd3\x8dEX\xa6]\xff\xa3!5\xce\x90t\xacq#H\x1d\xf7@x\xe0\xe5\x9d\x97\xf6D\x81\xe1a\x91\xabY\x0e\xfa\x0e"
Receive: 19 30.855799 30.855671 49: seq: 1d, identify_response offset=1120 data=b'|\xd5r\x7f/\x18\xa7f\x81E\xbe\xf5L\x12\xeb\xb1(|\x0e\x05\xb8\xb2\xb5Yj\x91\xd8,\x04\xbb\t\x16xJY\x16^`\x13Z'
Receive: 20 30.856253 30.856124 49: seq: 1e, identify_response offset=1160 data=b'\xa4Y\x0e\xb3X+\xdb\xcc\xd1\x96w\x94e\x06\xbe\xc8r\x96\xeb$\x0b\xbc\xa3\x85\xac\xd6\x1c\x05\xe9g$\x85^\x08b\xb2\xd8\xd1Me'
Receive: 21 30.856804 30.856644 49: seq: 1f, identify_response offset=1200 data=b'\xf6@\xb4\xf2BHpb+\xbeSq\xeb\xcf\xafc\xa604\x80x\tn\xb4\xf2\xf4%\xa5\xeb\x9e\xf8\xa9t\xdd\xee\xd1\xf9\xe9Z\x90'
Receive: 22 30.857361 30.857212 49: seq: 10, identify_response offset=1240 data=b'\x18\x12\x9d\xad\x9d$\xb1\x8a\n\x07\xd9X\x82y\xbau\n9\xb6\xabc4g.\x9f\xe5\x03\x050\xe3d\x0e\xcaa\xc1/hZ\x08\xb2'
Receive: 23 30.857819 30.857685 49: seq: 11, identify_response offset=1280 data=b'\xa4\xccR\xa5\x00j\xdd\xe5&\x80\x05\x02E\x1c\xff\xa4\x8b\x8a\x04N\x17\x1d!)\xb6UNh\xd7\x9c%\x88@\x94\x12Q\xcb\x1f5\x0b'
Receive: 24 30.858270 30.858137 49: seq: 12, identify_response offset=1320 data=b'\x90\xa4X\xaf)\x06\x8ac\x01!\xf9R\xfb\xef\x13\\\x10g\xa6\xd7\xd1\xc2\xfc\x93\xa4\x15D\n\xaa\xeae\x8bXs\xee\x9ccp\x8e0'
Receive: 25 30.858749 30.858600 49: seq: 13, identify_response offset=1360 data=b"\x0b\x08\xcfs\xa5\x1e4\x8a\rt\x16\x91pJG$\x88\x85\xdc\x8b'@\x92:\x92S\xe1\xa8\x11\xb23A\xa8\xe9\xa48\x95F\x1e-"
Receive: 26 30.859263 30.859113 49: seq: 14, identify_response offset=1400 data=b'\x9aj>\x9e?G\x04*D\x19\xeaK\x81>\xd9\xce\xb1N\xc7\xf9d\x83X*\x17\xcd1\x99\x80\xf0!0\xd7\xb7V\x1al\x1d\x82J'
Receive: 27 30.859799 30.859658 49: seq: 15, identify_response offset=1440 data=b'a\xd0V(v1\x1b\xca\xbc\xc0\x06\x14\xb0\xa4\xce$g\xa2V\xa1\xd6f\x02\x14\xc7\xe0F45\xca\x10=\xc8\t\xf3\x01\xd5\xda8\xbc'
Receive: 28 30.860418 30.860250 49: seq: 16, identify_response offset=1480 data=b'\xd1\xcfPy\xdf\r:="_\xa1\xc6VI\xf8c/\xe0J\xfcdlkWZ\x9c\xc2G\x02\r\xa4\xa8z\xcakx\xb6\x14\x7f2'
Receive: 29 30.860989 30.860845 49: seq: 17, identify_response offset=1520 data=b'Y/6b.\xbf\xbd\xca\xaf/\xff\x85\xc9\xcd\x16\xae\xe8\xea\x87\x9f\xae\xbe\xcf\xbf\xfb\xe5\xcd\xcf\xd8c\xa0\xbf\xb3\xd5\xf5\xd5\xc7\xd5\xc5\xaa'
Receive: 30 30.861471 30.861333 49: seq: 18, identify_response offset=1560 data=b'\x16\xed\xf4\xb8:[\xbd\xbf\xbaT\xb6b\xc8@\xa1\xde\xff\xf3\x9a\x86Q\x98a\xc4\xbd\xf9p\xf9\xe1&\xbf\xf9x}\xf3s\xfe\xfa\xf2\xe6'
Receive: 31 30.861930 30.861795 49: seq: 19, identify_response offset=1600 data=b'\r&\x94\xe9\'L)\'HrUa\xa6\xda@:u\xd2\x9f\xaf\xd6\xab\x8b\x7f\xaf\xcf\x82\xe4W@\x05US\x8d"\x15\xb5\x11\xa0v'
Receive: 32 30.862388 30.862255 49: seq: 1a, identify_response offset=1640 data=b'\xda\xfc\n\xf9c/:\xc2\x0c7f\\\x1eD\xbf\xfe\xfa9H`!0\xbf\x80\x85\x16\x96@!=\x87E\x16\xb6\x01\r\x9f\xc3b\x0b'
Receive: 33 30.862833 30.862699 49: seq: 1b, identify_response offset=1680 data=b"\x0b\x02($\xe6\xc0\xc4\x01\xe3x\xc9M\xea\x80Y\xb8d's\xac\xae\x83%?\x1b\x07\x8c\xd6\x86!p9tz\xf8@P\x9a$`"
Receive: 34 30.863285 30.863147 49: seq: 1c, identify_response offset=1720 data=b'\xe3A\xea@\x81\x07\x02V}P\xe8\x81\xe0\xe2|P\xe4\x816\xf1\x0c\x14;P\n\xfa\xe1\x83\x12\x0f\x14\xcc\xd9H=P4g#\xf3'
Receive: 35 30.863735 30.863600 49: seq: 1d, identify_response offset=1760 data=b"@\xb1b\xe3\xd3\xcc=B\xdd\xa7\x94!\x88\xa2hu\x01\x1aY\xc8d\x1dg\x95\xcai\xc7\x9a'\xeb \xbc\x05%\xd3TZ\xa5\xe0\xb3"
Receive: 36 30.864296 30.864140 49: seq: 1e, identify_response offset=1800 data=b'\xe2\xf7k\xa3V\xb8\x1fM\x05j\nT\xd2\x9f\x0c\xd5d\x12\x84\xfed\xa4&3#\x1a\x9a\x8c\xd5d\xb0\x0ec\x7f6\xa1\xd9p3\xdb'
Receive: 37 30.864853 30.864706 49: seq: 1f, identify_response offset=1840 data=b'*\xa5Y{%4\x9b\xd1,8:sVH7\x04:\x8a\x01*\xcc\\T\xda4\x992\xe1\x1d\xe5\x95\xd4\x12\xbb\xack\xa6-\xd0\x84'
Receive: 38 30.865384 30.865236 49: seq: 10, identify_response offset=1880 data=b'&\xc9\x9aI\x8e\xecP\xdcs\xac\x971\x7f\xe4~\xe8\xa1v\xe1e\x8d.\xec\x89\x99\xb2\xad\xa2\xb8zU\xb4\xac\xedF\x06\xbe\x8ca<'
Receive: 39 30.865965 30.865812 49: seq: 11, identify_response offset=1920 data=b'`p\x13D\xcc\x141{8\x08\xf8&\xd7"Y\x0f\xce\x11X\xa4\xc0\r\xb4\x9f\x8f\x18(\x99\x14{X\x15v/F&$+\xf4^'
Receive: 40 30.866430 30.866304 49: seq: 12, identify_response offset=1960 data=b'\xd4F\xa1rR#KDE\xb7DE/\xcd\xaa\xe4\x1ar\x88\xa4\x85' read=0
Sent 16 33.204687 33.204687 14: seq: 1e, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 17 33.209420 33.209420 19: seq: 1f, tmcuart_send oid=6 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 18 33.212422 33.212422 14: seq: 10, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 19 33.217227 33.217227 19: seq: 11, tmcuart_send oid=6 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 20 33.220210 33.220210 14: seq: 12, tmcuart_send oid=6 write=b'\xea\x03H \xe4' read=10
Sent 21 33.224810 33.224810 14: seq: 13, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 22 33.229080 33.229080 19: seq: 14, tmcuart_send oid=7 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 23 33.232114 33.232114 14: seq: 15, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 24 33.236452 33.236452 19: seq: 16, tmcuart_send oid=7 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 25 33.239410 33.239410 14: seq: 17, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 26 33.244160 33.244160 19: seq: 18, tmcuart_send oid=7 write=b'\xea\x03\x88=\x91\x00\x02l\xa0\x9a' read=0
Sent 27 33.247113 33.247113 14: seq: 19, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 28 33.251826 33.251826 19: seq: 1a, tmcuart_send oid=7 write=b'\xea\x03\x082\x80\x10\x9ah"\x9c' read=0
Sent 29 33.254766 33.254766 14: seq: 1b, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 30 33.259481 33.259481 19: seq: 1c, tmcuart_send oid=7 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 31 33.262415 33.262415 14: seq: 1d, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 32 33.267115 33.267115 19: seq: 1e, tmcuart_send oid=7 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 33 33.270045 33.270045 14: seq: 1f, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 34 33.274762 33.274762 19: seq: 10, tmcuart_send oid=7 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 35 33.277705 33.277705 14: seq: 11, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 36 33.282359 33.282359 19: seq: 12, tmcuart_send oid=7 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 37 33.285283 33.285283 14: seq: 13, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 38 33.290087 33.290087 19: seq: 14, tmcuart_send oid=7 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 39 33.292843 33.292843 14: seq: 15, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 40 33.297526 33.297526 19: seq: 16, tmcuart_send oid=7 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 41 33.300586 33.300586 14: seq: 17, tmcuart_send oid=7 write=b'\xea\x03H \xe4' read=10
Sent 42 33.305317 33.305317 14: seq: 18, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 43 33.309627 33.309627 19: seq: 19, tmcuart_send oid=8 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 44 33.312746 33.312746 14: seq: 1a, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 45 33.317157 33.317157 19: seq: 1b, tmcuart_send oid=8 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 46 33.320196 33.320196 14: seq: 1c, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 47 33.324861 33.324861 19: seq: 1d, tmcuart_send oid=8 write=b'\xea\x03\x88=\x91\x00\x02l\xa0\x9a' read=0
Sent 48 33.327925 33.327925 14: seq: 1e, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 49 33.332657 33.332657 19: seq: 1f, tmcuart_send oid=8 write=b'\xea\x03\x082\x80\x10\x9ah"\x9c' read=0
Sent 50 33.335592 33.335592 14: seq: 10, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 51 33.340323 33.340323 19: seq: 11, tmcuart_send oid=8 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 52 33.343297 33.343297 14: seq: 12, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 53 33.348086 33.348086 19: seq: 13, tmcuart_send oid=8 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 54 33.351052 33.351052 14: seq: 14, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 55 33.356510 33.356510 19: seq: 15, tmcuart_send oid=8 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 56 33.359836 33.359836 14: seq: 16, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 57 33.364601 33.364601 19: seq: 17, tmcuart_send oid=8 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 58 33.367541 33.367541 14: seq: 18, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 59 33.372669 33.372669 19: seq: 19, tmcuart_send oid=8 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 60 33.375609 33.375609 14: seq: 1a, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 61 33.380361 33.380361 19: seq: 1b, tmcuart_send oid=8 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 62 33.383321 33.383321 14: seq: 1c, tmcuart_send oid=8 write=b'\xea\x03H \xe4' read=10
Sent 63 33.698194 33.698194 7: seq: 1d, stepper_get_position oid=9
Sent 64 33.699639 33.699639 14: seq: 1e, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 65 33.704666 33.704666 7: seq: 1f, stepper_get_position oid=11
Sent 66 33.705516 33.705516 14: seq: 10, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 67 33.709160 33.709160 14: seq: 11, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 68 33.712818 33.712818 14: seq: 12, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 69 33.716529 33.716529 14: seq: 13, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 70 33.720264 33.720264 14: seq: 14, tmcuart_send oid=3 write=b'\xea\x03H-\xd5' read=10
Sent 71 33.724432 33.724432 7: seq: 15, stepper_get_position oid=12
Sent 72 33.729709 33.729709 14: seq: 16, tmcuart_send oid=4 write=b'\xea\x03H-\xd5' read=10
Sent 73 33.734410 33.734410 7: seq: 17, stepper_get_position oid=15
Sent 74 33.735155 33.735155 14: seq: 18, tmcuart_send oid=5 write=b'\xea\x03H-\xd5' read=10
Sent 75 33.739850 33.739850 7: seq: 19, stepper_get_position oid=16
Sent 76 33.740627 33.740627 14: seq: 1a, tmcuart_send oid=6 write=b'\xea\x03H-\xd5' read=10
Sent 77 33.745304 33.745304 7: seq: 1b, stepper_get_position oid=18
Sent 78 33.746051 33.746051 14: seq: 1c, tmcuart_send oid=7 write=b'\xea\x03H-\xd5' read=10
Sent 79 33.750623 33.750623 7: seq: 1d, stepper_get_position oid=19
Sent 80 33.751349 33.751349 14: seq: 1e, tmcuart_send oid=8 write=b'\xea\x03H-\xd5' read=10
Sent 81 33.887580 33.887580 6: seq: 1f, get_clock
Sent 82 34.872237 34.872237 6: seq: 10, get_clock
Sent 83 40.145543 40.145543 6: seq: 11, get_clock
Sent 84 41.129396 41.129396 6: seq: 12, get_clock
Sent 85 42.113667 42.113667 6: seq: 13, get_clock
Sent 86 43.098512 43.098512 6: seq: 14, get_clock
Sent 87 44.083116 44.083116 6: seq: 15, get_clock
Sent 88 45.067845 45.067845 6: seq: 16, get_clock
Sent 89 46.016222 46.016222 59: seq: 17, set_next_step_dir oid=9 dir=0, set_next_step_dir oid=11 dir=0, queue_digital_out oid=24 clock=1032500653 on_ticks=0, queue_digital_out oid=25 clock=1032500653 on_ticks=0, queue_step oid=9 interval=1032684365 count=1 add=0, queue_step oid=9 interval=134486 count=1 add=0, queue_step oid=11 interval=1032684365 count=1 add=0, queue_step oid=11 interval=134486 count=1 add=0
Sent 90 46.016222 46.016222 63: seq: 18, queue_step oid=9 interval=88158 count=4 add=-10513, queue_step oid=11 interval=88158 count=4 add=-10513, queue_step oid=9 interval=50683 count=10 add=-2094, queue_step oid=11 interval=50683 count=10 add=-2094, queue_step oid=9 interval=31419 count=22 add=-541, queue_step oid=11 interval=31419 count=22 add=-541, queue_step oid=9 interval=20980 count=34 add=-191
Sent 91 46.016222 46.016222 62: seq: 19, queue_step oid=11 interval=20980 count=34 add=-191, queue_step oid=9 interval=15169 count=61 add=-72, queue_step oid=11 interval=15169 count=61 add=-72, queue_step oid=9 interval=11220 count=93 add=-31, queue_step oid=11 interval=11220 count=93 add=-31, queue_step oid=9 interval=8640 count=127 add=-15, queue_step oid=11 interval=8640 count=127 add=-15, queue_step oid=9 interval=6917 count=165 add=-8
Sent 92 46.016663 46.016663 54: seq: 1a, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0, queue_step oid=11 interval=6917 count=165 add=-8, queue_step oid=9 interval=5707 count=156 add=-1, queue_step oid=11 interval=5707 count=156 add=-1, queue_step oid=9 interval=5626 count=2021 add=0, queue_step oid=11 interval=5626 count=2021 add=0
Sent 93 46.019416 46.019416 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 94 46.023820 46.023820 14: seq: 1c, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 95 46.027503 46.027503 14: seq: 1d, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 96 46.030890 46.030890 14: seq: 1e, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 97 46.034250 46.034250 14: seq: 1f, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 98 46.037741 46.037741 14: seq: 10, tmcuart_send oid=3 write=b'\xea\x03H \xe4' read=10
Sent 99 46.042851 46.042851 6: seq: 11, emergency_stop
Dumping receive queue 100 messages
Receive: 0 33.887788 33.887580 11: seq: 10, clock clock=3099552320
Receive: 1 34.014358 33.887580 14: seq: 10, analog_in_state oid=20 next_clock=3175032704 value=7555
Receive: 2 34.024567 33.887580 15: seq: 10, analog_in_state oid=21 next_clock=3176832704 value=31457
Receive: 3 34.314366 33.887580 14: seq: 10, analog_in_state oid=20 next_clock=3229032704 value=7519
Receive: 4 34.324595 33.887580 15: seq: 10, analog_in_state oid=21 next_clock=3230832704 value=31461
Receive: 5 34.614644 33.887580 14: seq: 10, analog_in_state oid=20 next_clock=3283032704 value=7518
Receive: 6 34.624311 33.887580 15: seq: 10, analog_in_state oid=21 next_clock=3284832704 value=31457
Receive: 7 34.872422 34.872237 11: seq: 11, clock clock=3276790321
Receive: 8 34.914310 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3337032704 value=7525
Receive: 9 34.924363 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3338832704 value=31454
Receive: 10 35.214417 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3391032704 value=7520
Receive: 11 35.224380 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3392832704 value=31454
Receive: 12 35.514366 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3445032704 value=7517
Receive: 13 35.524346 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3446832704 value=31452
Receive: 14 35.814345 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3499032704 value=7523
Receive: 15 35.824301 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3500832704 value=31451
Receive: 16 36.114320 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3553032704 value=7518
Receive: 17 36.124287 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3554832704 value=31450
Receive: 18 36.414298 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3607032704 value=7521
Receive: 19 36.424245 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3608832704 value=31445
Receive: 20 36.714312 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3661032704 value=7521
Receive: 21 36.724287 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3662832704 value=31445
Receive: 22 37.014336 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3715032704 value=7521
Receive: 23 37.024302 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3716832704 value=31445
Receive: 24 37.314329 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3769032704 value=7522
Receive: 25 37.324308 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3770832704 value=31446
Receive: 26 37.614311 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3823032704 value=7523
Receive: 27 37.624324 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3824832704 value=31442
Receive: 28 37.907147 34.872237 15: seq: 11, stats count=692 sum=853178 sumsq=5456522
Receive: 29 37.914353 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3877032704 value=7523
Receive: 30 37.924291 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3878832704 value=31443
Receive: 31 38.214315 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3931032704 value=7517
Receive: 32 38.224301 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3932832704 value=31446
Receive: 33 38.514348 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=3985032704 value=7517
Receive: 34 38.524342 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=3986832704 value=31447
Receive: 35 38.814307 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=4039032704 value=7523
Receive: 36 38.824287 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=4040832704 value=31446
Receive: 37 39.114295 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=4093032704 value=7527
Receive: 38 39.124279 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=4094832704 value=31446
Receive: 39 39.414277 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=4147032704 value=7522
Receive: 40 39.424288 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=4148832704 value=31447
Receive: 41 39.714294 34.872237 14: seq: 11, analog_in_state oid=20 next_clock=4201032704 value=7524
Receive: 42 39.724274 34.872237 15: seq: 11, analog_in_state oid=21 next_clock=4202832704 value=31449
Receive: 43 40.014278 34.872237 13: seq: 11, analog_in_state oid=20 next_clock=4255032704 value=7521
Receive: 44 40.024271 34.872237 14: seq: 11, analog_in_state oid=21 next_clock=4256832704 value=31450
Receive: 45 40.146007 40.145543 11: seq: 12, clock clock=4225987670
Receive: 46 40.314267 40.145543 13: seq: 12, analog_in_state oid=20 next_clock=14065408 value=7525
Receive: 47 40.324227 40.145543 14: seq: 12, analog_in_state oid=21 next_clock=15865408 value=31454
Receive: 48 40.614239 40.145543 13: seq: 12, analog_in_state oid=20 next_clock=68065408 value=7526
Receive: 49 40.624232 40.145543 14: seq: 12, analog_in_state oid=21 next_clock=69865408 value=31456
Receive: 50 40.914284 40.145543 13: seq: 12, analog_in_state oid=20 next_clock=122065408 value=7522
Receive: 51 40.924245 40.145543 14: seq: 12, analog_in_state oid=21 next_clock=123865408 value=31459
Receive: 52 41.129613 41.129396 10: seq: 13, clock clock=108112084
Receive: 53 41.214246 41.129396 13: seq: 13, analog_in_state oid=20 next_clock=176065408 value=7527
Receive: 54 41.224228 41.129396 14: seq: 13, analog_in_state oid=21 next_clock=177865408 value=31461
Receive: 55 41.514242 41.129396 14: seq: 13, analog_in_state oid=20 next_clock=230065408 value=7526
Receive: 56 41.524247 41.129396 15: seq: 13, analog_in_state oid=21 next_clock=231865408 value=31462
Receive: 57 41.814244 41.129396 14: seq: 13, analog_in_state oid=20 next_clock=284065408 value=7523
Receive: 58 41.824223 41.129396 15: seq: 13, analog_in_state oid=21 next_clock=285865408 value=31466
Receive: 59 42.113916 42.113667 11: seq: 14, clock clock=285290910
Receive: 60 42.114239 42.113667 14: seq: 14, analog_in_state oid=20 next_clock=338065408 value=7525
Receive: 61 42.124244 42.113667 15: seq: 14, analog_in_state oid=21 next_clock=339865408 value=31464
Receive: 62 42.414279 42.113667 14: seq: 14, analog_in_state oid=20 next_clock=392065408 value=7526
Receive: 63 42.424251 42.113667 15: seq: 14, analog_in_state oid=21 next_clock=393865408 value=31470
Receive: 64 42.714260 42.113667 14: seq: 14, analog_in_state oid=20 next_clock=446065408 value=7525
Receive: 65 42.724273 42.113667 15: seq: 14, analog_in_state oid=21 next_clock=447865408 value=31472
Receive: 66 43.007165 42.113667 14: seq: 14, stats count=126 sum=110707 sumsq=577406
Receive: 67 43.014308 42.113667 14: seq: 14, analog_in_state oid=20 next_clock=500065408 value=7523
Receive: 68 43.024290 42.113667 15: seq: 14, analog_in_state oid=21 next_clock=501865408 value=31473
Receive: 69 43.098869 43.098512 11: seq: 15, clock clock=462558443
Receive: 70 43.314309 43.098512 14: seq: 15, analog_in_state oid=20 next_clock=554065408 value=7526
Receive: 71 43.324331 43.098512 15: seq: 15, analog_in_state oid=21 next_clock=555865408 value=31478
Receive: 72 43.614242 43.098512 14: seq: 15, analog_in_state oid=20 next_clock=608065408 value=7524
Receive: 73 43.624215 43.098512 15: seq: 15, analog_in_state oid=21 next_clock=609865408 value=31475
Receive: 74 43.914282 43.098512 14: seq: 15, analog_in_state oid=20 next_clock=662065408 value=7529
Receive: 75 43.924236 43.098512 15: seq: 15, analog_in_state oid=21 next_clock=663865408 value=31483
Receive: 76 44.083387 44.083116 11: seq: 16, clock clock=639782498
Receive: 77 44.214336 44.083116 14: seq: 16, analog_in_state oid=20 next_clock=716065408 value=7527
Receive: 78 44.224342 44.083116 15: seq: 16, analog_in_state oid=21 next_clock=717865408 value=31478
Receive: 79 44.514356 44.083116 14: seq: 16, analog_in_state oid=20 next_clock=770065408 value=7519
Receive: 80 44.524321 44.083116 15: seq: 16, analog_in_state oid=21 next_clock=771865408 value=31481
Receive: 81 44.814354 44.083116 14: seq: 16, analog_in_state oid=20 next_clock=824065408 value=7526
Receive: 82 44.824297 44.083116 15: seq: 16, analog_in_state oid=21 next_clock=825865408 value=31482
Receive: 83 45.068237 45.067845 11: seq: 17, clock clock=817038450
Receive: 84 45.114343 45.067845 14: seq: 17, analog_in_state oid=20 next_clock=878065408 value=7529
Receive: 85 45.124361 45.067845 15: seq: 17, analog_in_state oid=21 next_clock=879865408 value=31485
Receive: 86 45.414263 45.067845 14: seq: 17, analog_in_state oid=20 next_clock=932065408 value=7525
Receive: 87 45.424220 45.067845 15: seq: 17, analog_in_state oid=21 next_clock=933865408 value=31486
Receive: 88 45.714238 45.067845 14: seq: 17, analog_in_state oid=20 next_clock=986065408 value=7527
Receive: 89 45.724234 45.067845 15: seq: 17, analog_in_state oid=21 next_clock=987865408 value=31489
Receive: 90 46.014241 45.067845 14: seq: 17, analog_in_state oid=20 next_clock=1040065408 value=7527
Receive: 91 46.019048 46.016663 8: seq: 1b, tmcuart_response oid=2 read=b''
Receive: 92 46.023340 46.019416 18: seq: 1c, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02h!\xb9'
Receive: 93 46.024212 46.023820 15: seq: 1d, analog_in_state oid=21 next_clock=1041865408 value=31486
Receive: 94 46.026866 46.023820 8: seq: 1d, tmcuart_response oid=3 read=b''
Receive: 95 46.030543 46.027503 8: seq: 1e, tmcuart_response oid=3 read=b''
Receive: 96 46.033928 46.030890 8: seq: 1f, tmcuart_response oid=3 read=b''
Receive: 97 46.037428 46.034250 8: seq: 10, tmcuart_response oid=3 read=b''
Receive: 98 46.040775 46.037741 8: seq: 11, tmcuart_response oid=3 read=b''
Receive: 99 46.043093 46.042851 12: seq: 12, shutdown clock=992537717 static_string_id=Command request
MCU 'toolboard_t0' shutdown: Command request
clocksync state: mcu_freq=64000000 last_clock=3433355389 clock_est=(33.973 2723270884 63999422.601) min_half_rtt=0.000081 min_rtt_time=33.108 time_avg=33.973(18.168) clock_avg=2723270884.100(1162739765.868) pred_variance=2230270937.161 clock_adj=(-1.385 63999467.250)
Dumping serial stats: bytes_write=1512 bytes_read=6317 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
Dumping send queue 100 messages
Sent 0 31.643951 31.643951 9: seq: 11, identify offset=1960 count=40
Sent 1 31.645133 31.645133 9: seq: 12, identify offset=2000 count=40
Sent 2 31.646257 31.646257 9: seq: 13, identify offset=2040 count=40
Sent 3 31.649177 31.649177 9: seq: 14, identify offset=2080 count=40
Sent 4 31.650310 31.650310 9: seq: 15, identify offset=2120 count=40
Sent 5 31.652542 31.652542 9: seq: 16, identify offset=2160 count=40
Sent 6 31.653532 31.653532 9: seq: 17, identify offset=2200 count=40
Sent 7 31.654528 31.654528 9: seq: 18, identify offset=2240 count=40
Sent 8 31.655522 31.655522 9: seq: 19, identify offset=2280 count=40
Sent 9 31.656630 31.656630 9: seq: 1a, identify offset=2320 count=40
Sent 10 31.658671 31.658671 9: seq: 1b, identify offset=2360 count=40
Sent 11 31.664414 31.664414 9: seq: 1c, identify offset=2400 count=40
Sent 12 31.665311 31.665311 9: seq: 1d, identify offset=2440 count=40
Sent 13 31.666248 31.666248 9: seq: 1e, identify offset=2480 count=40
Sent 14 31.667118 31.667118 9: seq: 1f, identify offset=2520 count=40
Sent 15 31.667990 31.667990 9: seq: 10, identify offset=2560 count=40
Sent 16 31.669102 31.669102 9: seq: 11, identify offset=2600 count=40
Sent 17 31.670218 31.670218 9: seq: 12, identify offset=2640 count=40
Sent 18 31.672398 31.672398 9: seq: 13, identify offset=2680 count=40
Sent 19 31.673505 31.673505 9: seq: 14, identify offset=2720 count=40
Sent 20 31.675917 31.675917 9: seq: 15, identify offset=2760 count=40
Sent 21 31.677054 31.677054 9: seq: 16, identify offset=2800 count=40
Sent 22 31.678099 31.678099 9: seq: 17, identify offset=2840 count=40
Sent 23 31.679274 31.679274 9: seq: 18, identify offset=2880 count=40
Sent 24 31.680389 31.680389 9: seq: 19, identify offset=2920 count=40
Sent 25 31.684479 31.684479 9: seq: 1a, identify offset=2960 count=40
Sent 26 31.687570 31.687570 9: seq: 1b, identify offset=3000 count=40
Sent 27 31.690822 31.690822 9: seq: 1c, identify offset=3040 count=40
Sent 28 31.696562 31.696562 9: seq: 1d, identify offset=3080 count=40
Sent 29 31.697700 31.697700 9: seq: 1e, identify offset=3120 count=40
Sent 30 31.707640 31.707640 6: seq: 1f, get_uptime
Sent 31 31.761970 31.761970 6: seq: 10, get_clock
Sent 32 31.813272 31.813272 6: seq: 11, get_clock
Sent 33 31.864683 31.864683 6: seq: 12, get_clock
Sent 34 31.915841 31.915841 6: seq: 13, get_clock
Sent 35 31.967126 31.967126 6: seq: 14, get_clock
Sent 36 32.018754 32.018754 6: seq: 15, get_clock
Sent 37 32.069939 32.069939 6: seq: 16, get_clock
Sent 38 32.120998 32.120998 6: seq: 17, get_clock
Sent 39 32.122990 32.122990 6: seq: 18, get_clock
Sent 40 32.124668 32.124668 12: seq: 19, debug_read order=1 addr=536835496
Sent 41 32.125417 32.125417 12: seq: 1a, debug_read order=1 addr=536835530
Sent 42 32.774718 32.774718 6: seq: 1b, get_config
Sent 43 32.776503 32.776503 7: seq: 1c, allocate_oids count=12
Sent 44 32.776760 32.776760 9: seq: 1d, config_spi oid=0 pin=PB12 cs_active_high=0
Sent 45 32.777044 32.777044 8: seq: 1e, config_adxl345 oid=1 spi_oid=0
Sent 46 32.777240 32.777240 9: seq: 1f, config_analog_in oid=6 pin=ADC_TEMPERATURE
Sent 47 32.777380 32.777380 15: seq: 10, spi_set_software_bus oid=0 miso_pin=PB2 mosi_pin=PB11 sclk_pin=PB10 mode=3 rate=5000000
Sent 48 32.777509 32.777509 11: seq: 11, config_digital_out oid=7 pin=PA0 value=1 default_value=0 max_duration=0
Sent 49 32.777751 32.777751 9: seq: 12, set_digital_out_pwm_cycle oid=7 cycle_ticks=2560
Sent 50 32.777885 32.777885 11: seq: 13, config_digital_out oid=8 pin=PA1 value=0 default_value=1 max_duration=0
Sent 51 32.778004 32.778004 10: seq: 14, set_digital_out_pwm_cycle oid=8 cycle_ticks=640000
Sent 52 32.778221 32.778221 12: seq: 15, config_tmcuart oid=2 rx_pin=PA15 pull_up=0 tx_pin=PA15 bit_time=1600
Sent 53 32.778332 32.778332 9: seq: 16, config_endstop oid=3 pin=PB6 pull_up=0
Sent 54 32.778444 32.778444 7: seq: 17, config_trsync oid=4
Sent 55 32.778643 32.778643 8: seq: 18, config_analog_in oid=9 pin=PA3
Sent 56 32.778778 32.778778 15: seq: 19, config_digital_out oid=10 pin=PB13 value=0 default_value=0 max_duration=320000000
Sent 57 32.778897 32.778897 11: seq: 1a, set_digital_out_pwm_cycle oid=10 cycle_ticks=6400000
Sent 58 32.779124 32.779124 11: seq: 1b, config_stepper oid=5 step_pin=PD0 dir_pin=PD1 invert_step=4294967295 step_pulse_ticks=0
Sent 59 32.779245 32.779245 11: seq: 1c, config_digital_out oid=11 pin=PD2 value=1 default_value=1 max_duration=0
Sent 60 32.779379 32.779379 11: seq: 1d, finalize_config crc=588137470
Sent 61 32.779612 32.779612 25: seq: 1e, query_analog_in oid=6 clock=2716478996 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=0 max_value=65535 range_check_count=4
Sent 62 32.779987 32.779987 14: seq: 1f, queue_digital_out oid=7 clock=2659422015 on_ticks=2560
Sent 63 32.780260 32.780260 13: seq: 10, queue_digital_out oid=8 clock=2659426068 on_ticks=0
Sent 64 32.780407 32.780407 26: seq: 11, query_analog_in oid=9 clock=2718398996 sample_ticks=64000 sample_count=8 rest_ticks=19200000 min_value=10237 max_value=16734 range_check_count=4
Sent 65 32.780548 32.780548 13: seq: 12, queue_digital_out oid=10 clock=2659444803 on_ticks=0
Sent 66 32.780803 32.780803 6: seq: 13, get_config
Sent 67 33.107836 33.107836 6: seq: 14, get_clock
Sent 68 33.388171 33.388171 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 69 33.400705 33.400705 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03\x080\x80\x00\n\x08\xb8\x87' read=0
Sent 70 33.403853 33.403853 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 71 33.408437 33.408437 19: seq: 18, tmcuart_send oid=2 write=b'\xea\x03h0\x80\x00\x12\x08 \xda' read=0
Sent 72 33.411506 33.411506 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 73 33.416284 33.416284 19: seq: 1a, tmcuart_send oid=2 write=b'\xea\x03\x88=\x91\x04\x1a\x88\xae\xe7' read=0
Sent 74 33.419261 33.419261 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 75 33.424086 33.424086 19: seq: 1c, tmcuart_send oid=2 write=b'\xea\x03\x082\x80\x10\xb2\xc8\xa2\xa4' read=0
Sent 76 33.427078 33.427078 14: seq: 1d, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 77 33.431794 33.431794 19: seq: 1e, tmcuart_send oid=2 write=b'\xea\x03h2\x80\x1e\xfa\xef?\xdf' read=0
Sent 78 33.434703 33.434703 14: seq: 1f, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 79 33.439420 33.439420 19: seq: 10, tmcuart_send oid=2 write=b'\xea\x03\x882\x80\x00\x02\x08\xa0\xe6' read=0
Sent 80 33.442423 33.442423 14: seq: 11, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 81 33.447145 33.447145 19: seq: 12, tmcuart_send oid=2 write=b'\xea\x03H8\x80\x00\x02\x08 \xde' read=0
Sent 82 33.450100 33.450100 14: seq: 13, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 83 33.454831 33.454831 19: seq: 14, tmcuart_send oid=2 write=b'\xea\x03\x08>\xe4\x1ar\x88\xa4\x85' read=0
Sent 84 33.457744 33.457744 14: seq: 15, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 85 33.462481 33.462481 19: seq: 16, tmcuart_send oid=2 write=b'\xea\x03(2\x80\x00\x02\x88"\xf3' read=0
Sent 86 33.465563 33.465563 14: seq: 17, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 87 33.470314 33.470314 19: seq: 18, tmcuart_send oid=2 write=b'\xea\x03\x088\x80\x00\x02\x08 \xba' read=0
Sent 88 33.473339 33.473339 14: seq: 19, tmcuart_send oid=2 write=b'\xea\x03H \xe4' read=10
Sent 89 33.756496 33.756496 7: seq: 1a, stepper_get_position oid=5
Sent 90 33.757452 33.757452 14: seq: 1b, tmcuart_send oid=2 write=b'\xea\x03H-\xd5' read=10
Sent 91 34.092794 34.092794 6: seq: 1c, get_clock
Sent 92 35.077566 35.077566 6: seq: 1d, get_clock
Sent 93 40.145236 40.145236 6: seq: 1e, get_clock
Sent 94 41.129525 41.129525 6: seq: 1f, get_clock
Sent 95 42.113796 42.113796 6: seq: 10, get_clock
Sent 96 43.098806 43.098806 6: seq: 11, get_clock
Sent 97 44.083242 44.083242 6: seq: 12, get_clock
Sent 98 45.068026 45.068026 6: seq: 13, get_clock
Sent 99 46.043392 46.043392 6: seq: 14, emergency_stop
Dumping receive queue 100 messages
Receive: 0 33.461817 33.457744 18: seq: 16, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02\x08!\x9e'
Receive: 1 33.465002 33.462481 8: seq: 17, tmcuart_response oid=2 read=b''
Receive: 2 33.469629 33.465563 18: seq: 18, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02(\xa1\xda'
Receive: 3 33.472846 33.470314 8: seq: 19, tmcuart_response oid=2 read=b''
Receive: 4 33.477444 33.473339 18: seq: 1a, tmcuart_response oid=2 read=b'\n\xfaO \x80\x00\x02H\xa1\xfd'
Receive: 5 33.756731 33.756496 8: seq: 1b, stepper_position oid=5 pos=0
Receive: 6 33.761502 33.757452 18: seq: 1c, tmcuart_response oid=2 read=b'\n\xfaO-\x80\x00\x02H \xf9'
Receive: 7 33.874112 33.757452 14: seq: 1c, analog_in_state oid=6 next_clock=2735678996 value=7445
Receive: 8 33.904101 33.757452 14: seq: 1c, analog_in_state oid=9 next_clock=2737598996 value=10862
Receive: 9 34.093001 34.092794 11: seq: 1d, clock clock=2730946741
Receive: 10 34.180127 34.092794 14: seq: 1d, analog_in_state oid=6 next_clock=2754878996 value=7447
Receive: 11 34.204127 34.092794 14: seq: 1d, analog_in_state oid=9 next_clock=2756798996 value=10860
Receive: 12 34.474123 34.092794 14: seq: 1d, analog_in_state oid=6 next_clock=2774078996 value=7443
Receive: 13 34.504110 34.092794 14: seq: 1d, analog_in_state oid=9 next_clock=2775998996 value=10861
Receive: 14 34.774175 34.092794 14: seq: 1d, analog_in_state oid=6 next_clock=2793278996 value=7443
Receive: 15 34.804403 34.092794 14: seq: 1d, analog_in_state oid=9 next_clock=2795198996 value=10863
Receive: 16 35.074395 34.092794 14: seq: 1d, analog_in_state oid=6 next_clock=2812478996 value=7443
Receive: 17 35.077843 35.077566 11: seq: 1e, clock clock=2793975709
Receive: 18 35.104191 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2814398996 value=10861
Receive: 19 35.374174 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2831678996 value=7445
Receive: 20 35.404137 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2833598996 value=10858
Receive: 21 35.674130 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2850878996 value=7442
Receive: 22 35.704056 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2852798996 value=10863
Receive: 23 35.974136 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2870078996 value=7440
Receive: 24 36.004149 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2871998996 value=10859
Receive: 25 36.274083 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2889278996 value=7441
Receive: 26 36.304090 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2891198996 value=10860
Receive: 27 36.422007 35.077566 15: seq: 1e, stats count=609 sum=836869 sumsq=11206184
Receive: 28 36.574086 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2908478996 value=7442
Receive: 29 36.604089 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2910398996 value=10860
Receive: 30 36.874178 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2927678996 value=7443
Receive: 31 36.904129 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2929598996 value=10859
Receive: 32 37.174149 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2946878996 value=7446
Receive: 33 37.204138 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2948798996 value=10860
Receive: 34 37.474114 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2966078996 value=7447
Receive: 35 37.504129 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2967998996 value=10859
Receive: 36 37.774121 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=2985278996 value=7446
Receive: 37 37.804134 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=2987198996 value=10859
Receive: 38 38.074142 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3004478996 value=7447
Receive: 39 38.104140 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3006398996 value=10861
Receive: 40 38.374104 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3023678996 value=7444
Receive: 41 38.404134 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3025598996 value=10859
Receive: 42 38.674122 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3042878996 value=7442
Receive: 43 38.704150 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3044798996 value=10860
Receive: 44 38.974134 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3062078996 value=7443
Receive: 45 39.004111 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3063998996 value=10861
Receive: 46 39.274144 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3081278996 value=7444
Receive: 47 39.304130 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3083198996 value=10859
Receive: 48 39.574121 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3100478996 value=7441
Receive: 49 39.604175 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3102398996 value=10861
Receive: 50 39.874176 35.077566 14: seq: 1e, analog_in_state oid=6 next_clock=3119678996 value=7444
Receive: 51 39.904170 35.077566 14: seq: 1e, analog_in_state oid=9 next_clock=3121598996 value=10861
Receive: 52 40.145435 40.145236 11: seq: 1f, clock clock=3118300299
Receive: 53 40.174114 40.145236 14: seq: 1f, analog_in_state oid=6 next_clock=3138878996 value=7445
Receive: 54 40.204138 40.145236 14: seq: 1f, analog_in_state oid=9 next_clock=3140798996 value=10860
Receive: 55 40.474111 40.145236 14: seq: 1f, analog_in_state oid=6 next_clock=3158078996 value=7445
Receive: 56 40.504075 40.145236 14: seq: 1f, analog_in_state oid=9 next_clock=3159998996 value=10862
Receive: 57 40.774101 40.145236 14: seq: 1f, analog_in_state oid=6 next_clock=3177278996 value=7444
Receive: 58 40.804070 40.145236 14: seq: 1f, analog_in_state oid=9 next_clock=3179198996 value=10860
Receive: 59 41.074100 40.145236 14: seq: 1f, analog_in_state oid=6 next_clock=3196478996 value=7444
Receive: 60 41.104076 40.145236 14: seq: 1f, analog_in_state oid=9 next_clock=3198398996 value=10861
Receive: 61 41.129780 41.129525 11: seq: 10, clock clock=3181295664
Receive: 62 41.374095 41.129525 14: seq: 10, analog_in_state oid=6 next_clock=3215678996 value=7445
Receive: 63 41.404101 41.129525 14: seq: 10, analog_in_state oid=9 next_clock=3217598996 value=10857
Receive: 64 41.422015 41.129525 14: seq: 10, stats count=160 sum=148137 sumsq=756756
Receive: 65 41.674178 41.129525 14: seq: 10, analog_in_state oid=6 next_clock=3234878996 value=7445
Receive: 66 41.704073 41.129525 14: seq: 10, analog_in_state oid=9 next_clock=3236798996 value=10858
Receive: 67 41.974103 41.129525 14: seq: 10, analog_in_state oid=6 next_clock=3254078996 value=7448
Receive: 68 42.004089 41.129525 14: seq: 10, analog_in_state oid=9 next_clock=3255998996 value=10858
Receive: 69 42.114128 42.113796 11: seq: 11, clock clock=3244294735
Receive: 70 42.274137 42.113796 14: seq: 11, analog_in_state oid=6 next_clock=3273278996 value=7444
Receive: 71 42.304107 42.113796 14: seq: 11, analog_in_state oid=9 next_clock=3275198996 value=10862
Receive: 72 42.574120 42.113796 14: seq: 11, analog_in_state oid=6 next_clock=3292478996 value=7445
Receive: 73 42.604106 42.113796 14: seq: 11, analog_in_state oid=9 next_clock=3294398996 value=10863
Receive: 74 42.874247 42.113796 14: seq: 11, analog_in_state oid=6 next_clock=3311678996 value=7444
Receive: 75 42.904248 42.113796 14: seq: 11, analog_in_state oid=9 next_clock=3313598996 value=10861
Receive: 76 43.099101 43.098806 11: seq: 12, clock clock=3307329871
Receive: 77 43.174236 43.098806 14: seq: 12, analog_in_state oid=6 next_clock=3330878996 value=7447
Receive: 78 43.204174 43.098806 14: seq: 12, analog_in_state oid=9 next_clock=3332798996 value=10861
Receive: 79 43.474119 43.098806 14: seq: 12, analog_in_state oid=6 next_clock=3350078996 value=7447
Receive: 80 43.504098 43.098806 14: seq: 12, analog_in_state oid=9 next_clock=3351998996 value=10859
Receive: 81 43.774155 43.098806 14: seq: 12, analog_in_state oid=6 next_clock=3369278996 value=7444
Receive: 82 43.804102 43.098806 14: seq: 12, analog_in_state oid=9 next_clock=3371198996 value=10860
Receive: 83 44.074130 43.098806 14: seq: 12, analog_in_state oid=6 next_clock=3388478996 value=7442
Receive: 84 44.083440 44.083242 11: seq: 13, clock clock=3370328845
Receive: 85 44.104233 44.083242 14: seq: 13, analog_in_state oid=9 next_clock=3390398996 value=10860
Receive: 86 44.374291 44.083242 14: seq: 13, analog_in_state oid=6 next_clock=3407678996 value=7448
Receive: 87 44.404231 44.083242 14: seq: 13, analog_in_state oid=9 next_clock=3409598996 value=10859
Receive: 88 44.674195 44.083242 14: seq: 13, analog_in_state oid=6 next_clock=3426878996 value=7445
Receive: 89 44.704203 44.083242 14: seq: 13, analog_in_state oid=9 next_clock=3428798996 value=10857
Receive: 90 44.974212 44.083242 14: seq: 13, analog_in_state oid=6 next_clock=3446078996 value=7446
Receive: 91 45.004162 44.083242 14: seq: 13, analog_in_state oid=9 next_clock=3447998996 value=10860
Receive: 92 45.068493 45.068026 11: seq: 14, clock clock=3433355389
Receive: 93 45.274166 45.068026 14: seq: 14, analog_in_state oid=6 next_clock=3465278996 value=7446
Receive: 94 45.304110 45.068026 14: seq: 14, analog_in_state oid=9 next_clock=3467198996 value=10863
Receive: 95 45.574184 45.068026 14: seq: 14, analog_in_state oid=6 next_clock=3484478996 value=7451
Receive: 96 45.604134 45.068026 14: seq: 14, analog_in_state oid=9 next_clock=3486398996 value=10863
Receive: 97 45.874173 45.068026 14: seq: 14, analog_in_state oid=6 next_clock=3503678996 value=7448
Receive: 98 45.904133 45.068026 14: seq: 14, analog_in_state oid=9 next_clock=3505598996 value=10860
Receive: 99 46.044032 46.043392 12: seq: 15, shutdown clock=3495778730 static_string_id=Command request
MCU 'beacon' shutdown: Emergency stop
clocksync state: mcu_freq=32000000 last_clock=1604461514 clock_est=(34.497 1266171243 31999840.386) min_half_rtt=0.000200 min_rtt_time=41.130 time_avg=34.497(16.172) clock_avg=1266171243.222(517500485.018) pred_variance=556743742.279 clock_adj=(2.122 31999743.750)
Dumping serial stats: bytes_write=427 bytes_read=6423 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
Dumping send queue 56 messages
Sent 0 32.295525 32.295525 8: seq: 11, identify offset=0 count=40
Sent 1 32.306763 32.306763 8: seq: 10, identify offset=0 count=40
Sent 2 32.308178 32.308178 8: seq: 11, identify offset=40 count=40
Sent 3 32.312164 32.312164 8: seq: 12, identify offset=80 count=40
Sent 4 32.313751 32.313751 9: seq: 13, identify offset=120 count=40
Sent 5 32.315267 32.315267 9: seq: 14, identify offset=160 count=40
Sent 6 32.321147 32.321147 9: seq: 15, identify offset=200 count=40
Sent 7 32.322561 32.322561 9: seq: 16, identify offset=240 count=40
Sent 8 32.323752 32.323752 9: seq: 17, identify offset=280 count=40
Sent 9 32.324980 32.324980 9: seq: 18, identify offset=320 count=40
Sent 10 32.326965 32.326965 9: seq: 19, identify offset=360 count=40
Sent 11 32.328483 32.328483 9: seq: 1a, identify offset=400 count=40
Sent 12 32.329651 32.329651 9: seq: 1b, identify offset=440 count=40
Sent 13 32.330832 32.330832 9: seq: 1c, identify offset=480 count=40
Sent 14 32.331971 32.331971 9: seq: 1d, identify offset=520 count=40
Sent 15 32.333335 32.333335 9: seq: 1e, identify offset=560 count=40
Sent 16 32.334593 32.334593 9: seq: 1f, identify offset=600 count=40
Sent 17 32.335862 32.335862 9: seq: 10, identify offset=640 count=40
Sent 18 32.337082 32.337082 9: seq: 11, identify offset=680 count=40
Sent 19 32.338274 32.338274 9: seq: 12, identify offset=720 count=40
Sent 20 32.339621 32.339621 9: seq: 13, identify offset=760 count=40
Sent 21 32.341044 32.341044 9: seq: 14, identify offset=800 count=40
Sent 22 32.342436 32.342436 9: seq: 15, identify offset=840 count=40
Sent 23 32.343706 32.343706 9: seq: 16, identify offset=880 count=40
Sent 24 32.344919 32.344919 9: seq: 17, identify offset=920 count=40
Sent 25 32.346789 32.346789 9: seq: 18, identify offset=937 count=40
Sent 26 32.349613 32.349613 6: seq: 19, get_uptime
Sent 27 32.401516 32.401516 6: seq: 1a, get_clock
Sent 28 32.452737 32.452737 6: seq: 1b, get_clock
Sent 29 32.504529 32.504529 6: seq: 1c, get_clock
Sent 30 32.556493 32.556493 6: seq: 1d, get_clock
Sent 31 32.607758 32.607758 6: seq: 1e, get_clock
Sent 32 32.659030 32.659030 6: seq: 1f, get_clock
Sent 33 32.710263 32.710263 6: seq: 10, get_clock
Sent 34 32.761732 32.761732 6: seq: 11, get_clock
Sent 35 32.763889 32.763889 6: seq: 12, get_clock
Sent 36 33.478147 33.478147 6: seq: 13, get_config
Sent 37 33.691226 33.691226 10: seq: 14, beacon_nvm_read len=8 offset=65534
Sent 38 33.692426 33.692426 8: seq: 15, beacon_nvm_read len=20 offset=0
Sent 39 33.694249 33.694249 7: seq: 16, beacon_stream en=0
Sent 40 33.695009 33.695009 8: seq: 17, beacon_accel_stream en=0 scale=0
Sent 41 33.695776 33.695776 7: seq: 18, allocate_oids count=1
Sent 42 33.696098 33.696098 7: seq: 19, config_trsync oid=0
Sent 43 33.696349 33.696349 11: seq: 1a, finalize_config crc=2501485974
Sent 44 33.696548 33.696548 6: seq: 1b, get_config
Sent 45 33.748698 33.748698 6: seq: 1c, get_clock
Sent 46 34.733362 34.733362 6: seq: 1d, get_clock
Sent 47 35.717409 35.717409 6: seq: 1e, get_clock
Sent 48 40.154413 40.154413 6: seq: 1f, get_clock
Sent 49 41.129926 41.129926 6: seq: 10, get_clock
Sent 50 42.114363 42.114363 6: seq: 11, get_clock
Sent 51 43.099854 43.099854 6: seq: 12, get_clock
Sent 52 44.083721 44.083721 6: seq: 13, get_clock
Sent 53 45.068104 45.068104 6: seq: 14, get_clock
Sent 54 46.048494 46.048494 6: seq: 15, emergency_stop
Sent 55 46.048815 46.048815 7: seq: 16, beacon_stream en=0
Dumping receive queue 100 messages
Receive: 0 41.325903 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1484665481 delta_clock=0 data=b'\x82\x8esf'
Receive: 1 41.396149 41.129926 16: seq: 11, beacon_status mcu_temp=44265 supply_voltage=48785 coil_temp=55089 status=1
Receive: 2 41.425938 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1487866260 delta_clock=0 data=b'\x82\x8esf'
Receive: 3 41.496331 41.129926 16: seq: 11, beacon_status mcu_temp=44265 supply_voltage=48785 coil_temp=55088 status=1
Receive: 4 41.525964 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1491067045 delta_clock=0 data=b'\x82\x8esf'
Receive: 5 41.596524 41.129926 16: seq: 11, beacon_status mcu_temp=44265 supply_voltage=48785 coil_temp=55088 status=1
Receive: 6 41.625961 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1494267830 delta_clock=0 data=b'\x82\x8esf'
Receive: 7 41.696787 41.129926 16: seq: 11, beacon_status mcu_temp=44266 supply_voltage=48785 coil_temp=55088 status=1
Receive: 8 41.726000 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1497468611 delta_clock=0 data=b'\x82\x8esf'
Receive: 9 41.796915 41.129926 16: seq: 11, beacon_status mcu_temp=44266 supply_voltage=48785 coil_temp=55088 status=1
Receive: 10 41.826037 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1500669398 delta_clock=0 data=b'\x82\x8esf'
Receive: 11 41.897171 41.129926 16: seq: 11, beacon_status mcu_temp=44266 supply_voltage=48785 coil_temp=55088 status=1
Receive: 12 41.926076 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1503870191 delta_clock=0 data=b'\x82\x8esf'
Receive: 13 41.997294 41.129926 16: seq: 11, beacon_status mcu_temp=44266 supply_voltage=48785 coil_temp=55088 status=1
Receive: 14 42.026074 41.129926 18: seq: 11, beacon_data samples=1 start_clock=1507070980 delta_clock=0 data=b'\x82\x8esf'
Receive: 15 42.097482 41.129926 16: seq: 11, beacon_status mcu_temp=44266 supply_voltage=48785 coil_temp=55088 status=1
Receive: 16 42.114835 42.114363 11: seq: 12, clock clock=1509939955
Receive: 17 42.126097 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1510271762 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 18 42.197718 42.114363 16: seq: 12, beacon_status mcu_temp=44268 supply_voltage=48785 coil_temp=55088 status=1
Receive: 19 42.226127 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1513472540 delta_clock=0 data=b'\x82\x8esf'
Receive: 20 42.297895 42.114363 16: seq: 12, beacon_status mcu_temp=44268 supply_voltage=48785 coil_temp=55088 status=1
Receive: 21 42.326140 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1516673325 delta_clock=0 data=b'\x82\x8esf'
Receive: 22 42.398083 42.114363 16: seq: 12, beacon_status mcu_temp=44268 supply_voltage=48785 coil_temp=55088 status=1
Receive: 23 42.426182 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1519874118 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 24 42.498322 42.114363 16: seq: 12, beacon_status mcu_temp=44268 supply_voltage=48785 coil_temp=55088 status=1
Receive: 25 42.526219 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1523074885 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 26 42.598448 42.114363 16: seq: 12, beacon_status mcu_temp=44268 supply_voltage=48785 coil_temp=55088 status=1
Receive: 27 42.626284 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1526275668 delta_clock=0 data=b'\x82\x8esf'
Receive: 28 42.698680 42.114363 16: seq: 12, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 29 42.726297 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1529476449 delta_clock=0 data=b'\x82\x8esf'
Receive: 30 42.798903 42.114363 16: seq: 12, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 31 42.826357 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1532677236 delta_clock=0 data=b'\x82\x8esf'
Receive: 32 42.899130 42.114363 16: seq: 12, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 33 42.926449 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1535878010 delta_clock=0 data=b'\x82\x8esf'
Receive: 34 42.999314 42.114363 16: seq: 12, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 35 43.026395 42.114363 18: seq: 12, beacon_data samples=1 start_clock=1539078795 delta_clock=0 data=b'\x82\x8esf'
Receive: 36 43.099514 42.114363 16: seq: 12, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 37 43.100345 43.099854 11: seq: 13, clock clock=1541476254
Receive: 38 43.126523 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1542279591 delta_clock=0 data=b'\x82\x8esf'
Receive: 39 43.199713 43.099854 16: seq: 13, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 40 43.226615 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1545480374 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 41 43.299851 43.099854 16: seq: 13, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 42 43.326444 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1548681153 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 43 43.400078 43.099854 16: seq: 13, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 44 43.426466 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1551881933 delta_clock=0 data=b'\x82\x8esf'
Receive: 45 43.500184 43.099854 16: seq: 13, beacon_status mcu_temp=44270 supply_voltage=48785 coil_temp=55088 status=1
Receive: 46 43.526525 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1555082721 delta_clock=0 data=b'\x82\x8esf'
Receive: 47 43.600420 43.099854 16: seq: 13, beacon_status mcu_temp=44272 supply_voltage=48785 coil_temp=55088 status=1
Receive: 48 43.626459 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1558283498 delta_clock=0 data=b'\x82\x8esf'
Receive: 49 43.700626 43.099854 16: seq: 13, beacon_status mcu_temp=44272 supply_voltage=48785 coil_temp=55088 status=1
Receive: 50 43.726511 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1561484280 delta_clock=0 data=b'\x82\x8esf'
Receive: 51 43.800768 43.099854 16: seq: 13, beacon_status mcu_temp=44272 supply_voltage=48785 coil_temp=55088 status=1
Receive: 52 43.826560 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1564685060 delta_clock=0 data=b'\x82\x8esf'
Receive: 53 43.900969 43.099854 16: seq: 13, beacon_status mcu_temp=44272 supply_voltage=48785 coil_temp=55088 status=1
Receive: 54 43.926553 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1567885842 delta_clock=0 data=b'\x82\x8esf'
Receive: 55 44.001122 43.099854 16: seq: 13, beacon_status mcu_temp=44272 supply_voltage=48785 coil_temp=55088 status=1
Receive: 56 44.026552 43.099854 18: seq: 13, beacon_data samples=1 start_clock=1571086624 delta_clock=0 data=b'\x82\x8esf'
Receive: 57 44.084152 44.083721 11: seq: 14, clock clock=1572958631
Receive: 58 44.101343 44.083721 16: seq: 14, beacon_status mcu_temp=44274 supply_voltage=48784 coil_temp=55088 status=1
Receive: 59 44.126690 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1574287400 delta_clock=0 data=b'\x82\x8esf'
Receive: 60 44.201626 44.083721 16: seq: 14, beacon_status mcu_temp=44274 supply_voltage=48784 coil_temp=55088 status=1
Receive: 61 44.226785 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1577488184 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 62 44.301878 44.083721 16: seq: 14, beacon_status mcu_temp=44274 supply_voltage=48784 coil_temp=55088 status=1
Receive: 63 44.326751 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1580688974 delta_clock=0 data=b'\x82\x8esf'
Receive: 64 44.401969 44.083721 16: seq: 14, beacon_status mcu_temp=44274 supply_voltage=48784 coil_temp=55088 status=1
Receive: 65 44.426785 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1583889772 delta_clock=0 data=b'\x82\x8esf'
Receive: 66 44.502173 44.083721 16: seq: 14, beacon_status mcu_temp=44275 supply_voltage=48784 coil_temp=55088 status=1
Receive: 67 44.526788 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1587090560 delta_clock=0 data=b'\x82\x8esf'
Receive: 68 44.602405 44.083721 16: seq: 14, beacon_status mcu_temp=44275 supply_voltage=48784 coil_temp=55088 status=1
Receive: 69 44.626851 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1590291347 delta_clock=0 data=b'\x82\x8esf'
Receive: 70 44.702575 44.083721 16: seq: 14, beacon_status mcu_temp=44275 supply_voltage=48784 coil_temp=55088 status=1
Receive: 71 44.726813 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1593492117 delta_clock=0 data=b'\x82\x8esf'
Receive: 72 44.802735 44.083721 16: seq: 14, beacon_status mcu_temp=44275 supply_voltage=48784 coil_temp=55088 status=1
Receive: 73 44.826815 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1596692903 delta_clock=0 data=b'\x82\x8esf'
Receive: 74 44.902951 44.083721 16: seq: 14, beacon_status mcu_temp=44275 supply_voltage=48784 coil_temp=55088 status=1
Receive: 75 44.926881 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1599893692 delta_clock=0 data=b'\x82\x8esf'
Receive: 76 45.003132 44.083721 16: seq: 14, beacon_status mcu_temp=44277 supply_voltage=48784 coil_temp=55088 status=1
Receive: 77 45.026891 44.083721 18: seq: 14, beacon_data samples=1 start_clock=1603094466 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 78 45.068675 45.068104 11: seq: 15, clock clock=1604461514
Receive: 79 45.103393 45.068104 16: seq: 15, beacon_status mcu_temp=44277 supply_voltage=48784 coil_temp=55088 status=1
Receive: 80 45.126923 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1606295242 delta_clock=0 data=b'\x82\x8esf'
Receive: 81 45.203554 45.068104 16: seq: 15, beacon_status mcu_temp=44277 supply_voltage=48784 coil_temp=55088 status=1
Receive: 82 45.226934 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1609496014 delta_clock=0 data=b'\x82\x8esf'
Receive: 83 45.303641 45.068104 16: seq: 15, beacon_status mcu_temp=44277 supply_voltage=48784 coil_temp=55088 status=1
Receive: 84 45.326901 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1612696796 delta_clock=0 data=b'\x82\x8esf'
Receive: 85 45.403855 45.068104 16: seq: 15, beacon_status mcu_temp=44277 supply_voltage=48784 coil_temp=55088 status=1
Receive: 86 45.426938 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1615897583 delta_clock=0 data=b'\x82\x8esf'
Receive: 87 45.504056 45.068104 16: seq: 15, beacon_status mcu_temp=44279 supply_voltage=48784 coil_temp=55088 status=1
Receive: 88 45.526956 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1619098364 delta_clock=0 data=b'\x82\x8esf'
Receive: 89 45.604219 45.068104 16: seq: 15, beacon_status mcu_temp=44279 supply_voltage=48784 coil_temp=55088 status=1
Receive: 90 45.626969 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1622299157 delta_clock=0 data=b'\x82\x8esf'
Receive: 91 45.704408 45.068104 16: seq: 15, beacon_status mcu_temp=44279 supply_voltage=48784 coil_temp=55088 status=1
Receive: 92 45.727007 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1625499935 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 93 45.804581 45.068104 16: seq: 15, beacon_status mcu_temp=44279 supply_voltage=48784 coil_temp=55088 status=1
Receive: 94 45.827031 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1628700716 delta_clock=0 data=b'\x82\x8ep\xc7'
Receive: 95 45.904793 45.068104 16: seq: 15, beacon_status mcu_temp=44280 supply_voltage=48784 coil_temp=55088 status=1
Receive: 96 45.927083 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1631901486 delta_clock=0 data=b'\x82\x8esf'
Receive: 97 46.004986 45.068104 16: seq: 15, beacon_status mcu_temp=44280 supply_voltage=48784 coil_temp=55088 status=1
Receive: 98 46.027085 45.068104 18: seq: 15, beacon_data samples=1 start_clock=1635102278 delta_clock=0 data=b'\x82\x8esf'
Receive: 99 46.048972 46.048494 12: seq: 16, shutdown clock=1635832327 static_string_id=Emergency stop
Requested toolhead position at shutdown time 53.235957: (200.0, 200.0, 200.0)
Stats 46.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4201 bytes_read=9195 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=180000614 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=906 bytes_read=4916 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=50000038 adj=49999694 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6333 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=63999421 adj=63999467 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=49.2 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=433 bytes_read=6473 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=31999849 adj=31999743 coil_temp=22.5 refs=0 mcu_temp=21.82 supply_voltage=2.977 sysload=1.14 cputime=7.226 memavail=3383412 print_time=53.591 buffer_time=0.249 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 47.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4261 bytes_read=9305 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=180000599 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=912 bytes_read=4932 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=49999990 adj=49999403 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6447 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=63999381 adj=63999269 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.2 raspberry_pi: temp=48.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=439 bytes_read=6829 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=31999900 adj=31999730 coil_temp=22.5 refs=0 mcu_temp=21.84 supply_voltage=2.977 sysload=1.14 cputime=7.278 memavail=3383288 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 48.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4305 bytes_read=9475 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=180000553 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000013 bytes_write=918 bytes_read=4948 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=49999958 adj=49999265 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=6547 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=63999355 adj=63999102 Octopus_V1.1_F446: temp=27.0 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=445 bytes_read=7185 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=31999873 adj=31999973 coil_temp=22.5 refs=0 mcu_temp=21.85 supply_voltage=2.977 sysload=1.14 cputime=7.302 memavail=3383288 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 49.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4349 bytes_read=9602 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=180000663 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=924 bytes_read=4977 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=49999986 adj=49999312 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=6647 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=63999349 adj=63999076 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=47.7 heater_bed: target=0 temp=21.5 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=451 bytes_read=7541 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=31999859 adj=31999844 coil_temp=22.5 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=1.14 cputime=7.351 memavail=3383288 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 50.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4393 bytes_read=9729 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=180000674 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=930 bytes_read=4993 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=49999978 adj=49999416 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=6775 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=63999349 adj=63998860 Octopus_V1.1_F446: temp=26.9 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=47.2 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=457 bytes_read=7897 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=31999850 adj=31999655 coil_temp=22.5 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=1.05 cputime=7.401 memavail=3383288 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 51.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4418 bytes_read=9873 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=180000644 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=936 bytes_read=5009 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=49999967 adj=49999457 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=6875 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=63999337 adj=63998903 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=28.1 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=463 bytes_read=8253 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=31999841 adj=31999617 coil_temp=22.5 refs=0 mcu_temp=21.87 supply_voltage=2.977 sysload=1.05 cputime=7.443 memavail=3383476 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 52.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000006 mcu_task_stddev=0.000005 bytes_write=4424 bytes_read=9976 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=180000609 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=942 bytes_read=5025 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=49999961 adj=49999527 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1554 bytes_read=6989 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=63999335 adj=63998950 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=469 bytes_read=8609 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=31999831 adj=31999629 coil_temp=22.5 refs=0 mcu_temp=21.87 supply_voltage=2.977 sysload=1.05 cputime=7.470 memavail=3382048 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 53.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4430 bytes_read=10093 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=180000589 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 mcu_task_stddev=0.000010 bytes_write=948 bytes_read=5041 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=49999947 adj=49999615 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1560 bytes_read=7117 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=63999337 adj=63999052 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=475 bytes_read=8965 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=31999823 adj=31999635 coil_temp=22.5 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=1.05 cputime=7.494 memavail=3382048 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 54.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4436 bytes_read=10225 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=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=954 bytes_read=5070 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=49999931 adj=49999608 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1566 bytes_read=7217 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=63999333 adj=63999121 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=481 bytes_read=9321 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=31999835 adj=31999631 coil_temp=22.5 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=1.05 cputime=7.520 memavail=3398444 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000
Stats 55.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4442 bytes_read=10328 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=180000573 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=960 bytes_read=5086 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=49999932 adj=49999590 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1572 bytes_read=7317 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=63999331 adj=63999147 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=487 bytes_read=9677 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=31999827 adj=31999749 coil_temp=22.5 refs=0 mcu_temp=21.86 supply_voltage=2.977 sysload=0.96 cputime=7.543 memavail=3398444 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 56.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4448 bytes_read=10431 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=180000580 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=966 bytes_read=5102 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=49999937 adj=49999631 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1578 bytes_read=7445 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=63999342 adj=63999121 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=28.0 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=493 bytes_read=10033 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=31999821 adj=31999690 coil_temp=22.5 refs=0 mcu_temp=21.85 supply_voltage=2.977 sysload=0.96 cputime=7.580 memavail=3398000 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 57.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4454 bytes_read=10563 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=180000569 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=972 bytes_read=5118 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=49999931 adj=49999689 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1584 bytes_read=7559 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=63999341 adj=63999171 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.9 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=499 bytes_read=10389 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=31999815 adj=31999657 coil_temp=22.5 refs=0 mcu_temp=21.83 supply_voltage=2.977 sysload=0.96 cputime=7.625 memavail=3397512 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 58.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4460 bytes_read=10666 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=180000550 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=978 bytes_read=5134 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=49999935 adj=49999687 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1590 bytes_read=7652 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=63999378 adj=63999189 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=505 bytes_read=10745 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=31999809 adj=31999643 coil_temp=22.5 refs=0 mcu_temp=21.82 supply_voltage=2.977 sysload=0.96 cputime=7.653 memavail=3398292 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 59.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4466 bytes_read=10783 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=180000541 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=984 bytes_read=5163 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=49999930 adj=49999780 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1596 bytes_read=7771 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=63999384 adj=63999474 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=47.2 heater_bed: target=0 temp=22.0 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=511 bytes_read=11101 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=31999804 adj=31999646 coil_temp=22.5 refs=0 mcu_temp=21.80 supply_voltage=2.977 sysload=0.96 cputime=7.678 memavail=3398300 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 60.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=4472 bytes_read=10915 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000532 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000013 bytes_write=990 bytes_read=5179 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=49999927 adj=49999760 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1602 bytes_read=7864 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=63999378 adj=63999461 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.8 raspberry_pi: temp=48.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=517 bytes_read=11457 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=31999801 adj=31999700 coil_temp=22.5 refs=0 mcu_temp=21.79 supply_voltage=2.977 sysload=0.89 cputime=7.702 memavail=3398300 print_time=53.591 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.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 4101875408: Disconnected
Restarting printer
Start printer at Fri Jun 27 18:55:22 2025 (1751046922.8 61.9)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4102174992: New connection
webhooks client 4102174992: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 69.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3660 bytes_read=7568 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=179994374 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=50001393 adj=50001170 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1458 bytes_read=5000 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=63998648 adj=64001076 Octopus_V1.1_F446: temp=0.0 EBB42_v1.2_T0: temp=0.0 raspberry_pi: temp=48.2 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=31997310 adj=31998882 coil_temp=22.4 refs=0 mcu_temp=21.66 supply_voltage=2.977 sysload=0.89 cputime=12.695 memavail=3403524 print_time=7.705 buffer_time=0.248 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4102174992
webhooks: registering remote method 'reboot_machine' for connection id: 4102174992
webhooks: registering remote method 'pause_job_queue' for connection id: 4102174992
webhooks: registering remote method 'start_job_queue' for connection id: 4102174992
Stats 70.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000007 mcu_task_stddev=0.000005 bytes_write=3666 bytes_read=7613 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=179996957 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=50000682 adj=50003756 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1464 bytes_read=5072 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=63999577 adj=63999992 Octopus_V1.1_F446: temp=28.5 EBB42_v1.2_T0: temp=27.3 raspberry_pi: temp=49.7 heater_bed: target=0 temp=21.7 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=31999464 adj=31997762 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.90 cputime=12.779 memavail=3401316 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 72.2: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3678 bytes_read=7834 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=179999403 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 mcu_task_stddev=0.000012 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=50000557 adj=50000847 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1476 bytes_read=5259 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=63999655 adj=63999887 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=49.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=378 bytes_read=2981 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=31999708 adj=32000343 coil_temp=22.4 refs=0 mcu_temp=21.64 supply_voltage=2.977 sysload=0.90 cputime=12.867 memavail=3402448 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 73.2: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3684 bytes_read=7937 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=179999422 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=50000256 adj=49999220 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1482 bytes_read=5373 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=63999570 adj=63998294 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.4 raspberry_pi: temp=49.2 heater_bed: target=0 temp=21.9 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=384 bytes_read=3337 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=31999680 adj=31999651 coil_temp=22.4 refs=0 mcu_temp=21.64 supply_voltage=2.977 sysload=0.90 cputime=12.893 memavail=3402448 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 74.2: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3690 bytes_read=8040 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=179999471 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=50000090 adj=49998829 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1488 bytes_read=5487 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=63999543 adj=63998470 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=49.2 heater_bed: target=0 temp=22.1 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=390 bytes_read=3693 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=31999769 adj=31999620 coil_temp=22.4 refs=0 mcu_temp=21.65 supply_voltage=2.977 sysload=0.90 cputime=12.917 memavail=3402448 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 75.2: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3696 bytes_read=8172 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=179999506 rpi: mcu_awake=0.003 mcu_task_avg=0.000022 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=49999985 adj=49998732 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000021 mcu_task_stddev=0.000026 bytes_write=1494 bytes_read=5587 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=63999485 adj=63998678 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=396 bytes_read=4049 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=31999746 adj=31999855 coil_temp=22.4 refs=0 mcu_temp=21.66 supply_voltage=2.977 sysload=0.83 cputime=12.941 memavail=3402448 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 76.2: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000007 mcu_task_stddev=0.000007 bytes_write=3702 bytes_read=8275 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=180000048 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 bytes_write=882 bytes_read=4804 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=50000007 adj=49998767 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1500 bytes_read=5715 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=63999642 adj=63998739 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=402 bytes_read=4405 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=31999925 adj=31999776 coil_temp=22.4 refs=0 mcu_temp=21.68 supply_voltage=2.977 sysload=0.83 cputime=12.971 memavail=3403400 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 77.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3708 bytes_read=8392 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=180000071 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=50000044 adj=49998683 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1506 bytes_read=5829 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=63999602 adj=63998813 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=49.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=408 bytes_read=4761 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=31999861 adj=31999993 coil_temp=22.4 refs=0 mcu_temp=21.69 supply_voltage=2.977 sysload=0.83 cputime=13.002 memavail=3405640 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 78.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3714 bytes_read=8524 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=180000034 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=50000168 adj=49999113 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1512 bytes_read=5929 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=63999561 adj=63998859 Octopus_V1.1_F446: temp=27.1 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=414 bytes_read=5117 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=31999825 adj=31999759 coil_temp=22.4 refs=0 mcu_temp=21.71 supply_voltage=2.977 sysload=0.83 cputime=13.039 memavail=3406256 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 79.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3720 bytes_read=8627 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=180000000 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=50000053 adj=49999834 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1518 bytes_read=6043 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=63999529 adj=63998944 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=420 bytes_read=5473 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=31999792 adj=31999685 coil_temp=22.4 refs=0 mcu_temp=21.73 supply_voltage=2.977 sysload=0.83 cputime=13.063 memavail=3406256 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 80.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3726 bytes_read=8730 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=180000003 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=50000013 adj=49999509 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1524 bytes_read=6157 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=63999509 adj=63999025 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=426 bytes_read=5829 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=31999768 adj=31999624 coil_temp=22.4 refs=0 mcu_temp=21.75 supply_voltage=2.977 sysload=0.76 cputime=13.086 memavail=3406272 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.5 pwm=0.000
Stats 81.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3732 bytes_read=8862 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=180000012 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000014 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=49999991 adj=49999478 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1530 bytes_read=6271 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=63999576 adj=63999068 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=27.5 raspberry_pi: temp=47.7 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=432 bytes_read=6185 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=31999753 adj=31999575 coil_temp=22.4 refs=0 mcu_temp=21.78 supply_voltage=2.977 sysload=0.76 cputime=13.110 memavail=3406272 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 82.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3738 bytes_read=8965 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=180000055 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=50000032 adj=49999509 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1536 bytes_read=6385 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=63999543 adj=63999442 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.3 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=438 bytes_read=6541 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=31999757 adj=31999557 coil_temp=22.4 refs=0 mcu_temp=21.78 supply_voltage=2.977 sysload=0.76 cputime=13.138 memavail=3402432 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000
Stats 83.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3744 bytes_read=9082 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=180000092 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=50000007 adj=49999755 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1542 bytes_read=6499 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=63999590 adj=63999261 Octopus_V1.1_F446: temp=27.2 EBB42_v1.2_T0: temp=27.6 raspberry_pi: temp=49.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=444 bytes_read=6897 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=31999752 adj=31999587 coil_temp=22.4 refs=0 mcu_temp=21.80 supply_voltage=2.977 sysload=0.76 cputime=13.168 memavail=3402796 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
Stats 84.2: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3750 bytes_read=9214 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=180000117 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000015 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=50000019 adj=49999657 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1548 bytes_read=6599 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=63999562 adj=63999477 Octopus_V1.1_F446: temp=27.3 EBB42_v1.2_T0: temp=27.7 raspberry_pi: temp=48.2 heater_bed: target=0 temp=22.2 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=450 bytes_read=7253 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=31999754 adj=31999576 coil_temp=22.4 refs=0 mcu_temp=21.82 supply_voltage=2.977 sysload=0.76 cputime=13.196 memavail=3507896 print_time=7.705 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.4 pwm=0.000
webhooks client 4102174992: Disconnected
Starting Klippy...
Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/home/pi/printer_data/logs/klippy.log', '-I', '/home/pi/printer_data/comms/klippy.serial', '-a', '/home/pi/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-396-gb7233d119-dirty'
Untracked files: klippy/extras/beacon.py, klippy/extras/gcode_shell_command.py, klippy/extras/linear_movement_vibrations.py, klippy/extras/ratos.py, klippy/extras/ratos_homing.py, klippy/extras/resonance_generator.py, klippy/extras/z_offset_probe.py, klippy/kinematics/ratos_hybrid_corexy.py
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper.git
CPU: 4 core ?
Python: '3.9.2 (default, Mar 20 2025, 22:21:41) \n[GCC 10.2.1 20210110]'
Start printer at Fri Jun 27 18:56:06 2025 (1751046966.4 24.0)
===== Config file =====
[mcu rpi]
serial = /tmp/klipper_host_mcu
[board_pins btt-octopus-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,
x1_step_pin=PF9,
x1_dir_pin=PF10,
x1_enable_pin=PG2,
x1_uart_pin=PF2,
x1_diag_pin=PG12,
x1_endstop_pin=PG12,
y_step_pin=PG0,
y_dir_pin=PG1,
y_enable_pin=PF15,
y_uart_pin=PD11,
y_diag_pin=PG9,
y_endstop_pin=PG9,
y1_step_pin=PG4,
y1_dir_pin=PC1,
y1_enable_pin=PA0,
y1_uart_pin=PC7,
y1_diag_pin=PG11,
y1_endstop_pin=PG11,
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,
e_step_pin=PF11,
e_dir_pin=PG3,
e_enable_pin=PG5,
e_uart_pin=PC6,
e_heater_pin=PA2,
e_sensor_pin=PF4,
stepper_spi_mosi_pin=PA7,
stepper_spi_miso_pin=PA6,
stepper_spi_sclk_pin=PA5,
adxl345_cs_pin=PA15,
bltouch_sensor_pin=PB7,
bltouch_control_pin=PB6,
probe_pin=PB7,
fan_part_cooling_pin=PA8,
fan_toolhead_cooling_pin=PE5,
fan_controller_board_pin=PD12,
heater_bed_heating_pin=PA1,
heater_bed_sensor_pin=PF3,
4p_fan_part_cooling_pin=null,
4p_fan_part_cooling_tach_pin=null,
4p_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu]
serial = /dev/RatOS/btt-octopus-11
[temperature_sensor Octopus_V1.1_F446]
sensor_type = temperature_mcu
[adxl345 controlboard]
cs_pin = PA15
spi_bus = spi3
[board_pins toolboard_t0]
mcu = toolboard_t0
aliases =
e_step_pin=PD0,
e_dir_pin=PD1,
e_enable_pin=PD2,
e_uart_pin=PA15,
e_heater_pin=PB13,
e_sensor_pin=PA3,
stepper_spi_mosi_pin=null,
stepper_spi_miso_pin=null,
stepper_spi_sclk_pin=null,
adxl345_cs_pin=PB12,
bltouch_sensor_pin=PB8,
bltouch_control_pin=PB9,
probe_pin=PB9,
fan_part_cooling_pin=PA0,
fan_toolhead_cooling_pin=PA1,
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_toolhead_cooling_pin=null,
4p_toolhead_cooling_tach_pin=null,
4p_controller_board_pin=null,
4p_controller_board_tach_pin=null
[mcu toolboard_t0]
serial = /dev/RatOS/btt-ebb42-12-t0
[temperature_sensor EBB42_v1.2_T0]
sensor_type = temperature_mcu
sensor_mcu = toolboard_t0
[adxl345 toolboard_t0]
axes_map = x, z, y
cs_pin = toolboard_t0:PB12
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 = "back"
variable_start_print_park_z_height = 50
variable_end_print_park_in = "back"
variable_pause_print_park_in = "back"
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 = [59.8, 59.8]
variable_bed_margin_y = [14.35, 30]
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_wipe_before_true_zero = True
variable_beacon_contact_true_zero_temp = 150
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 = False
variable_beacon_scan_compensation_profile = "Contact"
variable_beacon_scan_compensation_probe_count = 15,15
variable_beacon_contact_poke_bottom_limit = -1
variable_homing_x = "endstop"
variable_homing_y = "endstop"
variable_x_driver_types = ["tmc2209"]
variable_x_axes = ["x"]
variable_y_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_y_axes = ["x1", "y", "y1"]
variable_z_driver_types = ["tmc2209", "tmc2209", "tmc2209"]
variable_z_axes = ["z", "z1", "z2"]
variable_home_y_first = True
[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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% 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_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 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
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
STOW_PROBE
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_homing %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
{% else %}
G28 Z
{% endif %}
_Z_HOP
{% 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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.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.configfile.config.ratos_homing.z_hop|float %}
{% set z_hop_speed = printer.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
G0 Z{z_hop} F{z_hop_speed}
[gcode_macro _MOVE_TO_SAFE_Z_HOME]
description = Move to safe home position with optional Z_HOP (pass Z_HOP=True as parameter)
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% if params.Z_HOP is defined %}
_Z_HOP
{% endif %}
DEBUG_ECHO PREFIX="_MOVE_TO_SAFE_Z_HOME" MSG="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}, safe_home_x: {safe_home_x}, safe_home_y: {safe_home_y}, printable_x_max: {printable_x_max}, printable_y_max: {printable_y_max}"
G0 X{safe_home_x} Y{safe_home_y} F{speed}
[gcode_macro MAYBE_HOME]
description = Only home unhomed axis
variable_is_kinematic_position_overriden = False
gcode =
{% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %}
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.."
{% 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 presssure advance tuning tower..."
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START={start} FACTOR={factor}
{% 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 %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_LOAD_FILAMENT TEMP={temp} NAME={filament_name} TYPE={filament_type}
{% 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}
{% 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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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
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
[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 color_ok = printer["gcode_macro RatOS"].status_color_ok|string %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}
{% 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}
[gcode_macro _LOAD_FILAMENT]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_LOAD_FILAMENT" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_EXTRUDER_TO_COOLING_ZONE TOOLHEAD={toolhead}
_LOAD_FILAMENT_FROM_COOLING_ZONE_TO_NOZZLE TOOLHEAD={toolhead}
_CLEANING_MOVE TOOLHEAD={toolhead}
[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 %}
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_PARKING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_PARKING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 %}
{% set parking_position = printer["gcode_macro T%s" % toolhead].parking_position|float %}
{% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed|float * 60 %}
G1 X{parking_position} F{speed}
M400
{% endif %}
{% endif %}
{% endif %}
{% endif %}
[gcode_macro _MOVE_TO_LOADING_POSITION]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_MOVE_TO_LOADING_POSITION" MSG="TOOLHEAD: {toolhead}"
{% 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 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 %}
{% if act_t == toolhead %}
{% 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 %}
{% 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 %}
[gcode_macro _START_PRINT_BED_MESH]
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 %}
{% 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 %}
{% if printer.configfile.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}
{% else %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% endif %}
BED_MESH_PROFILE LOAD={default_profile}
{% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %}
BED_MESH_CLEAR
BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile}
{% 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 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="Recieved coordinates X0={x0} Y0={y0} X1={x1} Y1={y1}"
{% 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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% endif %}
{% else %}
{% set mesh_config = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_bed_mesh %}
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES={beacon_contact_bed_mesh_samples} PROFILE={default_profile}
{% else %}
BED_MESH_CALIBRATE PROFILE={default_profile}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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.configfile.settings.beacon is defined and printer.configfile.settings.beacon.mesh_runs % 2 != 0 and probe_first %}
{% set probe_first = false %}
{% elif printer.configfile.settings.beacon is defined and printer.configfile.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} Y0={mesh_y0} X1={mesh_x1} Y1={mesh_y1}"
{% if printer.configfile.settings.beacon is defined and 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 %}
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} RELATIVE_REFERENCE_INDEX=-1
{% if printer.configfile.settings.beacon is defined %}
_BEACON_APPLY_SCAN_COMPENSATION
{% endif %}
{% 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
{% if printer["dual_carriage"] is defined %}
_SET_TOOLHEAD_OFFSET T={printer["gcode_macro RatOS"].default_toolhead|int} MOVE=0
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 %}
SET_GCODE_OFFSET X=0 Y=0 Z=0 MOVE=0
_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 %}
{% 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 %}
{% if idex_mode == "copy" or idex_mode == "mirror" %}
M104.1 S{s0} T0
M104.1 S{s1} T1
{% else %}
M104.1 S{s} T{t}
{% 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 %}
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}
{% 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}"
{% 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}
[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}"
{% 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 %}
{% if minimum > -1 and maximum > -1 %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Waiting for sensor: {sensor}, 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 sensor: {sensor}, 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 sensor: {sensor}, MAXIMUM: {maximum}"
RATOS_ECHO MSG="please wait..."
TEMPERATURE_WAIT_BASE SENSOR="{sensor}" MAXIMUM={maximum}
{% endif %}
RATOS_ECHO PREFIX="TEMPERATURE_WAIT" MSG="Temperature for toolhead T{t} reached."
[gcode_macro SET_GCODE_OFFSET]
rename_existing = SET_GCODE_OFFSET_ORG
gcode =
SET_GCODE_OFFSET_ORG { rawparams }
{% if printer.configfile.settings.beacon is defined and (params.Z_ADJUST is defined or params.Z is defined) %}
_BEACON_APPLY_RUNTIME_MULTIPLIER
{% endif %}
[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.configfile.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 _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.configfile.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.configfile.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.configfile.settings.bltouch is defined %}
{% set config_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% set last_z_offset = printer.probe.last_z_result - config_offset %}
{% elif printer.configfile.settings.probe is defined %}
{% set config_offset = printer.configfile.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.configfile.settings.bed_mesh.horizontal_move_z|float %}
{% set mesh_config = printer.configfile.config.bed_mesh %}
{% if printer.configfile.settings.bltouch is defined %}
{% set x_offset = printer.configfile.settings.bltouch.x_offset|float %}
{% set y_offset = printer.configfile.settings.bltouch.y_offset|float %}
{% set z_offset = printer.configfile.settings.bltouch.z_offset|float %}
{% elif printer.configfile.settings.probe is defined %}
{% set x_offset = printer.configfile.settings.probe.x_offset|float %}
{% set y_offset = printer.configfile.settings.probe.y_offset|float %}
{% set z_offset = printer.configfile.settings.probe.z_offset|float %}
{% elif printer.configfile.settings.beacon is defined %}
{% set x_offset = printer.configfile.settings.beacon.x_offset|float %}
{% set y_offset = printer.configfile.settings.beacon.y_offset|float %}
{% set z_offset = printer.configfile.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.configfile.settings.beacon is defined and beacon_contact_prime_probing %}
PROBE PROBE_METHOD=contact SAMPLES=1
{% else %}
PROBE
{% endif %}
{% if printer.configfile.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.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.bltouch is not defined and printer.configfile.settings.probe is not defined and printer.configfile.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.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={current_toolhead}
{% 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) ** 2)}
G1 F300 E{14 / ((0.4 / nozzle_diameter) ** 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 temp = params.TEMP|default(220)|int %}
{% if printer["dual_carriage"] is not defined %}
_DEFAULT_UNLOAD_FILAMENT TEMP={temp} NAME='{filament_name}' TYPE='{filament_type}'
{% 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}'
{% else %}
RATOS_ECHO MSG="Please select toolhead! 0 = left, 1 = right toolhead"
{% endif %}
{% endif %}
[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 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}
M117 Filament unloaded!
RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading."
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TOOLHEAD=0
{% 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
[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 color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
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 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}'
{% else %}
_LEGACY_UNLOAD_FILAMENT TEMP={temp} TOOLHEAD={toolhead}
{% endif %}
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}
[gcode_macro _UNLOAD_FILAMENT]
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" MSG="TOOLHEAD: {toolhead}"
_MOVE_TO_LOADING_POSITION TOOLHEAD={toolhead}
_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}
[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
[gcode_macro _ON_FILAMENT_SENSOR_BUTTON_PRESSED]
gcode =
{% set toolhead = params.TOOLHEAD|int %}
DEBUG_ECHO PREFIX="_ON_FILAMENT_SENSOR_BUTTON_PRESSED" MSG="TOOLHEAD: {toolhead}"
{% if not printer.virtual_sdcard.is_active %}
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 %}
_ON_FILAMENT_END TOOLHEAD={toolhead} CLOGGED=false
{% endif %}
[gcode_macro _ON_TOOLHEAD_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_TOOLHEAD_FILAMENT_SENSOR_CLOG" MSG="TOOLHEAD: {toolhead}"
{% if enable_clog_detection %}
_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 %}
_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 %}
_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}
{% 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
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 %}
{% set color_unknown = printer["gcode_macro RatOS"].status_color_unknown|string %}
_LED_UNLOADING_FILAMENT TOOLHEAD={toolhead}
SAVE_GCODE_STATE NAME=cold_pull_state
{% if "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="Heating 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 finished!" 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 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 %}
[delayed_gcode RATOS_INIT]
initial_duration = 0.1
gcode =
_LED_STANDBY
CALCULATE_PRINTABLE_AREA
INITIAL_FRONTEND_UPDATE
_CHAMBER_FILTER_SANITY_CHECK
[delayed_gcode RATOS_LOGO]
initial_duration = 2
gcode =
HELLO_RATOS
[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]
gcode =
{% 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}
DEBUG_ECHO PREFIX="CALCULATE_PRINTABLE_AREA" MSG="Printable area calculated: X: 0,{max_x} Y: 0,{max_y}"
[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 * 60 %}
{% 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.configfile.settings.ratos_hybrid_corexy is defined and printer.configfile.settings.ratos_hybrid_corexy.inverted is defined %}
{% if printer.configfile.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 SAVE_Z_OFFSET]
gcode =
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SAVE_MULTIPLIER
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _LOAD_RATOS_SKEW_PROFILE]
gcode =
{% set ratos_skew_profile = printer["gcode_macro RatOS"].skew_profile|default("") %}
{% if ratos_skew_profile != "" %}
{% if printer.configfile.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 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 =
{% 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"
[gcode_macro RESUME]
description = Resumes the print if the printer is paused.
rename_existing = RESUME_BASE
gcode =
{% 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
[gcode_macro CANCEL_PRINT]
description = Cancels the printer
rename_existing = CANCEL_PRINT_BASE
gcode =
END_PRINT
TURN_OFF_HEATERS
CLEAR_PAUSE
CANCEL_PRINT_BASE
[gcode_macro 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 "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 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 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(",") %}
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.configfile.settings.stepper_x.position_min|float %}
{% set stepper_x_position_endstop = printer.configfile.settings.stepper_x.position_endstop|float %}
{% set dual_carriage_position_max = printer.configfile.settings.dual_carriage.position_max|float %}
{% set dual_carriage_position_endstop = printer.configfile.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.configfile.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.configfile.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 %}
{% if idex_mode == '' %}
_SET_TOOLHEAD_OFFSET T={default_toolhead} MOVE={1 if "xyz" in printer.toolhead.homed_axes else 0}
{% endif %}
{% 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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero) %}
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 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 %}
_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[0]|float}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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[0]|float} MAXIMUM={extruder_first_layer_temp[0]|float + 5}
{% else %}
{% if initial_tool == 0 or both_toolheads or (default_toolhead == 0 and printer.configfile.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.configfile.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 != '' %}
{% 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}
{% endif %}
{% endif %}
{% endif %}
{% if idex_mode != '' %}
{% set x_offset = printer.toolhead.position.x|float - printer.gcode_move.gcode_position.x|float %}
{% endif %}
RESTORE_GCODE_STATE NAME=start_print_state
{% if idex_mode != '' %}
{% set act_idex_mode = printer["dual_carriage"].carriage_1|default('')|lower %}
{% if act_idex_mode == "copy" or act_idex_mode == "mirror" %}
SET_GCODE_OFFSET X={x_offset} MOVE=0
{% endif %}
{% 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
{% if initial_tool != default_toolhead %}
{% set svv = printer.save_variables.variables %}
SAVE_VARIABLE VARIABLE=idex_applied_offset VALUE={default_toolhead}
_SET_TOOLHEAD_OFFSET T={initial_tool} MOVE=0
{% endif %}
{% endif %}
{% endif %}
{% if printer.configfile.settings.beacon is defined %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
_BEACON_SET_NOZZLE_TEMP_OFFSET TOOLHEAD={initial_tool}
{% 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"
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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..."
{% if auto_z_offset_calibration %}
{% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %}
{% if default_toolhead == 0 %}
_SELECT_TOOL T=0 TOOLSHIFT=false
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
{% elif default_toolhead == 1 %}
_SELECT_TOOL T=1 TOOLSHIFT=false
G1 X{safe_home_x + safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
G1 X{safe_home_x - safe_distance / 2} F{speed}
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
{% endif %}
{% else %}
_MOVE_TO_SAFE_Z_HOME
{% endif %}
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 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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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 %}
{% 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.configfile.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}
_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}
_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.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero %}
{% if beacon_contact_wipe_before_true_zero %}
_START_PRINT_AFTER_HEATING_BED_PROBE_FOR_WIPE
{% 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
BEACON_QUERY
[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_true_zero_location = printer["gcode_macro RatOS"].beacon_contact_true_zero_location|default("front")|lower %}
{% set beacon_contact_true_zero_margin_x = printer["gcode_macro RatOS"].beacon_contact_true_zero_margin_x|default(30)|int %}
{% 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 %}
{% if beacon_contact_wipe_before_true_zero %}
{% 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 %}
{% endif %}
G0 Z5 F{z_speed}
_MOVE_TO_SAFE_Z_HOME
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}
RATOS_ECHO MSG="Beacon contact auto calibration..."
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
G0 Z5 F{z_speed}
[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}
_PURGE_FILAMENT TOOLHEAD={initial_toolhead} E={printer["gcode_macro RatOS"].toolchange_first_purge|default(50)|float}
_CLEANING_MOVE TOOLHEAD={initial_toolhead}
{% 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 %}
{% if printer.configfile.settings.beacon is defined %}
{% if printer["dual_carriage"] is not defined %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SET_GCODE_OFFSET Z=0 MOVE=0
{% endif %}
{% endif %}
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% endif %}
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 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 %}
G91
G1 E-2 F3600
G0 Z{z_safe} F3600
G1 E-{(r-2)} F3600
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' %}
RATOS_ECHO PREFIX="IDLE" MSG="2 hours since last activity. Powering off heaters and motors.."
TURN_OFF_HEATERS
M84
{% endif %}
{% endif %}
timeout = 7200
[temperature_sensor raspberry_pi]
sensor_type = temperature_host
[skew_correction]
[input_shaper]
[virtual_sdcard]
path = ~/printer_data/gcodes
[display_status]
[pause_resume]
[force_move]
enable_force_move = True
[respond]
[resonance_generator]
[ratos]
allow_unknown_gcode_generator = True
[exclude_object]
[heater_bed]
heater_pin = heater_bed_heating_pin
sensor_pin = heater_bed_sensor_pin
sensor_type = Generic 3950
min_temp = 0
max_temp = 140
pwm_cycle_time = 0.02
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
[fan]
pin = !toolboard_t0:PA0
shutdown_speed = 1.0
cycle_time = 0.00004
[heater_fan toolhead_cooling_fan]
pin = toolboard_t0:PA1
fan_speed = 1
heater = extruder
[printer]
kinematics = ratos_hybrid_corexy
max_velocity = 300
max_accel = 3000
minimum_cruise_ratio = 0.5
max_z_velocity = 30
max_z_accel = 50
square_corner_velocity = 5
[ratos_hybrid_corexy]
inverted = true
[delayed_gcode _HYBRID_INIT]
initial_duration = 0.1
gcode =
VERIFY_HYBRID_INVERTED
[gcode_macro Z_TILT_ADJUST]
rename_existing = Z_TILT_ADJUST_ORIG
gcode =
{% set beacon_contact_z_tilt_adjust_samples = printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust_samples|default(2)|int %}
{% set beacon_contact_z_tilt_adjust = true if printer["gcode_macro RatOS"].beacon_contact_z_tilt_adjust|default(false)|lower == 'true' else false %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
DEPLOY_PROBE
{% endif %}
{% if printer.configfile.settings.beacon is defined and beacon_contact_z_tilt_adjust %}
Z_TILT_ADJUST_ORIG PROBE_METHOD=contact SAMPLES={beacon_contact_z_tilt_adjust_samples}
{% else %}
Z_TILT_ADJUST_ORIG
{% endif %}
{% if printer["gcode_macro RatOS"].z_probe == 'stowable' %}
STOW_PROBE
{% endif %}
[stepper_x]
position_max = 459.8
position_endstop = -59.8
position_min = -59.8
step_pin = PF13
dir_pin = x_dir_pin
enable_pin = !PF14
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = toolboard_t0:PB6
[stepper_y]
position_max = 430
position_min = -14.35
position_endstop = -14.35
step_pin = PG0
dir_pin = !y_dir_pin
enable_pin = !PF15
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
homing_speed = 50
endstop_pin = PG9
[stepper_z]
position_max = 400
step_pin = PC13
dir_pin = !z0_dir_pin
enable_pin = !PF1
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 4
position_min = -5
homing_speed = 10
endstop_pin = probe:z_virtual_endstop
[bed_mesh]
horizontal_move_z = 2
mesh_min = 20,30
mesh_max = 370,350
probe_count = 30,30
fade_start = 1.0
fade_end = 10.0
mesh_pps = 2,2
algorithm = bicubic
bicubic_tension = .2
speed = 300
[z_tilt]
z_positions =
0,0
200,400
400,0
points =
30,30
200,350
370,30
horizontal_move_z = 20
retries = 10
retry_tolerance = 0.02
speed = 300
[extruder]
rotation_distance = 4.63
full_steps_per_rotation = 200
filament_diameter = 1.750
max_extrude_only_velocity = 60
max_extrude_only_distance = 200
nozzle_diameter = 0.4
heater_pin = toolboard_t0:PB13
sensor_type = PT1000
pullup_resistor = 2200
sensor_pin = toolboard_t0:PA3
min_extrude_temp = 170
min_temp = 0
max_temp = 350
pressure_advance = 0.03
step_pin = toolboard_t0:PD0
dir_pin = toolboard_t0:e_dir_pin
enable_pin = !toolboard_t0:PD2
microsteps = 64
control = pid
pid_kp = 28.413
pid_ki = 1.334
pid_kd = 151.300
[firmware_retraction]
retract_speed = 60
unretract_extra_length = 0
unretract_speed = 60
retract_length = 0.5
[resonance_tester]
accel_chip_x = adxl345 toolboard_t0
accel_chip_y = adxl345 toolboard_t0
probe_points =
200,200,20
[tmc2209 stepper_x]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_x1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PF2
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_x1]
step_pin = PF9
dir_pin = x1_dir_pin
enable_pin = !PG2
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_y]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD11
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_y1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PC7
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[stepper_y1]
step_pin = PG4
dir_pin = y1_dir_pin
enable_pin = !PA0
microsteps = 64
full_steps_per_rotation = 200
rotation_distance = 40
[tmc2209 stepper_z]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE4
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
sense_resistor = 0.11
[tmc2209 stepper_z1]
stealthchop_threshold = 0
interpolate = False
uart_pin = PE1
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 stepper_z2]
stealthchop_threshold = 0
interpolate = False
uart_pin = PD3
run_current = 1.1
driver_tbl = 1
driver_toff = 3
driver_hend = 0
driver_hstrt = 0
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 = 4
[tmc2209 extruder]
stealthchop_threshold = 0
interpolate = False
uart_pin = toolboard_t0:PA15
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
speed = 15.
lift_speed = 80.
contact_max_hotend_temperature = 275
[delayed_gcode _BEACON_INIT]
initial_duration = 1
gcode =
_BEACON_SET_NOZZLE_TEMP_OFFSET RESET=True
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(0)|float %}
{% if nozzle_expansion_coefficient_multiplier == 0 %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is not defined %}
{% set nozzle_expansion_coefficient_multiplier = 1.0 %}
{% else %}
{% set nozzle_expansion_coefficient_multiplier = printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier|default(1.0)|float %}
{% endif %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={nozzle_expansion_coefficient_multiplier}
{% endif %}
{% if printer["gcode_macro RatOS"].beacon_contact_expansion_multiplier is defined %}
CONSOLE_ECHO TITLE="Deprecated gcode variable" TYPE="warning" MSG={'"Please remove the variable beacon_contact_expansion_multiplier 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 %}
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 %}
{% if chamber_temp > 0 %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
BEACON_FINAL_CALIBRATION _AUTOMATED=True BED_TEMP={bed_temp} CHAMBER_TEMP={chamber_temp}
{% if beacon_contact_start_print_true_zero %}
BEACON_MEASURE_GANTRY_TWIST
_BEACON_MAYBE_SCAN_COMPENSATION
{% endif %}
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 %}
{% set speed = printer["gcode_macro RatOS"].macro_travel_speed * 60 %}
MAYBE_HOME X=True Y=True
_LED_BEACON_CALIBRATION_START
G90
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE
_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]
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 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.configfile.config.ratos_homing.z_hop_speed|float * 60 %}
_BEACON_HOME_AND_ABL
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
_LED_BEACON_CALIBRATION_START
G90
G0 Z2 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 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 %}
_Z_HOP
BEACON_AUTO_CALIBRATE
{% 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 %}
[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.configfile.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 test_margin = 30 %}
{% 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 %}
{% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(150)|float %}
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]
variable_runtime_temp = 0
gcode =
{% set toolhead = params.TOOLHEAD|default(0)|int %}
{% set reset = true if params.RESET|default(false)|lower == 'true' else false %}
{% 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 beacon_contact_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set svv = printer.save_variables.variables %}
{% if reset %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE=0
{% else %}
{% if beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% 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 nozzle_expansion_coefficient_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set applied_offset = svv.nozzle_expansion_applied_offset|default(0)|float %}
{% set temp = printer['extruder' if toolhead == 0 else 'extruder1'].target|float %}
{% set temp_offset = temp - beacon_contact_true_zero_temp %}
{% set expansion_coefficient = nozzle_expansion_coefficient_t0 if toolhead == 0 else nozzle_expansion_coefficient_t1 %}
{% set expansion_offset = nozzle_expansion_coefficient_multiplier * (temp_offset * (expansion_coefficient / 100)) %}
{% set new_offset = ((-applied_offset) + expansion_offset) %}
SET_GCODE_OFFSET Z_ADJUST={new_offset} MOVE=1 SPEED={z_speed}
SAVE_VARIABLE VARIABLE=nozzle_expansion_applied_offset VALUE={expansion_offset}
SET_GCODE_VARIABLE MACRO=_BEACON_SET_NOZZLE_TEMP_OFFSET VARIABLE=runtime_temp VALUE={temp}
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="multiplier: {nozzle_expansion_coefficient_multiplier}, coefficient: {expansion_coefficient}, temp_offset: {temp_offset}, expansion_offset: {expansion_offset}, applied_offset: {applied_offset}, new_offset: {new_offset}"
{% endif %}
{% endif %}
[gcode_macro BEACON_MEASURE_GANTRY_TWIST]
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 = printer["gcode_macro RatOS"].safe_home_x %}
{% if safe_home_x is not defined or safe_home_x|lower == 'middle' %}
{% set safe_home_x = printable_x_max / 2 %}
{% endif %}
{% set safe_home_y = printer["gcode_macro RatOS"].safe_home_y %}
{% if safe_home_y is not defined or safe_home_y|lower == 'middle' %}
{% set safe_home_y = printable_y_max / 2 %}
{% endif %}
{% 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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=False
_BEACON_HOME_AND_ABL
_LED_BEACON_CALIBRATION_START
RATOS_ECHO PREFIX="BEACON" MSG="Measure gantry twist..."
{% for i in range(10) %}
beacon_poke speed=3 top=5 bottom={poke_bottom}
{% endfor %}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="center"
G0 X{margin_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_left"
G0 X{safe_home_x} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front"
G0 X{(printable_x_max - margin_x)} Y{margin_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="front_right"
G0 X{(printable_x_max - margin_x)} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="right"
G0 X{(printable_x_max - margin_x)} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_right"
G0 X{safe_home_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back"
G0 X{margin_x} Y{(printable_y_max - margin_y)} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="back_left"
G0 X{margin_x} Y{safe_home_y} F{speed}
_BEACON_PROBE_GANTRY_TWIST
_BEACON_STORE_GANTRY_TWIST LOCATION="left"
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
_BEACON_ECHO_GANTRY_TWIST
_LED_BEACON_CALIBRATION_END
{% endif %}
[gcode_macro _BEACON_PROBE_GANTRY_TWIST]
gcode =
RATOS_ECHO PREFIX="BEACON" MSG="Probing..."
BEACON_OFFSET_COMPARE
BEACON_QUERY
[gcode_macro _BEACON_STORE_GANTRY_TWIST]
gcode =
{% set location = params.LOCATION|lower %}
{% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %}
{% set last_z = printer.beacon.last_offset_result["delta"]|default(0)|float %}
{% if location == "center" %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=reference_z VALUE={last_z}
{% else %}
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE={location} VALUE={(last_z - reference_z)}
{% endif %}
[gcode_macro _BEACON_ECHO_GANTRY_TWIST]
gcode =
{% set reference_z = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].reference_z|default(0)|float * 1000 %}
{% set front_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_left|default(0)|float * 1000 %}
{% set front = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front|default(0)|float * 1000 %}
{% set front_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].front_right|default(0)|float * 1000 %}
{% set right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].right|default(0)|float * 1000 %}
{% set back_right = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_right|default(0)|float * 1000 %}
{% set back = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back|default(0)|float * 1000 %}
{% set back_left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].back_left|default(0)|float * 1000 %}
{% set left = printer["gcode_macro BEACON_MEASURE_GANTRY_TWIST"].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 gantry twist: %.6fμm._N_No beacon scan compensation needed." % max_value %}
{% elif max_value > 50 and max_value <= 100 %}
{% set type = "info" %}
{% set recommendation = "Low gantry twist: %.6fμm._N_You may experience first layer inconsistensies, consider beacon scan compensation." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 100 and max_value <= 150 %}
{% set type = "warning" %}
{% set recommendation = "High gantry twist: %.6fμm._N_High chance of first layer problems, beacon scan compensation is highly encouraged." % max_value %}
SET_GCODE_VARIABLE MACRO=BEACON_MEASURE_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 150 and max_value <= 200 %}
{% set type = "alert" %}
{% set recommendation = "Very High gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% elif max_value > 200 %}
{% set type = "alert" %}
{% set recommendation = "Extremely high gantry twist: %.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_GANTRY_TWIST VARIABLE=needs_compensation VALUE=True
{% endif %}
CONSOLE_ECHO TITLE="Gantry twist 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("Contact")|string %}
{% set automated = true if params._AUTOMATED|default(false)|lower == 'true' else false %}
{% 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 probe_count = printer["gcode_macro RatOS"].beacon_scan_compensation_probe_count %}
{% set bed_heat_soak_time = printer["gcode_macro RatOS"].bed_heat_soak_time|default(0)|int %}
{% if not beacon_scan_compensation_enable %}
RATOS_ECHO MSG="Beacon scan compensation is disabled!"
{% else %}
MAYBE_HOME
_MOVE_TO_SAFE_Z_HOME
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
_LED_BEACON_CALIBRATION_START
{% if chamber_temp > 0 and not automated %}
_CHAMBER_HEATER_ON CHAMBER_TEMP={chamber_temp}
{% endif %}
{% if not automated %}
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
{% endif %}
{% if not automated %}
{% 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 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 %}
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
BED_MESH_CALIBRATE PROBE_METHOD=contact USE_CONTACT_AREA=1 SAMPLES=2 SAMPLES_DROP=1 SAMPLES_TOLERANCE_RETRIES=10 PROBE_COUNT={probe_count[0]},{probe_count[1]} PROFILE={profile}
{% 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 %}
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=1
{% 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]
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" 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 _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_GANTRY_TWIST"].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 =
MAYBE_HOME X=True Y=True
_MOVE_TO_SAFE_Z_HOME Z_HOP=True
BEACON_AUTO_CALIBRATE SKIP_MODEL_CREATION=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
{% endif %}
[gcode_macro _BEACON_SAVE_MULTIPLIER]
gcode =
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% set multiplier = printer["gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER"].runtime_multiplier|default(-1.0)|float %}
DEBUG_ECHO PREFIX="_BEACON_SAVE_MULTIPLIER" MSG="multiplier: {multiplier}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if multiplier > 0 and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
SAVE_VARIABLE VARIABLE=nozzle_expansion_coefficient_multiplier VALUE={multiplier}
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE=-1.0
CONSOLE_ECHO TITLE="Hotend thermal expansion compensation" TYPE="success" MSG={'"New value is: %.6f_N_The new multiplier value has been saved to the configuration."' % multiplier}
{% else %}
Z_OFFSET_APPLY_PROBE
{% endif %}
[gcode_macro _BEACON_APPLY_RUNTIME_MULTIPLIER]
variable_runtime_multiplier = -1.0
gcode =
{% set toolhead = 0 %}
{% if printer["dual_carriage"] is defined %}
{% set idex_mode = printer["dual_carriage"].carriage_1|lower %}
{% set toolhead = 1 if idex_mode == 'primary' else 0 %}
{% endif %}
{% 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_expansion_compensation = true if printer["gcode_macro RatOS"].beacon_contact_expansion_compensation|default(false)|lower == 'true' else false %}
{% 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 layer_number == 0 and is_printing_gcode %}
{% set link_url = "https://os.ratrig.com/docs/slicers" %}
{% set link_text = "RatOS Slicer Documentation" %}
{% set line_1 = '"Your slicer is not correctly reporting layer information. See the layer change custom g-code in the %s".' % (link_url, link_text) %}
CONSOLE_ECHO TITLE="Missing layer information" TYPE="warning" MSG={line_1}
{% endif %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="layer_number: {layer_number}, is_printing_gcode: {is_printing_gcode}, beacon_contact_start_print_true_zero: {beacon_contact_start_print_true_zero}, beacon_contact_expansion_compensation: {beacon_contact_expansion_compensation}"
{% if layer_number == 1 and is_printing_gcode and printer.configfile.settings.beacon is defined and beacon_contact_start_print_true_zero and beacon_contact_expansion_compensation %}
{% set svv = printer.save_variables.variables %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t0|default(0)|float %}
{% if toolhead == 1 %}
{% set nozzle_expansion_coefficient = svv.nozzle_expansion_coefficient_t1|default(0)|float %}
{% endif %}
{% set beacon_contact_expansion_multiplier = svv.nozzle_expansion_coefficient_multiplier|default(1.0)|float %}
{% set print_temp = printer["gcode_macro _BEACON_SET_NOZZLE_TEMP_OFFSET"].runtime_temp|default(0)|int %}
{% if print_temp > 0 %}
{% set z_offset = printer.gcode_move.homing_origin.z|float %}
{% set temp_delta = print_temp - beacon_contact_true_zero_temp %}
{% set coefficient_per_degree = nozzle_expansion_coefficient / 100 %}
{% set z_offset_per_degree = z_offset / temp_delta %}
{% set new_multiplier = z_offset_per_degree / coefficient_per_degree %}
DEBUG_ECHO PREFIX="_BEACON_APPLY_RUNTIME_MULTIPLIER" MSG="print_temp: {print_temp}, z_offset: {z_offset}, temp_delta: {temp_delta}, nozzle_expansion_coefficient: {nozzle_expansion_coefficient}, coefficient_per_degree: {coefficient_per_degree}, z_offset_per_degree: {z_offset_per_degree}, old_multiplier: {beacon_contact_expansion_multiplier}, new_multiplier: {new_multiplier}"
SET_GCODE_VARIABLE MACRO=_BEACON_APPLY_RUNTIME_MULTIPLIER VARIABLE=runtime_multiplier VALUE={new_multiplier}
{% endif %}
{% endif %}
[controller_fan controller_fan]
pin = PD12
[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 = "UHF"
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_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 4104845008: New connection
webhooks client 4104845008: Client info {'program': 'Moonraker', 'version': 'v0.9.3-0-g71f9e67'}
Loaded MCU 'mcu' 130 commands (v0.12.0-396-gb7233d119 / 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 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 BUS_PINS_spi4=PE13,PE14,PE12 CLOCK_FREQ=180000000 MCU=stm32f446xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
mcu '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-396-gb7233d119 / 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=-275.220884 slope=1315.662651
mcu_temperature 'toolboard_t0' nominal base=-267.118156 slope=1298.126801
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
bed_mesh: generated points
Index | Tool Adjusted | Probe
0 | (20.0, 7.5) | (20.0, 30.0)
1 | (32.1, 7.5) | (32.1, 30.0)
2 | (44.1, 7.5) | (44.1, 30.0)
3 | (56.2, 7.5) | (56.2, 30.0)
4 | (68.2, 7.5) | (68.2, 30.0)
5 | (80.3, 7.5) | (80.3, 30.0)
6 | (92.4, 7.5) | (92.4, 30.0)
7 | (104.4, 7.5) | (104.4, 30.0)
8 | (116.5, 7.5) | (116.5, 30.0)
9 | (128.5, 7.5) | (128.5, 30.0)
10 | (140.6, 7.5) | (140.6, 30.0)
11 | (152.7, 7.5) | (152.7, 30.0)
12 | (164.7, 7.5) | (164.7, 30.0)
13 | (176.8, 7.5) | (176.8, 30.0)
14 | (188.8, 7.5) | (188.8, 30.0)
15 | (200.9, 7.5) | (200.9, 30.0)
16 | (213.0, 7.5) | (213.0, 30.0)
17 | (225.0, 7.5) | (225.0, 30.0)
18 | (237.1, 7.5) | (237.1, 30.0)
19 | (249.1, 7.5) | (249.1, 30.0)
20 | (261.2, 7.5) | (261.2, 30.0)
21 | (273.3, 7.5) | (273.3, 30.0)
22 | (285.3, 7.5) | (285.3, 30.0)
23 | (297.4, 7.5) | (297.4, 30.0)
24 | (309.4, 7.5) | (309.4, 30.0)
25 | (321.5, 7.5) | (321.5, 30.0)
26 | (333.6, 7.5) | (333.6, 30.0)
27 | (345.6, 7.5) | (345.6, 30.0)
28 | (357.7, 7.5) | (357.7, 30.0)
29 | (369.7, 7.5) | (369.7, 30.0)
30 | (369.7, 18.5) | (369.7, 41.0)
31 | (357.7, 18.5) | (357.7, 41.0)
32 | (345.6, 18.5) | (345.6, 41.0)
33 | (333.6, 18.5) | (333.6, 41.0)
34 | (321.5, 18.5) | (321.5, 41.0)
35 | (309.4, 18.5) | (309.4, 41.0)
36 | (297.4, 18.5) | (297.4, 41.0)
37 | (285.3, 18.5) | (285.3, 41.0)
38 | (273.3, 18.5) | (273.3, 41.0)
39 | (261.2, 18.5) | (261.2, 41.0)
40 | (249.1, 18.5) | (249.1, 41.0)
41 | (237.1, 18.5) | (237.1, 41.0)
42 | (225.0, 18.5) | (225.0, 41.0)
43 | (213.0, 18.5) | (213.0, 41.0)
44 | (200.9, 18.5) | (200.9, 41.0)
45 | (188.8, 18.5) | (188.8, 41.0)
46 | (176.8, 18.5) | (176.8, 41.0)
47 | (164.7, 18.5) | (164.7, 41.0)
48 | (152.7, 18.5) | (152.7, 41.0)
49 | (140.6, 18.5) | (140.6, 41.0)
50 | (128.5, 18.5) | (128.5, 41.0)
51 | (116.5, 18.5) | (116.5, 41.0)
52 | (104.4, 18.5) | (104.4, 41.0)
53 | (92.4, 18.5) | (92.4, 41.0)
54 | (80.3, 18.5) | (80.3, 41.0)
55 | (68.2, 18.5) | (68.2, 41.0)
56 | (56.2, 18.5) | (56.2, 41.0)
57 | (44.1, 18.5) | (44.1, 41.0)
58 | (32.1, 18.5) | (32.1, 41.0)
59 | (20.0, 18.5) | (20.0, 41.0)
60 | (20.0, 29.6) | (20.0, 52.1)
61 | (32.1, 29.6) | (32.1, 52.1)
62 | (44.1, 29.6) | (44.1, 52.1)
63 | (56.2, 29.6) | (56.2, 52.1)
64 | (68.2, 29.6) | (68.2, 52.1)
65 | (80.3, 29.6) | (80.3, 52.1)
66 | (92.4, 29.6) | (92.4, 52.1)
67 | (104.4, 29.6) | (104.4, 52.1)
68 | (116.5, 29.6) | (116.5, 52.1)
69 | (128.5, 29.6) | (128.5, 52.1)
70 | (140.6, 29.6) | (140.6, 52.1)
71 | (152.7, 29.6) | (152.7, 52.1)
72 | (164.7, 29.6) | (164.7, 52.1)
73 | (176.8, 29.6) | (176.8, 52.1)
74 | (188.8, 29.6) | (188.8, 52.1)
75 | (200.9, 29.6) | (200.9, 52.1)
76 | (213.0, 29.6) | (213.0, 52.1)
77 | (225.0, 29.6) | (225.0, 52.1)
78 | (237.1, 29.6) | (237.1, 52.1)
79 | (249.1, 29.6) | (249.1, 52.1)
80 | (261.2, 29.6) | (261.2, 52.1)
81 | (273.3, 29.6) | (273.3, 52.1)
82 | (285.3, 29.6) | (285.3, 52.1)
83 | (297.4, 29.6) | (297.4, 52.1)
84 | (309.4, 29.6) | (309.4, 52.1)
85 | (321.5, 29.6) | (321.5, 52.1)
86 | (333.6, 29.6) | (333.6, 52.1)
87 | (345.6, 29.6) | (345.6, 52.1)
88 | (357.7, 29.6) | (357.7, 52.1)
89 | (369.7, 29.6) | (369.7, 52.1)
90 | (369.7, 40.6) | (369.7, 63.1)
91 | (357.7, 40.6) | (357.7, 63.1)
92 | (345.6, 40.6) | (345.6, 63.1)
93 | (333.6, 40.6) | (333.6, 63.1)
94 | (321.5, 40.6) | (321.5, 63.1)
95 | (309.4, 40.6) | (309.4, 63.1)
96 | (297.4, 40.6) | (297.4, 63.1)
97 | (285.3, 40.6) | (285.3, 63.1)
98 | (273.3, 40.6) | (273.3, 63.1)
99 | (261.2, 40.6) | (261.2, 63.1)
100 | (249.1, 40.6) | (249.1, 63.1)
101 | (237.1, 40.6) | (237.1, 63.1)
102 | (225.0, 40.6) | (225.0, 63.1)
103 | (213.0, 40.6) | (213.0, 63.1)
104 | (200.9, 40.6) | (200.9, 63.1)
105 | (188.8, 40.6) | (188.8, 63.1)
106 | (176.8, 40.6) | (176.8, 63.1)
107 | (164.7, 40.6) | (164.7, 63.1)
108 | (152.7, 40.6) | (152.7, 63.1)
109 | (140.6, 40.6) | (140.6, 63.1)
110 | (128.5, 40.6) | (128.5, 63.1)
111 | (116.5, 40.6) | (116.5, 63.1)
112 | (104.4, 40.6) | (104.4, 63.1)
113 | (92.4, 40.6) | (92.4, 63.1)
114 | (80.3, 40.6) | (80.3, 63.1)
115 | (68.2, 40.6) | (68.2, 63.1)
116 | (56.2, 40.6) | (56.2, 63.1)
117 | (44.1, 40.6) | (44.1, 63.1)
118 | (32.1, 40.6) | (32.1, 63.1)
119 | (20.0, 40.6) | (20.0, 63.1)
120 | (20.0, 51.6) | (20.0, 74.1)
121 | (32.1, 51.6) | (32.1, 74.1)
122 | (44.1, 51.6) | (44.1, 74.1)
123 | (56.2, 51.6) | (56.2, 74.1)
124 | (68.2, 51.6) | (68.2, 74.1)
125 | (80.3, 51.6) | (80.3, 74.1)
126 | (92.4, 51.6) | (92.4, 74.1)
127 | (104.4, 51.6) | (104.4, 74.1)
128 | (116.5, 51.6) | (116.5, 74.1)
129 | (128.5, 51.6) | (128.5, 74.1)
130 | (140.6, 51.6) | (140.6, 74.1)
131 | (152.7, 51.6) | (152.7, 74.1)
132 | (164.7, 51.6) | (164.7, 74.1)
133 | (176.8, 51.6) | (176.8, 74.1)
134 | (188.8, 51.6) | (188.8, 74.1)
135 | (200.9, 51.6) | (200.9, 74.1)
136 | (213.0, 51.6) | (213.0, 74.1)
137 | (225.0, 51.6) | (225.0, 74.1)
138 | (237.1, 51.6) | (237.1, 74.1)
139 | (249.1, 51.6) | (249.1, 74.1)
140 | (261.2, 51.6) | (261.2, 74.1)
141 | (273.3, 51.6) | (273.3, 74.1)
142 | (285.3, 51.6) | (285.3, 74.1)
143 | (297.4, 51.6) | (297.4, 74.1)
144 | (309.4, 51.6) | (309.4, 74.1)
145 | (321.5, 51.6) | (321.5, 74.1)
146 | (333.6, 51.6) | (333.6, 74.1)
147 | (345.6, 51.6) | (345.6, 74.1)
148 | (357.7, 51.6) | (357.7, 74.1)
149 | (369.7, 51.6) | (369.7, 74.1)
150 | (369.7, 62.7) | (369.7, 85.2)
151 | (357.7, 62.7) | (357.7, 85.2)
152 | (345.6, 62.7) | (345.6, 85.2)
153 | (333.6, 62.7) | (333.6, 85.2)
154 | (321.5, 62.7) | (321.5, 85.2)
155 | (309.4, 62.7) | (309.4, 85.2)
156 | (297.4, 62.7) | (297.4, 85.2)
157 | (285.3, 62.7) | (285.3, 85.2)
158 | (273.3, 62.7) | (273.3, 85.2)
159 | (261.2, 62.7) | (261.2, 85.2)
160 | (249.1, 62.7) | (249.1, 85.2)
161 | (237.1, 62.7) | (237.1, 85.2)
162 | (225.0, 62.7) | (225.0, 85.2)
163 | (213.0, 62.7) | (213.0, 85.2)
164 | (200.9, 62.7) | (200.9, 85.2)
165 | (188.8, 62.7) | (188.8, 85.2)
166 | (176.8, 62.7) | (176.8, 85.2)
167 | (164.7, 62.7) | (164.7, 85.2)
168 | (152.7, 62.7) | (152.7, 85.2)
169 | (140.6, 62.7) | (140.6, 85.2)
170 | (128.5, 62.7) | (128.5, 85.2)
171 | (116.5, 62.7) | (116.5, 85.2)
172 | (104.4, 62.7) | (104.4, 85.2)
173 | (92.4, 62.7) | (92.4, 85.2)
174 | (80.3, 62.7) | (80.3, 85.2)
175 | (68.2, 62.7) | (68.2, 85.2)
176 | (56.2, 62.7) | (56.2, 85.2)
177 | (44.1, 62.7) | (44.1, 85.2)
178 | (32.1, 62.7) | (32.1, 85.2)
179 | (20.0, 62.7) | (20.0, 85.2)
180 | (20.0, 73.7) | (20.0, 96.2)
181 | (32.1, 73.7) | (32.1, 96.2)
182 | (44.1, 73.7) | (44.1, 96.2)
183 | (56.2, 73.7) | (56.2, 96.2)
184 | (68.2, 73.7) | (68.2, 96.2)
185 | (80.3, 73.7) | (80.3, 96.2)
186 | (92.4, 73.7) | (92.4, 96.2)
187 | (104.4, 73.7) | (104.4, 96.2)
188 | (116.5, 73.7) | (116.5, 96.2)
189 | (128.5, 73.7) | (128.5, 96.2)
190 | (140.6, 73.7) | (140.6, 96.2)
191 | (152.7, 73.7) | (152.7, 96.2)
192 | (164.7, 73.7) | (164.7, 96.2)
193 | (176.8, 73.7) | (176.8, 96.2)
194 | (188.8, 73.7) | (188.8, 96.2)
195 | (200.9, 73.7) | (200.9, 96.2)
196 | (213.0, 73.7) | (213.0, 96.2)
197 | (225.0, 73.7) | (225.0, 96.2)
198 | (237.1, 73.7) | (237.1, 96.2)
199 | (249.1, 73.7) | (249.1, 96.2)
200 | (261.2, 73.7) | (261.2, 96.2)
201 | (273.3, 73.7) | (273.3, 96.2)
202 | (285.3, 73.7) | (285.3, 96.2)
203 | (297.4, 73.7) | (297.4, 96.2)
204 | (309.4, 73.7) | (309.4, 96.2)
205 | (321.5, 73.7) | (321.5, 96.2)
206 | (333.6, 73.7) | (333.6, 96.2)
207 | (345.6, 73.7) | (345.6, 96.2)
208 | (357.7, 73.7) | (357.7, 96.2)
209 | (369.7, 73.7) | (369.7, 96.2)
210 | (369.7, 84.7) | (369.7, 107.2)
211 | (357.7, 84.7) | (357.7, 107.2)
212 | (345.6, 84.7) | (345.6, 107.2)
213 | (333.6, 84.7) | (333.6, 107.2)
214 | (321.5, 84.7) | (321.5, 107.2)
215 | (309.4, 84.7) | (309.4, 107.2)
216 | (297.4, 84.7) | (297.4, 107.2)
217 | (285.3, 84.7) | (285.3, 107.2)
218 | (273.3, 84.7) | (273.3, 107.2)
219 | (261.2, 84.7) | (261.2, 107.2)
220 | (249.1, 84.7) | (249.1, 107.2)
221 | (237.1, 84.7) | (237.1, 107.2)
222 | (225.0, 84.7) | (225.0, 107.2)
223 | (213.0, 84.7) | (213.0, 107.2)
224 | (200.9, 84.7) | (200.9, 107.2)
225 | (188.8, 84.7) | (188.8, 107.2)
226 | (176.8, 84.7) | (176.8, 107.2)
227 | (164.7, 84.7) | (164.7, 107.2)
228 | (152.7, 84.7) | (152.7, 107.2)
229 | (140.6, 84.7) | (140.6, 107.2)
230 | (128.5, 84.7) | (128.5, 107.2)
231 | (116.5, 84.7) | (116.5, 107.2)
232 | (104.4, 84.7) | (104.4, 107.2)
233 | (92.4, 84.7) | (92.4, 107.2)
234 | (80.3, 84.7) | (80.3, 107.2)
235 | (68.2, 84.7) | (68.2, 107.2)
236 | (56.2, 84.7) | (56.2, 107.2)
237 | (44.1, 84.7) | (44.1, 107.2)
238 | (32.1, 84.7) | (32.1, 107.2)
239 | (20.0, 84.7) | (20.0, 107.2)
240 | (20.0, 95.7) | (20.0, 118.2)
241 | (32.1, 95.7) | (32.1, 118.2)
242 | (44.1, 95.7) | (44.1, 118.2)
243 | (56.2, 95.7) | (56.2, 118.2)
244 | (68.2, 95.7) | (68.2, 118.2)
245 | (80.3, 95.7) | (80.3, 118.2)
246 | (92.4, 95.7) | (92.4, 118.2)
247 | (104.4, 95.7) | (104.4, 118.2)
248 | (116.5, 95.7) | (116.5, 118.2)
249 | (128.5, 95.7) | (128.5, 118.2)
250 | (140.6, 95.7) | (140.6, 118.2)
251 | (152.7, 95.7) | (152.7, 118.2)
252 | (164.7, 95.7) | (164.7, 118.2)
253 | (176.8, 95.7) | (176.8, 118.2)
254 | (188.8, 95.7) | (188.8, 118.2)
255 | (200.9, 95.7) | (200.9, 118.2)
256 | (213.0, 95.7) | (213.0, 118.2)
257 | (225.0, 95.7) | (225.0, 118.2)
258 | (237.1, 95.7) | (237.1, 118.2)
259 | (249.1, 95.7) | (249.1, 118.2)
260 | (261.2, 95.7) | (261.2, 118.2)
261 | (273.3, 95.7) | (273.3, 118.2)
262 | (285.3, 95.7) | (285.3, 118.2)
263 | (297.4, 95.7) | (297.4, 118.2)
264 | (309.4, 95.7) | (309.4, 118.2)
265 | (321.5, 95.7) | (321.5, 118.2)
266 | (333.6, 95.7) | (333.6, 118.2)
267 | (345.6, 95.7) | (345.6, 118.2)
268 | (357.7, 95.7) | (357.7, 118.2)
269 | (369.7, 95.7) | (369.7, 118.2)
270 | (369.7, 106.8) | (369.7, 129.3)
271 | (357.7, 106.8) | (357.7, 129.3)
272 | (345.6, 106.8) | (345.6, 129.3)
273 | (333.6, 106.8) | (333.6, 129.3)
274 | (321.5, 106.8) | (321.5, 129.3)
275 | (309.4, 106.8) | (309.4, 129.3)
276 | (297.4, 106.8) | (297.4, 129.3)
277 | (285.3, 106.8) | (285.3, 129.3)
278 | (273.3, 106.8) | (273.3, 129.3)
279 | (261.2, 106.8) | (261.2, 129.3)
280 | (249.1, 106.8) | (249.1, 129.3)
281 | (237.1, 106.8) | (237.1, 129.3)
282 | (225.0, 106.8) | (225.0, 129.3)
283 | (213.0, 106.8) | (213.0, 129.3)
284 | (200.9, 106.8) | (200.9, 129.3)
285 | (188.8, 106.8) | (188.8, 129.3)
286 | (176.8, 106.8) | (176.8, 129.3)
287 | (164.7, 106.8) | (164.7, 129.3)
288 | (152.7, 106.8) | (152.7, 129.3)
289 | (140.6, 106.8) | (140.6, 129.3)
290 | (128.5, 106.8) | (128.5, 129.3)
291 | (116.5, 106.8) | (116.5, 129.3)
292 | (104.4, 106.8) | (104.4, 129.3)
293 | (92.4, 106.8) | (92.4, 129.3)
294 | (80.3, 106.8) | (80.3, 129.3)
295 | (68.2, 106.8) | (68.2, 129.3)
296 | (56.2, 106.8) | (56.2, 129.3)
297 | (44.1, 106.8) | (44.1, 129.3)
298 | (32.1, 106.8) | (32.1, 129.3)
299 | (20.0, 106.8) | (20.0, 129.3)
300 | (20.0, 117.8) | (20.0, 140.3)
301 | (32.1, 117.8) | (32.1, 140.3)
302 | (44.1, 117.8) | (44.1, 140.3)
303 | (56.2, 117.8) | (56.2, 140.3)
304 | (68.2, 117.8) | (68.2, 140.3)
305 | (80.3, 117.8) | (80.3, 140.3)
306 | (92.4, 117.8) | (92.4, 140.3)
307 | (104.4, 117.8) | (104.4, 140.3)
308 | (116.5, 117.8) | (116.5, 140.3)
309 | (128.5, 117.8) | (128.5, 140.3)
310 | (140.6, 117.8) | (140.6, 140.3)
311 | (152.7, 117.8) | (152.7, 140.3)
312 | (164.7, 117.8) | (164.7, 140.3)
313 | (176.8, 117.8) | (176.8, 140.3)
314 | (188.8, 117.8) | (188.8, 140.3)
315 | (200.9, 117.8) | (200.9, 140.3)
316 | (213.0, 117.8) | (213.0, 140.3)
317 | (225.0, 117.8) | (225.0, 140.3)
318 | (237.1, 117.8) | (237.1, 140.3)
319 | (249.1, 117.8) | (249.1, 140.3)
320 | (261.2, 117.8) | (261.2, 140.3)
321 | (273.3, 117.8) | (273.3, 140.3)
322 | (285.3, 117.8) | (285.3, 140.3)
323 | (297.4, 117.8) | (297.4, 140.3)
324 | (309.4, 117.8) | (309.4, 140.3)
325 | (321.5, 117.8) | (321.5, 140.3)
326 | (333.6, 117.8) | (333.6, 140.3)
327 | (345.6, 117.8) | (345.6, 140.3)
328 | (357.7, 117.8) | (357.7, 140.3)
329 | (369.7, 117.8) | (369.7, 140.3)
330 | (369.7, 128.8) | (369.7, 151.3)
331 | (357.7, 128.8) | (357.7, 151.3)
332 | (345.6, 128.8) | (345.6, 151.3)
333 | (333.6, 128.8) | (333.6, 151.3)
334 | (321.5, 128.8) | (321.5, 151.3)
335 | (309.4, 128.8) | (309.4, 151.3)
336 | (297.4, 128.8) | (297.4, 151.3)
337 | (285.3, 128.8) | (285.3, 151.3)
338 | (273.3, 128.8) | (273.3, 151.3)
339 | (261.2, 128.8) | (261.2, 151.3)
340 | (249.1, 128.8) | (249.1, 151.3)
341 | (237.1, 128.8) | (237.1, 151.3)
342 | (225.0, 128.8) | (225.0, 151.3)
343 | (213.0, 128.8) | (213.0, 151.3)
344 | (200.9, 128.8) | (200.9, 151.3)
345 | (188.8, 128.8) | (188.8, 151.3)
346 | (176.8, 128.8) | (176.8, 151.3)
347 | (164.7, 128.8) | (164.7, 151.3)
348 | (152.7, 128.8) | (152.7, 151.3)
349 | (140.6, 128.8) | (140.6, 151.3)
350 | (128.5, 128.8) | (128.5, 151.3)
351 | (116.5, 128.8) | (116.5, 151.3)
352 | (104.4, 128.8) | (104.4, 151.3)
353 | (92.4, 128.8) | (92.4, 151.3)
354 | (80.3, 128.8) | (80.3, 151.3)
355 | (68.2, 128.8) | (68.2, 151.3)
356 | (56.2, 128.8) | (56.2, 151.3)
357 | (44.1, 128.8) | (44.1, 151.3)
358 | (32.1, 128.8) | (32.1, 151.3)
359 | (20.0, 128.8) | (20.0, 151.3)
360 | (20.0, 139.9) | (20.0, 162.4)
361 | (32.1, 139.9) | (32.1, 162.4)
362 | (44.1, 139.9) | (44.1, 162.4)
363 | (56.2, 139.9) | (56.2, 162.4)
364 | (68.2, 139.9) | (68.2, 162.4)
365 | (80.3, 139.9) | (80.3, 162.4)
366 | (92.4, 139.9) | (92.4, 162.4)
367 | (104.4, 139.9) | (104.4, 162.4)
368 | (116.5, 139.9) | (116.5, 162.4)
369 | (128.5, 139.9) | (128.5, 162.4)
370 | (140.6, 139.9) | (140.6, 162.4)
371 | (152.7, 139.9) | (152.7, 162.4)
372 | (164.7, 139.9) | (164.7, 162.4)
373 | (176.8, 139.9) | (176.8, 162.4)
374 | (188.8, 139.9) | (188.8, 162.4)
375 | (200.9, 139.9) | (200.9, 162.4)
376 | (213.0, 139.9) | (213.0, 162.4)
377 | (225.0, 139.9) | (225.0, 162.4)
378 | (237.1, 139.9) | (237.1, 162.4)
379 | (249.1, 139.9) | (249.1, 162.4)
380 | (261.2, 139.9) | (261.2, 162.4)
381 | (273.3, 139.9) | (273.3, 162.4)
382 | (285.3, 139.9) | (285.3, 162.4)
383 | (297.4, 139.9) | (297.4, 162.4)
384 | (309.4, 139.9) | (309.4, 162.4)
385 | (321.5, 139.9) | (321.5, 162.4)
386 | (333.6, 139.9) | (333.6, 162.4)
387 | (345.6, 139.9) | (345.6, 162.4)
388 | (357.7, 139.9) | (357.7, 162.4)
389 | (369.7, 139.9) | (369.7, 162.4)
390 | (369.7, 150.9) | (369.7, 173.4)
391 | (357.7, 150.9) | (357.7, 173.4)
392 | (345.6, 150.9) | (345.6, 173.4)
393 | (333.6, 150.9) | (333.6, 173.4)
394 | (321.5, 150.9) | (321.5, 173.4)
395 | (309.4, 150.9) | (309.4, 173.4)
396 | (297.4, 150.9) | (297.4, 173.4)
397 | (285.3, 150.9) | (285.3, 173.4)
398 | (273.3, 150.9) | (273.3, 173.4)
399 | (261.2, 150.9) | (261.2, 173.4)
400 | (249.1, 150.9) | (249.1, 173.4)
401 | (237.1, 150.9) | (237.1, 173.4)
402 | (225.0, 150.9) | (225.0, 173.4)
403 | (213.0, 150.9) | (213.0, 173.4)
404 | (200.9, 150.9) | (200.9, 173.4)
405 | (188.8, 150.9) | (188.8, 173.4)
406 | (176.8, 150.9) | (176.8, 173.4)
407 | (164.7, 150.9) | (164.7, 173.4)
408 | (152.7, 150.9) | (152.7, 173.4)
409 | (140.6, 150.9) | (140.6, 173.4)
410 | (128.5, 150.9) | (128.5, 173.4)
411 | (116.5, 150.9) | (116.5, 173.4)
412 | (104.4, 150.9) | (104.4, 173.4)
413 | (92.4, 150.9) | (92.4, 173.4)
414 | (80.3, 150.9) | (80.3, 173.4)
415 | (68.2, 150.9) | (68.2, 173.4)
416 | (56.2, 150.9) | (56.2, 173.4)
417 | (44.1, 150.9) | (44.1, 173.4)
418 | (32.1, 150.9) | (32.1, 173.4)
419 | (20.0, 150.9) | (20.0, 173.4)
420 | (20.0, 161.9) | (20.0, 184.4)
421 | (32.1, 161.9) | (32.1, 184.4)
422 | (44.1, 161.9) | (44.1, 184.4)
423 | (56.2, 161.9) | (56.2, 184.4)
424 | (68.2, 161.9) | (68.2, 184.4)
425 | (80.3, 161.9) | (80.3, 184.4)
426 | (92.4, 161.9) | (92.4, 184.4)
427 | (104.4, 161.9) | (104.4, 184.4)
428 | (116.5, 161.9) | (116.5, 184.4)
429 | (128.5, 161.9) | (128.5, 184.4)
430 | (140.6, 161.9) | (140.6, 184.4)
431 | (152.7, 161.9) | (152.7, 184.4)
432 | (164.7, 161.9) | (164.7, 184.4)
433 | (176.8, 161.9) | (176.8, 184.4)
434 | (188.8, 161.9) | (188.8, 184.4)
435 | (200.9, 161.9) | (200.9, 184.4)
436 | (213.0, 161.9) | (213.0, 184.4)
437 | (225.0, 161.9) | (225.0, 184.4)
438 | (237.1, 161.9) | (237.1, 184.4)
439 | (249.1, 161.9) | (249.1, 184.4)
440 | (261.2, 161.9) | (261.2, 184.4)
441 | (273.3, 161.9) | (273.3, 184.4)
442 | (285.3, 161.9) | (285.3, 184.4)
443 | (297.4, 161.9) | (297.4, 184.4)
444 | (309.4, 161.9) | (309.4, 184.4)
445 | (321.5, 161.9) | (321.5, 184.4)
446 | (333.6, 161.9) | (333.6, 184.4)
447 | (345.6, 161.9) | (345.6, 184.4)
448 | (357.7, 161.9) | (357.7, 184.4)
449 | (369.7, 161.9) | (369.7, 184.4)
450 | (369.7, 173.0) | (369.7, 195.5)
451 | (357.7, 173.0) | (357.7, 195.5)
452 | (345.6, 173.0) | (345.6, 195.5)
453 | (333.6, 173.0) | (333.6, 195.5)
454 | (321.5, 173.0) | (321.5, 195.5)
455 | (309.4, 173.0) | (309.4, 195.5)
456 | (297.4, 173.0) | (297.4, 195.5)
457 | (285.3, 173.0) | (285.3, 195.5)
458 | (273.3, 173.0) | (273.3, 195.5)
459 | (261.2, 173.0) | (261.2, 195.5)
460 | (249.1, 173.0) | (249.1, 195.5)
461 | (237.1, 173.0) | (237.1, 195.5)
462 | (225.0, 173.0) | (225.0, 195.5)
463 | (213.0, 173.0) | (213.0, 195.5)
464 | (200.9, 173.0) | (200.9, 195.5)
465 | (188.8, 173.0) | (188.8, 195.5)
466 | (176.8, 173.0) | (176.8, 195.5)
467 | (164.7, 173.0) | (164.7, 195.5)
468 | (152.7, 173.0) | (152.7, 195.5)
469 | (140.6, 173.0) | (140.6, 195.5)
470 | (128.5, 173.0) | (128.5, 195.5)
471 | (116.5, 173.0) | (116.5, 195.5)
472 | (104.4, 173.0) | (104.4, 195.5)
473 | (92.4, 173.0) | (92.4, 195.5)
474 | (80.3, 173.0) | (80.3, 195.5)
475 | (68.2, 173.0) | (68.2, 195.5)
476 | (56.2, 173.0) | (56.2, 195.5)
477 | (44.1, 173.0) | (44.1, 195.5)
478 | (32.1, 173.0) | (32.1, 195.5)
479 | (20.0, 173.0) | (20.0, 195.5)
480 | (20.0, 184.0) | (20.0, 206.5)
481 | (32.1, 184.0) | (32.1, 206.5)
482 | (44.1, 184.0) | (44.1, 206.5)
483 | (56.2, 184.0) | (56.2, 206.5)
484 | (68.2, 184.0) | (68.2, 206.5)
485 | (80.3, 184.0) | (80.3, 206.5)
486 | (92.4, 184.0) | (92.4, 206.5)
487 | (104.4, 184.0) | (104.4, 206.5)
488 | (116.5, 184.0) | (116.5, 206.5)
489 | (128.5, 184.0) | (128.5, 206.5)
490 | (140.6, 184.0) | (140.6, 206.5)
491 | (152.7, 184.0) | (152.7, 206.5)
492 | (164.7, 184.0) | (164.7, 206.5)
493 | (176.8, 184.0) | (176.8, 206.5)
494 | (188.8, 184.0) | (188.8, 206.5)
495 | (200.9, 184.0) | (200.9, 206.5)
496 | (213.0, 184.0) | (213.0, 206.5)
497 | (225.0, 184.0) | (225.0, 206.5)
498 | (237.1, 184.0) | (237.1, 206.5)
499 | (249.1, 184.0) | (249.1, 206.5)
500 | (261.2, 184.0) | (261.2, 206.5)
501 | (273.3, 184.0) | (273.3, 206.5)
502 | (285.3, 184.0) | (285.3, 206.5)
503 | (297.4, 184.0) | (297.4, 206.5)
504 | (309.4, 184.0) | (309.4, 206.5)
505 | (321.5, 184.0) | (321.5, 206.5)
506 | (333.6, 184.0) | (333.6, 206.5)
507 | (345.6, 184.0) | (345.6, 206.5)
508 | (357.7, 184.0) | (357.7, 206.5)
509 | (369.7, 184.0) | (369.7, 206.5)
510 | (369.7, 195.0) | (369.7, 217.5)
511 | (357.7, 195.0) | (357.7, 217.5)
512 | (345.6, 195.0) | (345.6, 217.5)
513 | (333.6, 195.0) | (333.6, 217.5)
514 | (321.5, 195.0) | (321.5, 217.5)
515 | (309.4, 195.0) | (309.4, 217.5)
516 | (297.4, 195.0) | (297.4, 217.5)
517 | (285.3, 195.0) | (285.3, 217.5)
518 | (273.3, 195.0) | (273.3, 217.5)
519 | (261.2, 195.0) | (261.2, 217.5)
520 | (249.1, 195.0) | (249.1, 217.5)
521 | (237.1, 195.0) | (237.1, 217.5)
522 | (225.0, 195.0) | (225.0, 217.5)
523 | (213.0, 195.0) | (213.0, 217.5)
524 | (200.9, 195.0) | (200.9, 217.5)
525 | (188.8, 195.0) | (188.8, 217.5)
526 | (176.8, 195.0) | (176.8, 217.5)
527 | (164.7, 195.0) | (164.7, 217.5)
528 | (152.7, 195.0) | (152.7, 217.5)
529 | (140.6, 195.0) | (140.6, 217.5)
530 | (128.5, 195.0) | (128.5, 217.5)
531 | (116.5, 195.0) | (116.5, 217.5)
532 | (104.4, 195.0) | (104.4, 217.5)
533 | (92.4, 195.0) | (92.4, 217.5)
534 | (80.3, 195.0) | (80.3, 217.5)
535 | (68.2, 195.0) | (68.2, 217.5)
536 | (56.2, 195.0) | (56.2, 217.5)
537 | (44.1, 195.0) | (44.1, 217.5)
538 | (32.1, 195.0) | (32.1, 217.5)
539 | (20.0, 195.0) | (20.0, 217.5)
540 | (20.0, 206.0) | (20.0, 228.5)
541 | (32.1, 206.0) | (32.1, 228.5)
542 | (44.1, 206.0) | (44.1, 228.5)
543 | (56.2, 206.0) | (56.2, 228.5)
544 | (68.2, 206.0) | (68.2, 228.5)
545 | (80.3, 206.0) | (80.3, 228.5)
546 | (92.4, 206.0) | (92.4, 228.5)
547 | (104.4, 206.0) | (104.4, 228.5)
548 | (116.5, 206.0) | (116.5, 228.5)
549 | (128.5, 206.0) | (128.5, 228.5)
550 | (140.6, 206.0) | (140.6, 228.5)
551 | (152.7, 206.0) | (152.7, 228.5)
552 | (164.7, 206.0) | (164.7, 228.5)
553 | (176.8, 206.0) | (176.8, 228.5)
554 | (188.8, 206.0) | (188.8, 228.5)
555 | (200.9, 206.0) | (200.9, 228.5)
556 | (213.0, 206.0) | (213.0, 228.5)
557 | (225.0, 206.0) | (225.0, 228.5)
558 | (237.1, 206.0) | (237.1, 228.5)
559 | (249.1, 206.0) | (249.1, 228.5)
560 | (261.2, 206.0) | (261.2, 228.5)
561 | (273.3, 206.0) | (273.3, 228.5)
562 | (285.3, 206.0) | (285.3, 228.5)
563 | (297.4, 206.0) | (297.4, 228.5)
564 | (309.4, 206.0) | (309.4, 228.5)
565 | (321.5, 206.0) | (321.5, 228.5)
566 | (333.6, 206.0) | (333.6, 228.5)
567 | (345.6, 206.0) | (345.6, 228.5)
568 | (357.7, 206.0) | (357.7, 228.5)
569 | (369.7, 206.0) | (369.7, 228.5)
570 | (369.7, 217.1) | (369.7, 239.6)
571 | (357.7, 217.1) | (357.7, 239.6)
572 | (345.6, 217.1) | (345.6, 239.6)
573 | (333.6, 217.1) | (333.6, 239.6)
574 | (321.5, 217.1) | (321.5, 239.6)
575 | (309.4, 217.1) | (309.4, 239.6)
576 | (297.4, 217.1) | (297.4, 239.6)
577 | (285.3, 217.1) | (285.3, 239.6)
578 | (273.3, 217.1) | (273.3, 239.6)
579 | (261.2, 217.1) | (261.2, 239.6)
580 | (249.1, 217.1) | (249.1, 239.6)
581 | (237.1, 217.1) | (237.1, 239.6)
582 | (225.0, 217.1) | (225.0, 239.6)
583 | (213.0, 217.1) | (213.0, 239.6)
584 | (200.9, 217.1) | (200.9, 239.6)
585 | (188.8, 217.1) | (188.8, 239.6)
586 | (176.8, 217.1) | (176.8, 239.6)
587 | (164.7, 217.1) | (164.7, 239.6)
588 | (152.7, 217.1) | (152.7, 239.6)
589 | (140.6, 217.1) | (140.6, 239.6)
590 | (128.5, 217.1) | (128.5, 239.6)
591 | (116.5, 217.1) | (116.5, 239.6)
592 | (104.4, 217.1) | (104.4, 239.6)
593 | (92.4, 217.1) | (92.4, 239.6)
594 | (80.3, 217.1) | (80.3, 239.6)
595 | (68.2, 217.1) | (68.2, 239.6)
596 | (56.2, 217.1) | (56.2, 239.6)
597 | (44.1, 217.1) | (44.1, 239.6)
598 | (32.1, 217.1) | (32.1, 239.6)
599 | (20.0, 217.1) | (20.0, 239.6)
600 | (20.0, 228.1) | (20.0, 250.6)
601 | (32.1, 228.1) | (32.1, 250.6)
602 | (44.1, 228.1) | (44.1, 250.6)
603 | (56.2, 228.1) | (56.2, 250.6)
604 | (68.2, 228.1) | (68.2, 250.6)
605 | (80.3, 228.1) | (80.3, 250.6)
606 | (92.4, 228.1) | (92.4, 250.6)
607 | (104.4, 228.1) | (104.4, 250.6)
608 | (116.5, 228.1) | (116.5, 250.6)
609 | (128.5, 228.1) | (128.5, 250.6)
610 | (140.6, 228.1) | (140.6, 250.6)
611 | (152.7, 228.1) | (152.7, 250.6)
612 | (164.7, 228.1) | (164.7, 250.6)
613 | (176.8, 228.1) | (176.8, 250.6)
614 | (188.8, 228.1) | (188.8, 250.6)
615 | (200.9, 228.1) | (200.9, 250.6)
616 | (213.0, 228.1) | (213.0, 250.6)
617 | (225.0, 228.1) | (225.0, 250.6)
618 | (237.1, 228.1) | (237.1, 250.6)
619 | (249.1, 228.1) | (249.1, 250.6)
620 | (261.2, 228.1) | (261.2, 250.6)
621 | (273.3, 228.1) | (273.3, 250.6)
622 | (285.3, 228.1) | (285.3, 250.6)
623 | (297.4, 228.1) | (297.4, 250.6)
624 | (309.4, 228.1) | (309.4, 250.6)
625 | (321.5, 228.1) | (321.5, 250.6)
626 | (333.6, 228.1) | (333.6, 250.6)
627 | (345.6, 228.1) | (345.6, 250.6)
628 | (357.7, 228.1) | (357.7, 250.6)
629 | (369.7, 228.1) | (369.7, 250.6)
630 | (369.7, 239.1) | (369.7, 261.6)
631 | (357.7, 239.1) | (357.7, 261.6)
632 | (345.6, 239.1) | (345.6, 261.6)
633 | (333.6, 239.1) | (333.6, 261.6)
634 | (321.5, 239.1) | (321.5, 261.6)
635 | (309.4, 239.1) | (309.4, 261.6)
636 | (297.4, 239.1) | (297.4, 261.6)
637 | (285.3, 239.1) | (285.3, 261.6)
638 | (273.3, 239.1) | (273.3, 261.6)
639 | (261.2, 239.1) | (261.2, 261.6)
640 | (249.1, 239.1) | (249.1, 261.6)
641 | (237.1, 239.1) | (237.1, 261.6)
642 | (225.0, 239.1) | (225.0, 261.6)
643 | (213.0, 239.1) | (213.0, 261.6)
644 | (200.9, 239.1) | (200.9, 261.6)
645 | (188.8, 239.1) | (188.8, 261.6)
646 | (176.8, 239.1) | (176.8, 261.6)
647 | (164.7, 239.1) | (164.7, 261.6)
648 | (152.7, 239.1) | (152.7, 261.6)
649 | (140.6, 239.1) | (140.6, 261.6)
650 | (128.5, 239.1) | (128.5, 261.6)
651 | (116.5, 239.1) | (116.5, 261.6)
652 | (104.4, 239.1) | (104.4, 261.6)
653 | (92.4, 239.1) | (92.4, 261.6)
654 | (80.3, 239.1) | (80.3, 261.6)
655 | (68.2, 239.1) | (68.2, 261.6)
656 | (56.2, 239.1) | (56.2, 261.6)
657 | (44.1, 239.1) | (44.1, 261.6)
658 | (32.1, 239.1) | (32.1, 261.6)
659 | (20.0, 239.1) | (20.0, 261.6)
660 | (20.0, 250.2) | (20.0, 272.7)
661 | (32.1, 250.2) | (32.1, 272.7)
662 | (44.1, 250.2) | (44.1, 272.7)
663 | (56.2, 250.2) | (56.2, 272.7)
664 | (68.2, 250.2) | (68.2, 272.7)
665 | (80.3, 250.2) | (80.3, 272.7)
666 | (92.4, 250.2) | (92.4, 272.7)
667 | (104.4, 250.2) | (104.4, 272.7)
668 | (116.5, 250.2) | (116.5, 272.7)
669 | (128.5, 250.2) | (128.5, 272.7)
670 | (140.6, 250.2) | (140.6, 272.7)
671 | (152.7, 250.2) | (152.7, 272.7)
672 | (164.7, 250.2) | (164.7, 272.7)
673 | (176.8, 250.2) | (176.8, 272.7)
674 | (188.8, 250.2) | (188.8, 272.7)
675 | (200.9, 250.2) | (200.9, 272.7)
676 | (213.0, 250.2) | (213.0, 272.7)
677 | (225.0, 250.2) | (225.0, 272.7)
678 | (237.1, 250.2) | (237.1, 272.7)
679 | (249.1, 250.2) | (249.1, 272.7)
680 | (261.2, 250.2) | (261.2, 272.7)
681 | (273.3, 250.2) | (273.3, 272.7)
682 | (285.3, 250.2) | (285.3, 272.7)
683 | (297.4, 250.2) | (297.4, 272.7)
684 | (309.4, 250.2) | (309.4, 272.7)
685 | (321.5, 250.2) | (321.5, 272.7)
686 | (333.6, 250.2) | (333.6, 272.7)
687 | (345.6, 250.2) | (345.6, 272.7)
688 | (357.7, 250.2) | (357.7, 272.7)
689 | (369.7, 250.2) | (369.7, 272.7)
690 | (369.7, 261.2) | (369.7, 283.7)
691 | (357.7, 261.2) | (357.7, 283.7)
692 | (345.6, 261.2) | (345.6, 283.7)
693 | (333.6, 261.2) | (333.6, 283.7)
694 | (321.5, 261.2) | (321.5, 283.7)
695 | (309.4, 261.2) | (309.4, 283.7)
696 | (297.4, 261.2) | (297.4, 283.7)
697 | (285.3, 261.2) | (285.3, 283.7)
698 | (273.3, 261.2) | (273.3, 283.7)
699 | (261.2, 261.2) | (261.2, 283.7)
700 | (249.1, 261.2) | (249.1, 283.7)
701 | (237.1, 261.2) | (237.1, 283.7)
702 | (225.0, 261.2) | (225.0, 283.7)
703 | (213.0, 261.2) | (213.0, 283.7)
704 | (200.9, 261.2) | (200.9, 283.7)
705 | (188.8, 261.2) | (188.8, 283.7)
706 | (176.8, 261.2) | (176.8, 283.7)
707 | (164.7, 261.2) | (164.7, 283.7)
708 | (152.7, 261.2) | (152.7, 283.7)
709 | (140.6, 261.2) | (140.6, 283.7)
710 | (128.5, 261.2) | (128.5, 283.7)
711 | (116.5, 261.2) | (116.5, 283.7)
712 | (104.4, 261.2) | (104.4, 283.7)
713 | (92.4, 261.2) | (92.4, 283.7)
714 | (80.3, 261.2) | (80.3, 283.7)
715 | (68.2, 261.2) | (68.2, 283.7)
716 | (56.2, 261.2) | (56.2, 283.7)
717 | (44.1, 261.2) | (44.1, 283.7)
718 | (32.1, 261.2) | (32.1, 283.7)
719 | (20.0, 261.2) | (20.0, 283.7)
720 | (20.0, 272.2) | (20.0, 294.7)
721 | (32.1, 272.2) | (32.1, 294.7)
722 | (44.1, 272.2) | (44.1, 294.7)
723 | (56.2, 272.2) | (56.2, 294.7)
724 | (68.2, 272.2) | (68.2, 294.7)
725 | (80.3, 272.2) | (80.3, 294.7)
726 | (92.4, 272.2) | (92.4, 294.7)
727 | (104.4, 272.2) | (104.4, 294.7)
728 | (116.5, 272.2) | (116.5, 294.7)
729 | (128.5, 272.2) | (128.5, 294.7)
730 | (140.6, 272.2) | (140.6, 294.7)
731 | (152.7, 272.2) | (152.7, 294.7)
732 | (164.7, 272.2) | (164.7, 294.7)
733 | (176.8, 272.2) | (176.8, 294.7)
734 | (188.8, 272.2) | (188.8, 294.7)
735 | (200.9, 272.2) | (200.9, 294.7)
736 | (213.0, 272.2) | (213.0, 294.7)
737 | (225.0, 272.2) | (225.0, 294.7)
738 | (237.1, 272.2) | (237.1, 294.7)
739 | (249.1, 272.2) | (249.1, 294.7)
740 | (261.2, 272.2) | (261.2, 294.7)
741 | (273.3, 272.2) | (273.3, 294.7)
742 | (285.3, 272.2) | (285.3, 294.7)
743 | (297.4, 272.2) | (297.4, 294.7)
744 | (309.4, 272.2) | (309.4, 294.7)
745 | (321.5, 272.2) | (321.5, 294.7)
746 | (333.6, 272.2) | (333.6, 294.7)
747 | (345.6, 272.2) | (345.6, 294.7)
748 | (357.7, 272.2) | (357.7, 294.7)
749 | (369.7, 272.2) | (369.7, 294.7)
750 | (369.7, 283.2) | (369.7, 305.7)
751 | (357.7, 283.2) | (357.7, 305.7)
752 | (345.6, 283.2) | (345.6, 305.7)
753 | (333.6, 283.2) | (333.6, 305.7)
754 | (321.5, 283.2) | (321.5, 305.7)
755 | (309.4, 283.2) | (309.4, 305.7)
756 | (297.4, 283.2) | (297.4, 305.7)
757 | (285.3, 283.2) | (285.3, 305.7)
758 | (273.3, 283.2) | (273.3, 305.7)
759 | (261.2, 283.2) | (261.2, 305.7)
760 | (249.1, 283.2) | (249.1, 305.7)
761 | (237.1, 283.2) | (237.1, 305.7)
762 | (225.0, 283.2) | (225.0, 305.7)
763 | (213.0, 283.2) | (213.0, 305.7)
764 | (200.9, 283.2) | (200.9, 305.7)
765 | (188.8, 283.2) | (188.8, 305.7)
766 | (176.8, 283.2) | (176.8, 305.7)
767 | (164.7, 283.2) | (164.7, 305.7)
768 | (152.7, 283.2) | (152.7, 305.7)
769 | (140.6, 283.2) | (140.6, 305.7)
770 | (128.5, 283.2) | (128.5, 305.7)
771 | (116.5, 283.2) | (116.5, 305.7)
772 | (104.4, 283.2) | (104.4, 305.7)
773 | (92.4, 283.2) | (92.4, 305.7)
774 | (80.3, 283.2) | (80.3, 305.7)
775 | (68.2, 283.2) | (68.2, 305.7)
776 | (56.2, 283.2) | (56.2, 305.7)
777 | (44.1, 283.2) | (44.1, 305.7)
778 | (32.1, 283.2) | (32.1, 305.7)
779 | (20.0, 283.2) | (20.0, 305.7)
780 | (20.0, 294.3) | (20.0, 316.8)
781 | (32.1, 294.3) | (32.1, 316.8)
782 | (44.1, 294.3) | (44.1, 316.8)
783 | (56.2, 294.3) | (56.2, 316.8)
784 | (68.2, 294.3) | (68.2, 316.8)
785 | (80.3, 294.3) | (80.3, 316.8)
786 | (92.4, 294.3) | (92.4, 316.8)
787 | (104.4, 294.3) | (104.4, 316.8)
788 | (116.5, 294.3) | (116.5, 316.8)
789 | (128.5, 294.3) | (128.5, 316.8)
790 | (140.6, 294.3) | (140.6, 316.8)
791 | (152.7, 294.3) | (152.7, 316.8)
792 | (164.7, 294.3) | (164.7, 316.8)
793 | (176.8, 294.3) | (176.8, 316.8)
794 | (188.8, 294.3) | (188.8, 316.8)
795 | (200.9, 294.3) | (200.9, 316.8)
796 | (213.0, 294.3) | (213.0, 316.8)
797 | (225.0, 294.3) | (225.0, 316.8)
798 | (237.1, 294.3) | (237.1, 316.8)
799 | (249.1, 294.3) | (249.1, 316.8)
800 | (261.2, 294.3) | (261.2, 316.8)
801 | (273.3, 294.3) | (273.3, 316.8)
802 | (285.3, 294.3) | (285.3, 316.8)
803 | (297.4, 294.3) | (297.4, 316.8)
804 | (309.4, 294.3) | (309.4, 316.8)
805 | (321.5, 294.3) | (321.5, 316.8)
806 | (333.6, 294.3) | (333.6, 316.8)
807 | (345.6, 294.3) | (345.6, 316.8)
808 | (357.7, 294.3) | (357.7, 316.8)
809 | (369.7, 294.3) | (369.7, 316.8)
810 | (369.7, 305.3) | (369.7, 327.8)
811 | (357.7, 305.3) | (357.7, 327.8)
812 | (345.6, 305.3) | (345.6, 327.8)
813 | (333.6, 305.3) | (333.6, 327.8)
814 | (321.5, 305.3) | (321.5, 327.8)
815 | (309.4, 305.3) | (309.4, 327.8)
816 | (297.4, 305.3) | (297.4, 327.8)
817 | (285.3, 305.3) | (285.3, 327.8)
818 | (273.3, 305.3) | (273.3, 327.8)
819 | (261.2, 305.3) | (261.2, 327.8)
820 | (249.1, 305.3) | (249.1, 327.8)
821 | (237.1, 305.3) | (237.1, 327.8)
822 | (225.0, 305.3) | (225.0, 327.8)
823 | (213.0, 305.3) | (213.0, 327.8)
824 | (200.9, 305.3) | (200.9, 327.8)
825 | (188.8, 305.3) | (188.8, 327.8)
826 | (176.8, 305.3) | (176.8, 327.8)
827 | (164.7, 305.3) | (164.7, 327.8)
828 | (152.7, 305.3) | (152.7, 327.8)
829 | (140.6, 305.3) | (140.6, 327.8)
830 | (128.5, 305.3) | (128.5, 327.8)
831 | (116.5, 305.3) | (116.5, 327.8)
832 | (104.4, 305.3) | (104.4, 327.8)
833 | (92.4, 305.3) | (92.4, 327.8)
834 | (80.3, 305.3) | (80.3, 327.8)
835 | (68.2, 305.3) | (68.2, 327.8)
836 | (56.2, 305.3) | (56.2, 327.8)
837 | (44.1, 305.3) | (44.1, 327.8)
838 | (32.1, 305.3) | (32.1, 327.8)
839 | (20.0, 305.3) | (20.0, 327.8)
840 | (20.0, 316.3) | (20.0, 338.8)
841 | (32.1, 316.3) | (32.1, 338.8)
842 | (44.1, 316.3) | (44.1, 338.8)
843 | (56.2, 316.3) | (56.2, 338.8)
844 | (68.2, 316.3) | (68.2, 338.8)
845 | (80.3, 316.3) | (80.3, 338.8)
846 | (92.4, 316.3) | (92.4, 338.8)
847 | (104.4, 316.3) | (104.4, 338.8)
848 | (116.5, 316.3) | (116.5, 338.8)
849 | (128.5, 316.3) | (128.5, 338.8)
850 | (140.6, 316.3) | (140.6, 338.8)
851 | (152.7, 316.3) | (152.7, 338.8)
852 | (164.7, 316.3) | (164.7, 338.8)
853 | (176.8, 316.3) | (176.8, 338.8)
854 | (188.8, 316.3) | (188.8, 338.8)
855 | (200.9, 316.3) | (200.9, 338.8)
856 | (213.0, 316.3) | (213.0, 338.8)
857 | (225.0, 316.3) | (225.0, 338.8)
858 | (237.1, 316.3) | (237.1, 338.8)
859 | (249.1, 316.3) | (249.1, 338.8)
860 | (261.2, 316.3) | (261.2, 338.8)
861 | (273.3, 316.3) | (273.3, 338.8)
862 | (285.3, 316.3) | (285.3, 338.8)
863 | (297.4, 316.3) | (297.4, 338.8)
864 | (309.4, 316.3) | (309.4, 338.8)
865 | (321.5, 316.3) | (321.5, 338.8)
866 | (333.6, 316.3) | (333.6, 338.8)
867 | (345.6, 316.3) | (345.6, 338.8)
868 | (357.7, 316.3) | (357.7, 338.8)
869 | (369.7, 316.3) | (369.7, 338.8)
870 | (369.7, 327.4) | (369.7, 349.9)
871 | (357.7, 327.4) | (357.7, 349.9)
872 | (345.6, 327.4) | (345.6, 349.9)
873 | (333.6, 327.4) | (333.6, 349.9)
874 | (321.5, 327.4) | (321.5, 349.9)
875 | (309.4, 327.4) | (309.4, 349.9)
876 | (297.4, 327.4) | (297.4, 349.9)
877 | (285.3, 327.4) | (285.3, 349.9)
878 | (273.3, 327.4) | (273.3, 349.9)
879 | (261.2, 327.4) | (261.2, 349.9)
880 | (249.1, 327.4) | (249.1, 349.9)
881 | (237.1, 327.4) | (237.1, 349.9)
882 | (225.0, 327.4) | (225.0, 349.9)
883 | (213.0, 327.4) | (213.0, 349.9)
884 | (200.9, 327.4) | (200.9, 349.9)
885 | (188.8, 327.4) | (188.8, 349.9)
886 | (176.8, 327.4) | (176.8, 349.9)
887 | (164.7, 327.4) | (164.7, 349.9)
888 | (152.7, 327.4) | (152.7, 349.9)
889 | (140.6, 327.4) | (140.6, 349.9)
890 | (128.5, 327.4) | (128.5, 349.9)
891 | (116.5, 327.4) | (116.5, 349.9)
892 | (104.4, 327.4) | (104.4, 349.9)
893 | (92.4, 327.4) | (92.4, 349.9)
894 | (80.3, 327.4) | (80.3, 349.9)
895 | (68.2, 327.4) | (68.2, 349.9)
896 | (56.2, 327.4) | (56.2, 349.9)
897 | (44.1, 327.4) | (44.1, 349.9)
898 | (32.1, 327.4) | (32.1, 349.9)
899 | (20.0, 327.4) | (20.0, 349.9)
TMC stepper_x1 failed to init: Unable to read tmc uart 'stepper_x1' register IFCNT
beacon: loaded fnorm=5111559.47 temp=21.51 amfg=1.184 from nvm
beacon: built tempco model version 1 {'amfg': 1.183689117550049, 'tcc': -9.417202883884712e-06, 'tcfl': -0.0006024249007606642, 'tctl': 0.0018233478436765383, 'fmin': 5111559.4655275345, 'fmin_temp': 21.506994247436523}
Enabling Beacon accelerometer
Selected Beacon accelerometer scale 16g
Sending MCU 'beacon' printer configuration...
Configured MCU 'beacon' (0 moves)
Unable to obtain tmc stepper_x1 phase
Starting heater checks for extruder
Stats 33.6: gcodein=0 mcu: mcu_awake=0.004 mcu_task_avg=0.000007 mcu_task_stddev=0.000008 bytes_write=3650 bytes_read=7558 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=179999890 rpi: mcu_awake=0.004 mcu_task_avg=0.000027 mcu_task_stddev=0.000015 bytes_write=846 bytes_read=4734 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=49999609 adj=50002502 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1443 bytes_read=4994 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=63998032 adj=63997084 Octopus_V1.1_F446: temp=0.0 EBB42_v1.2_T0: temp=0.0 raspberry_pi: temp=35.5 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=361 bytes_read=2078 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=32000289 adj=31998797 coil_temp=21.7 refs=0 mcu_temp=20.72 supply_voltage=2.978 sysload=0.58 cputime=6.732 memavail=3404208 print_time=41.016 buffer_time=0.248 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000
webhooks: registering remote method 'shutdown_machine' for connection id: 4104845008
webhooks: registering remote method 'reboot_machine' for connection id: 4104845008
webhooks: registering remote method 'pause_job_queue' for connection id: 4104845008
webhooks: registering remote method 'start_job_queue' for connection id: 4104845008
Stats 34.6: gcodein=0 mcu: mcu_awake=0.004 mcu_task_avg=0.000007 mcu_task_stddev=0.000008 bytes_write=3656 bytes_read=7632 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=180000433 rpi: mcu_awake=0.004 mcu_task_avg=0.000027 mcu_task_stddev=0.000015 bytes_write=852 bytes_read=4750 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=50001942 adj=49997833 toolboard_t0: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1449 bytes_read=5094 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=63998806 adj=63998524 Octopus_V1.1_F446: temp=21.8 EBB42_v1.2_T0: temp=25.6 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=367 bytes_read=2434 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=31999855 adj=32001024 coil_temp=21.7 refs=0 mcu_temp=20.75 supply_voltage=2.978 sysload=0.58 cputime=6.806 memavail=3400032 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 40.0: gcodein=0 mcu: mcu_awake=0.004 mcu_task_avg=0.000007 mcu_task_stddev=0.000004 bytes_write=3668 bytes_read=8201 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=180000415 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=50000140 adj=50002343 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1461 bytes_read=5645 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=63999147 adj=63999392 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=25.7 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=379 bytes_read=4302 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=31999677 adj=32000004 coil_temp=21.7 refs=0 mcu_temp=20.87 supply_voltage=2.978 sysload=0.69 cputime=6.894 memavail=3389064 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 41.0: gcodein=0 mcu: mcu_awake=0.004 mcu_task_avg=0.000007 mcu_task_stddev=0.000004 bytes_write=3674 bytes_read=8324 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=180000179 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=49999981 adj=49995951 toolboard_t0: mcu_awake=0.013 mcu_task_avg=0.000022 mcu_task_stddev=0.000027 bytes_write=1467 bytes_read=5745 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=63999080 adj=63999462 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=25.6 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=385 bytes_read=4658 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=31999625 adj=31999192 coil_temp=21.7 refs=0 mcu_temp=20.89 supply_voltage=2.978 sysload=0.72 cputime=6.939 memavail=3391772 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 42.0: gcodein=0 mcu: mcu_awake=0.004 mcu_task_avg=0.000007 mcu_task_stddev=0.000004 bytes_write=3680 bytes_read=8425 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=180000131 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=50000187 adj=49996653 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1473 bytes_read=5873 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=63999078 adj=63999423 Octopus_V1.1_F446: temp=22.0 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=391 bytes_read=5014 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=31999625 adj=31999310 coil_temp=21.8 refs=0 mcu_temp=20.92 supply_voltage=2.978 sysload=0.72 cputime=6.963 memavail=3391772 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 43.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3686 bytes_read=8542 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=180000321 rpi: mcu_awake=0.001 mcu_task_avg=0.000010 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=50001286 adj=49998286 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1479 bytes_read=5987 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=63999129 adj=63999380 Octopus_V1.1_F446: temp=22.4 EBB42_v1.2_T0: temp=25.5 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=397 bytes_read=5370 bytes_retransmit=0 bytes_invalid=0 send_seq=66 receive_seq=66 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999662 adj=31999414 coil_temp=21.8 refs=0 mcu_temp=20.94 supply_voltage=2.978 sysload=0.72 cputime=7.001 memavail=3391772 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 44.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3692 bytes_read=8674 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=180000448 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000016 bytes_write=888 bytes_read=4872 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=50000870 adj=50002855 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1485 bytes_read=6087 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=63999125 adj=63999211 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=403 bytes_read=5726 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=31999655 adj=31999456 coil_temp=21.8 refs=0 mcu_temp=20.96 supply_voltage=2.978 sysload=0.72 cputime=7.033 memavail=3390180 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 45.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3698 bytes_read=8777 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=180000399 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000016 bytes_write=894 bytes_read=4888 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=50000627 adj=50000562 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1491 bytes_read=6201 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=63999122 adj=63999130 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=409 bytes_read=6082 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=31999696 adj=31999373 coil_temp=21.8 refs=0 mcu_temp=21.00 supply_voltage=2.978 sysload=0.72 cputime=7.064 memavail=3389552 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 46.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3704 bytes_read=8880 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=180000315 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000016 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=50000444 adj=49999609 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000014 mcu_task_stddev=0.000009 bytes_write=1497 bytes_read=6315 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=63999122 adj=63999151 Octopus_V1.1_F446: temp=22.4 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=415 bytes_read=6438 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=31999681 adj=31999625 coil_temp=21.8 refs=0 mcu_temp=21.02 supply_voltage=2.978 sysload=0.74 cputime=7.088 memavail=3389828 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 47.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3710 bytes_read=9012 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=180000296 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000016 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=50000294 adj=49999108 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1503 bytes_read=6429 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=63999123 adj=63999252 Octopus_V1.1_F446: temp=22.4 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=421 bytes_read=6794 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=31999682 adj=31999635 coil_temp=21.8 refs=0 mcu_temp=21.05 supply_voltage=2.978 sysload=0.74 cputime=7.112 memavail=3389828 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 48.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3716 bytes_read=9115 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=180000256 rpi: mcu_awake=0.001 mcu_task_avg=0.000012 mcu_task_stddev=0.000016 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=50000182 adj=49998724 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1509 bytes_read=6557 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=63999127 adj=63999226 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=427 bytes_read=7150 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=31999678 adj=31999651 coil_temp=21.8 refs=0 mcu_temp=21.07 supply_voltage=2.978 sysload=0.74 cputime=7.136 memavail=3389828 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 49.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3722 bytes_read=9232 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=180000266 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000009 bytes_write=918 bytes_read=4965 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=50000173 adj=49998592 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1515 bytes_read=6657 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=63999150 adj=63999362 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=433 bytes_read=7506 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=31999684 adj=31999663 coil_temp=21.8 refs=0 mcu_temp=21.09 supply_voltage=2.978 sysload=0.74 cputime=7.179 memavail=3389828 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 50.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3728 bytes_read=9364 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=180000272 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000009 bytes_write=924 bytes_read=4981 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=50000137 adj=49998912 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1521 bytes_read=6757 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=63999173 adj=63999383 Octopus_V1.1_F446: temp=22.4 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=439 bytes_read=7862 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=31999684 adj=31999675 coil_temp=21.8 refs=0 mcu_temp=21.11 supply_voltage=2.978 sysload=0.74 cputime=7.226 memavail=3389828 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 51.0: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3734 bytes_read=9467 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=180000276 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=50000082 adj=49999009 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1527 bytes_read=6885 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=63999271 adj=63999405 Octopus_V1.1_F446: temp=22.2 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.1 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=445 bytes_read=8218 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=31999679 adj=31999661 coil_temp=21.8 refs=0 mcu_temp=21.13 supply_voltage=2.978 sysload=0.68 cputime=7.265 memavail=3389028 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 52.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3740 bytes_read=9570 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=180000273 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=50000052 adj=49998954 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1533 bytes_read=6999 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=63999258 adj=63999851 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=451 bytes_read=8574 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=31999678 adj=31999627 coil_temp=21.8 refs=0 mcu_temp=21.17 supply_voltage=2.978 sysload=0.68 cputime=7.292 memavail=3387084 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 53.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3746 bytes_read=9702 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=180000269 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 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=50000012 adj=49999045 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1539 bytes_read=7099 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=63999324 adj=63999615 Octopus_V1.1_F446: temp=22.3 EBB42_v1.2_T0: temp=25.8 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=457 bytes_read=8930 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=31999681 adj=31999624 coil_temp=21.8 refs=0 mcu_temp=21.19 supply_voltage=2.978 sysload=0.68 cputime=7.315 memavail=3387084 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 54.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3752 bytes_read=9819 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=180000247 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=948 bytes_read=5058 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=49999978 adj=49999048 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1545 bytes_read=7227 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=63999370 adj=63999896 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=463 bytes_read=9286 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=31999682 adj=31999644 coil_temp=21.8 refs=0 mcu_temp=21.22 supply_voltage=2.978 sysload=0.68 cputime=7.339 memavail=3387084 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 55.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3758 bytes_read=9922 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=180000226 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 bytes_write=954 bytes_read=5074 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=49999951 adj=49999101 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1551 bytes_read=7327 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=63999407 adj=64000059 Octopus_V1.1_F446: temp=22.4 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=469 bytes_read=9642 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=31999682 adj=31999671 coil_temp=21.8 refs=0 mcu_temp=21.24 supply_voltage=2.978 sysload=0.68 cputime=7.362 memavail=3387084 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 56.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3764 bytes_read=10054 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=180000328 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 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=49999956 adj=49999170 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1557 bytes_read=7427 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=63999389 adj=64000140 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=475 bytes_read=9998 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=31999687 adj=31999688 coil_temp=21.8 refs=0 mcu_temp=21.27 supply_voltage=2.978 sysload=0.63 cputime=7.398 memavail=3386868 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 57.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3770 bytes_read=10157 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=180000347 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 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=50000135 adj=49999194 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1563 bytes_read=7569 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=63999371 adj=63999579 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=481 bytes_read=10354 bytes_retransmit=0 bytes_invalid=0 send_seq=80 receive_seq=80 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999688 adj=31999593 coil_temp=21.8 refs=0 mcu_temp=21.30 supply_voltage=2.978 sysload=0.63 cputime=7.443 memavail=3383368 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 58.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3776 bytes_read=10260 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=180000327 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000015 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=50000096 adj=50000531 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1569 bytes_read=7662 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=63999352 adj=63999338 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=487 bytes_read=10710 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=31999687 adj=31999584 coil_temp=21.8 refs=0 mcu_temp=21.32 supply_voltage=2.978 sysload=0.63 cputime=7.472 memavail=3384384 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 59.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3782 bytes_read=10406 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=180000302 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=978 bytes_read=5151 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=50000059 adj=50000172 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1575 bytes_read=7755 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=63999334 adj=63999234 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=493 bytes_read=11066 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=31999687 adj=31999610 coil_temp=21.8 refs=0 mcu_temp=21.35 supply_voltage=2.978 sysload=0.63 cputime=7.497 memavail=3384644 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 60.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3788 bytes_read=10509 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=180000278 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 bytes_write=984 bytes_read=5167 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=50000029 adj=49999924 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1581 bytes_read=7874 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=63999363 adj=63999174 Octopus_V1.1_F446: temp=22.6 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.6 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=499 bytes_read=11422 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=31999689 adj=31999650 coil_temp=21.9 refs=0 mcu_temp=21.38 supply_voltage=2.978 sysload=0.63 cputime=7.520 memavail=3384644 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 61.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3794 bytes_read=10612 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=180000267 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=50000019 adj=49999765 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1587 bytes_read=7967 bytes_retransmit=0 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999344 adj=63999456 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=34.6 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=505 bytes_read=11778 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=31999700 adj=31999691 coil_temp=21.9 refs=0 mcu_temp=21.40 supply_voltage=2.978 sysload=0.58 cputime=7.547 memavail=3389740 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 62.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3800 bytes_read=10744 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=180000254 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=49999996 adj=49999760 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1593 bytes_read=8079 bytes_retransmit=0 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999328 adj=63999306 Octopus_V1.1_F446: temp=22.5 EBB42_v1.2_T0: temp=25.9 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=511 bytes_read=12134 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=31999701 adj=31999770 coil_temp=21.9 refs=0 mcu_temp=21.41 supply_voltage=2.978 sysload=0.58 cputime=7.604 memavail=3389740 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 63.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3806 bytes_read=10847 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=180000325 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000016 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=50000002 adj=49999776 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1599 bytes_read=8207 bytes_retransmit=0 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999323 adj=63999207 Octopus_V1.1_F446: temp=22.6 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=517 bytes_read=12490 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=31999703 adj=31999763 coil_temp=21.9 refs=0 mcu_temp=21.43 supply_voltage=2.978 sysload=0.58 cputime=7.653 memavail=3387724 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 64.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3812 bytes_read=10976 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=180000318 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1008 bytes_read=5244 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=49999992 adj=49999699 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1605 bytes_read=8307 bytes_retransmit=0 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999311 adj=63998979 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=523 bytes_read=12846 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=31999703 adj=31999656 coil_temp=21.9 refs=0 mcu_temp=21.45 supply_voltage=2.978 sysload=0.58 cputime=7.685 memavail=3385968 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 65.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3818 bytes_read=11086 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=180000303 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 bytes_write=1014 bytes_read=5260 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=49999977 adj=49999690 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1611 bytes_read=8407 bytes_retransmit=0 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999307 adj=63998957 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=529 bytes_read=13202 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=31999704 adj=31999665 coil_temp=21.9 refs=0 mcu_temp=21.47 supply_voltage=2.978 sysload=0.58 cputime=7.709 memavail=3386496 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 66.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3824 bytes_read=11188 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=180000295 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=49999989 adj=49999654 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1617 bytes_read=8535 bytes_retransmit=0 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999298 adj=63999030 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=535 bytes_read=13558 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=31999705 adj=31999688 coil_temp=21.9 refs=0 mcu_temp=21.47 supply_voltage=2.978 sysload=0.53 cputime=7.732 memavail=3386500 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 67.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3830 bytes_read=11305 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=180000289 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=50000027 adj=49999835 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1623 bytes_read=8649 bytes_retransmit=0 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999290 adj=63999026 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=541 bytes_read=13914 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=31999704 adj=31999698 coil_temp=21.9 refs=0 mcu_temp=21.48 supply_voltage=2.978 sysload=0.53 cputime=7.756 memavail=3390140 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 68.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3836 bytes_read=11423 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=180000278 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000014 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=50000006 adj=50000182 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1629 bytes_read=8749 bytes_retransmit=0 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999283 adj=63999018 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=547 bytes_read=14270 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=31999703 adj=31999686 coil_temp=21.9 refs=0 mcu_temp=21.50 supply_voltage=2.978 sysload=0.53 cputime=7.780 memavail=3389888 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 69.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3842 bytes_read=11540 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=180000284 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=1038 bytes_read=5337 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=50000005 adj=49999978 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1635 bytes_read=8877 bytes_retransmit=0 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999284 adj=63999039 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=553 bytes_read=14626 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=31999708 adj=31999690 coil_temp=21.9 refs=0 mcu_temp=21.51 supply_voltage=2.978 sysload=0.53 cputime=7.831 memavail=3389888 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 70.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3848 bytes_read=11657 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=180000283 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 bytes_write=1044 bytes_read=5353 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=50000061 adj=49999936 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1641 bytes_read=8977 bytes_retransmit=0 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999292 adj=63999063 Octopus_V1.1_F446: temp=22.6 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=559 bytes_read=14982 bytes_retransmit=0 bytes_invalid=0 send_seq=93 receive_seq=93 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999709 adj=31999712 coil_temp=21.9 refs=0 mcu_temp=21.52 supply_voltage=2.978 sysload=0.53 cputime=7.868 memavail=3386876 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 71.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3854 bytes_read=11775 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=180000271 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 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=50000036 adj=50000433 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1647 bytes_read=9077 bytes_retransmit=0 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999295 adj=63999168 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=565 bytes_read=15338 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=31999709 adj=31999712 coil_temp=21.9 refs=0 mcu_temp=21.53 supply_voltage=2.978 sysload=0.65 cputime=7.895 memavail=3386692 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 72.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3860 bytes_read=11878 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=180000263 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 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=50000008 adj=50000125 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1653 bytes_read=9219 bytes_retransmit=0 bytes_invalid=0 send_seq=188 receive_seq=188 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999296 adj=63999237 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.0 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=571 bytes_read=15694 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=31999709 adj=31999713 coil_temp=21.9 refs=0 mcu_temp=21.56 supply_voltage=2.978 sysload=0.65 cputime=7.918 memavail=3386692 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 73.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3866 bytes_read=11995 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=180000252 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000016 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=49999978 adj=49999849 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1659 bytes_read=9319 bytes_retransmit=0 bytes_invalid=0 send_seq=189 receive_seq=189 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999290 adj=63999262 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=35.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=577 bytes_read=16050 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=31999708 adj=31999714 coil_temp=21.9 refs=0 mcu_temp=21.58 supply_voltage=2.978 sysload=0.65 cputime=7.941 memavail=3386692 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 74.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3872 bytes_read=12127 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=180000247 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000010 bytes_write=1068 bytes_read=5430 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=49999955 adj=49999626 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1665 bytes_read=9419 bytes_retransmit=0 bytes_invalid=0 send_seq=190 receive_seq=190 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999286 adj=63999233 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.2 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=583 bytes_read=16406 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=31999706 adj=31999713 coil_temp=21.9 refs=0 mcu_temp=21.60 supply_voltage=2.978 sysload=0.65 cputime=7.965 memavail=3386692 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 75.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3878 bytes_read=12230 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=180000260 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000010 bytes_write=1074 bytes_read=5446 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=49999938 adj=49999485 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1671 bytes_read=9547 bytes_retransmit=0 bytes_invalid=0 send_seq=191 receive_seq=191 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999287 adj=63999203 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=589 bytes_read=16762 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=31999708 adj=31999693 coil_temp=21.9 refs=0 mcu_temp=21.60 supply_voltage=2.978 sysload=0.65 cputime=8.006 memavail=3386692 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 76.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3884 bytes_read=12347 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=180000276 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000010 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=49999962 adj=49999388 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1677 bytes_read=9647 bytes_retransmit=0 bytes_invalid=0 send_seq=192 receive_seq=192 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999286 adj=63999163 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=595 bytes_read=17118 bytes_retransmit=0 bytes_invalid=0 send_seq=99 receive_seq=99 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999712 adj=31999683 coil_temp=21.9 refs=0 mcu_temp=21.62 supply_voltage=2.978 sysload=0.60 cputime=8.045 memavail=3386068 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000
Stats 77.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3890 bytes_read=12465 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=180000277 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000010 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=49999927 adj=49999705 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1683 bytes_read=9761 bytes_retransmit=0 bytes_invalid=0 send_seq=193 receive_seq=193 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999284 adj=63999107 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.2 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=601 bytes_read=17474 bytes_retransmit=0 bytes_invalid=0 send_seq=100 receive_seq=100 retransmit_seq=0 srtt=0.001 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=31999712 adj=31999685 coil_temp=21.9 refs=0 mcu_temp=21.63 supply_voltage=2.978 sysload=0.60 cputime=8.074 memavail=3385252 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 78.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3896 bytes_read=12568 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=180000273 rpi: mcu_awake=0.001 mcu_task_avg=0.000011 mcu_task_stddev=0.000010 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=49999904 adj=49999404 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1689 bytes_read=9889 bytes_retransmit=0 bytes_invalid=0 send_seq=194 receive_seq=194 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999285 adj=63999110 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=607 bytes_read=17830 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=31999710 adj=31999677 coil_temp=21.9 refs=0 mcu_temp=21.65 supply_voltage=2.978 sysload=0.60 cputime=8.102 memavail=3399696 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 79.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3902 bytes_read=12699 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=180000278 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000019 bytes_write=1098 bytes_read=5523 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=49999873 adj=49999300 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1695 bytes_read=9989 bytes_retransmit=0 bytes_invalid=0 send_seq=195 receive_seq=195 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999285 adj=63999145 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=613 bytes_read=18186 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=31999711 adj=31999668 coil_temp=21.9 refs=0 mcu_temp=21.67 supply_voltage=2.978 sysload=0.60 cputime=8.127 memavail=3399728 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 80.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3908 bytes_read=12817 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=180000275 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000019 bytes_write=1104 bytes_read=5539 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=49999839 adj=49999098 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1701 bytes_read=10089 bytes_retransmit=0 bytes_invalid=0 send_seq=196 receive_seq=196 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999283 adj=63999145 Octopus_V1.1_F446: temp=22.7 EBB42_v1.2_T0: temp=26.1 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=619 bytes_read=18542 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=31999710 adj=31999661 coil_temp=21.9 refs=0 mcu_temp=21.69 supply_voltage=2.978 sysload=0.60 cputime=8.151 memavail=3399728 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 81.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3914 bytes_read=12920 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=180000280 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000019 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=49999809 adj=49998942 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1707 bytes_read=10217 bytes_retransmit=0 bytes_invalid=0 send_seq=197 receive_seq=197 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999284 adj=63999145 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.5 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=625 bytes_read=18898 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=31999709 adj=31999656 coil_temp=22.0 refs=0 mcu_temp=21.69 supply_voltage=2.978 sysload=0.55 cputime=8.186 memavail=3399728 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000
Stats 82.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3920 bytes_read=13052 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=180000287 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000019 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=49999788 adj=49998817 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1713 bytes_read=10331 bytes_retransmit=0 bytes_invalid=0 send_seq=198 receive_seq=198 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999288 adj=63999140 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=36.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=631 bytes_read=19254 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=31999712 adj=31999646 coil_temp=22.0 refs=0 mcu_temp=21.71 supply_voltage=2.978 sysload=0.55 cputime=8.231 memavail=3400500 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 83.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3926 bytes_read=13155 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=180000285 rpi: mcu_awake=0.001 mcu_task_avg=0.000014 mcu_task_stddev=0.000019 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=49999774 adj=49998815 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1719 bytes_read=10431 bytes_retransmit=0 bytes_invalid=0 send_seq=199 receive_seq=199 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999288 adj=63999168 Octopus_V1.1_F446: temp=22.8 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=637 bytes_read=19610 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=31999713 adj=31999659 coil_temp=22.0 refs=0 mcu_temp=21.73 supply_voltage=2.978 sysload=0.55 cputime=8.261 memavail=3402784 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 84.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3932 bytes_read=13272 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=180000279 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1128 bytes_read=5616 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=49999748 adj=49998897 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1725 bytes_read=10559 bytes_retransmit=0 bytes_invalid=0 send_seq=200 receive_seq=200 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999285 adj=63999177 Octopus_V1.1_F446: temp=23.0 EBB42_v1.2_T0: temp=26.5 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=643 bytes_read=19966 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=31999711 adj=31999673 coil_temp=22.0 refs=0 mcu_temp=21.74 supply_voltage=2.978 sysload=0.55 cputime=8.284 memavail=3402784 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.8 pwm=0.000
Stats 85.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3938 bytes_read=13404 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=180000276 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1134 bytes_read=5632 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=49999723 adj=49998836 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1731 bytes_read=10659 bytes_retransmit=0 bytes_invalid=0 send_seq=201 receive_seq=201 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999286 adj=63999182 Octopus_V1.1_F446: temp=23.0 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=36.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=649 bytes_read=20322 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=31999711 adj=31999666 coil_temp=22.0 refs=0 mcu_temp=21.76 supply_voltage=2.978 sysload=0.55 cputime=8.308 memavail=3402784 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 86.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3944 bytes_read=13507 bytes_retransmit=9 bytes_invalid=0 send_seq=351 receive_seq=351 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000271 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 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=49999697 adj=49998779 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1737 bytes_read=10759 bytes_retransmit=0 bytes_invalid=0 send_seq=202 receive_seq=202 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999292 adj=63999202 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=655 bytes_read=20678 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=31999711 adj=31999674 coil_temp=22.0 refs=0 mcu_temp=21.78 supply_voltage=2.978 sysload=0.50 cputime=8.331 memavail=3402784 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 87.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3950 bytes_read=13610 bytes_retransmit=9 bytes_invalid=0 send_seq=352 receive_seq=352 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000290 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 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=49999680 adj=49998732 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1743 bytes_read=10901 bytes_retransmit=0 bytes_invalid=0 send_seq=203 receive_seq=203 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999291 adj=63999279 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=661 bytes_read=21034 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=31999710 adj=31999679 coil_temp=22.0 refs=0 mcu_temp=21.78 supply_voltage=2.978 sysload=0.50 cputime=8.360 memavail=3406584 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 88.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000003 bytes_write=3956 bytes_read=13738 bytes_retransmit=9 bytes_invalid=0 send_seq=353 receive_seq=353 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000297 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 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=49999665 adj=49998711 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1749 bytes_read=11001 bytes_retransmit=0 bytes_invalid=0 send_seq=204 receive_seq=204 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999291 adj=63999169 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=667 bytes_read=21390 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=31999712 adj=31999623 coil_temp=22.0 refs=0 mcu_temp=21.80 supply_voltage=2.978 sysload=0.50 cputime=8.410 memavail=3406252 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 89.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3962 bytes_read=13847 bytes_retransmit=9 bytes_invalid=0 send_seq=354 receive_seq=354 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000293 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1158 bytes_read=5709 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=49999646 adj=49998743 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1755 bytes_read=11101 bytes_retransmit=0 bytes_invalid=0 send_seq=205 receive_seq=205 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999290 adj=63999156 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=673 bytes_read=21746 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=31999712 adj=31999638 coil_temp=22.0 refs=0 mcu_temp=21.82 supply_voltage=2.978 sysload=0.50 cputime=8.433 memavail=3406252 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 90.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3968 bytes_read=13949 bytes_retransmit=9 bytes_invalid=0 send_seq=355 receive_seq=355 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000288 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 bytes_write=1164 bytes_read=5725 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=49999630 adj=49998755 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1761 bytes_read=11229 bytes_retransmit=0 bytes_invalid=0 send_seq=206 receive_seq=206 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999289 adj=63999167 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=38.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=679 bytes_read=22102 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=31999712 adj=31999654 coil_temp=22.0 refs=0 mcu_temp=21.83 supply_voltage=2.978 sysload=0.50 cputime=8.456 memavail=3406252 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000
Stats 91.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3974 bytes_read=14081 bytes_retransmit=9 bytes_invalid=0 send_seq=356 receive_seq=356 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000284 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 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=49999615 adj=49998788 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1767 bytes_read=11329 bytes_retransmit=0 bytes_invalid=0 send_seq=207 receive_seq=207 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999288 adj=63999177 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=685 bytes_read=22458 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=31999713 adj=31999666 coil_temp=22.0 refs=0 mcu_temp=21.84 supply_voltage=2.978 sysload=0.46 cputime=8.480 memavail=3406252 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000
Stats 92.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3980 bytes_read=14184 bytes_retransmit=9 bytes_invalid=0 send_seq=357 receive_seq=357 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000282 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 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=49999601 adj=49998821 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1773 bytes_read=11443 bytes_retransmit=0 bytes_invalid=0 send_seq=208 receive_seq=208 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999287 adj=63999182 Octopus_V1.1_F446: temp=23.2 EBB42_v1.2_T0: temp=26.3 raspberry_pi: temp=37.5 heater_bed: target=0 temp=21.8 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=691 bytes_read=22814 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=31999713 adj=31999683 coil_temp=22.0 refs=0 mcu_temp=21.86 supply_voltage=2.978 sysload=0.46 cputime=8.504 memavail=3406252 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000
Stats 93.1: gcodein=0 mcu: mcu_awake=0.001 mcu_task_avg=0.000005 mcu_task_stddev=0.000004 bytes_write=3986 bytes_read=14287 bytes_retransmit=9 bytes_invalid=0 send_seq=358 receive_seq=358 retransmit_seq=2 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=180000280 rpi: mcu_awake=0.001 mcu_task_avg=0.000013 mcu_task_stddev=0.000015 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=49999589 adj=49998848 toolboard_t0: mcu_awake=0.002 mcu_task_avg=0.000015 mcu_task_stddev=0.000009 bytes_write=1779 bytes_read=11571 bytes_retransmit=0 bytes_invalid=0 send_seq=209 receive_seq=209 retransmit_seq=0 srtt=0.000 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=63999286 adj=63999183 Octopus_V1.1_F446: temp=22.9 EBB42_v1.2_T0: temp=26.4 raspberry_pi: temp=37.0 heater_bed: target=0 temp=21.7 pwm=0.000 beacon: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=697 bytes_read=23170 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=31999713 adj=31999679 coil_temp=22.0 refs=0 mcu_temp=21.88 supply_voltage=2.978 sysload=0.46 cputime=8.529 memavail=3405756 print_time=41.016 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.7 pwm=0.000