===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro M125] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 Configured MCU 'mcu' (1024 moves) Args: ['/home/hitman/klipper/klippy/klippy.py', '/home/hitman/printer_data/config/printer.cfg', '-I', '/home/hitman/printer_data/comms/klippy.serial', '-l', '/home/hitman/printer_data/logs/klippy.log', '-a', '/home/hitman/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-275-g8ef0f7d7' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper CPU: 4 core ARMv7 Processor rev 4 (v7l) Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' webhooks client 1966154032: {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} =============== Log rollover at Mon Sep 25 17:20:21 2023 =============== Stats 41.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1228 bytes_read=6591 bytes_retransmit=9 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001193 raspberry_pi: temp=35.9 mcu_temp: temp=27.0 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.65 cputime=3.939 memavail=684176 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 42.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1234 bytes_read=6742 bytes_retransmit=9 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001268 raspberry_pi: temp=35.4 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.65 cputime=3.953 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 43.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1240 bytes_read=6908 bytes_retransmit=9 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001253 raspberry_pi: temp=34.3 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.65 cputime=3.967 memavail=682188 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 44.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1246 bytes_read=7103 bytes_retransmit=9 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001246 raspberry_pi: temp=34.3 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.5 pwm=0.000 sysload=1.65 cputime=3.984 memavail=682188 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 45.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1252 bytes_read=7254 bytes_retransmit=9 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001272 raspberry_pi: temp=34.3 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.51 cputime=4.000 memavail=682188 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 46.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1258 bytes_read=7420 bytes_retransmit=9 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001268 raspberry_pi: temp=34.3 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.51 cputime=4.017 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 47.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1264 bytes_read=7601 bytes_retransmit=9 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001258 raspberry_pi: temp=34.9 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.51 cputime=4.033 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 48.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1270 bytes_read=7752 bytes_retransmit=9 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001257 raspberry_pi: temp=34.3 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.5 pwm=0.000 sysload=1.51 cputime=4.049 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 49.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1276 bytes_read=7932 bytes_retransmit=9 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001259 raspberry_pi: temp=34.3 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.51 cputime=4.067 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 50.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1282 bytes_read=8113 bytes_retransmit=9 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001264 raspberry_pi: temp=34.3 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.47 cputime=4.085 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 51.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1288 bytes_read=8264 bytes_retransmit=9 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001261 raspberry_pi: temp=33.8 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.47 cputime=4.102 memavail=681964 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 52.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1294 bytes_read=8430 bytes_retransmit=9 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001264 raspberry_pi: temp=34.3 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.47 cputime=4.118 memavail=681228 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 53.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1300 bytes_read=8611 bytes_retransmit=9 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001269 raspberry_pi: temp=33.8 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.47 cputime=4.132 memavail=681232 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 54.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1306 bytes_read=8776 bytes_retransmit=9 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001273 raspberry_pi: temp=34.3 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.47 cputime=4.149 memavail=681232 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 55.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1312 bytes_read=8942 bytes_retransmit=9 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001274 raspberry_pi: temp=34.3 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.5 pwm=0.000 sysload=1.35 cputime=4.166 memavail=681232 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 56.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1318 bytes_read=9123 bytes_retransmit=9 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001279 raspberry_pi: temp=33.8 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.5 pwm=0.000 sysload=1.35 cputime=4.184 memavail=680516 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 57.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1324 bytes_read=9274 bytes_retransmit=9 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001288 raspberry_pi: temp=34.3 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.35 cputime=4.200 memavail=680432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 58.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1330 bytes_read=9440 bytes_retransmit=9 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001292 raspberry_pi: temp=34.9 mcu_temp: temp=27.1 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.35 cputime=4.212 memavail=681016 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 59.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1336 bytes_read=9635 bytes_retransmit=9 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001290 raspberry_pi: temp=34.9 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.5 pwm=0.000 sysload=1.35 cputime=4.224 memavail=680572 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.6 pwm=0.000 Stats 60.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1342 bytes_read=9786 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001301 raspberry_pi: temp=35.4 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.25 cputime=4.254 memavail=680320 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 61.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1348 bytes_read=9952 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001326 raspberry_pi: temp=34.9 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.25 cputime=4.275 memavail=679948 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 62.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1354 bytes_read=10130 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001324 raspberry_pi: temp=34.9 mcu_temp: temp=27.2 heater_bed: target=0 temp=22.5 pwm=0.000 sysload=1.25 cputime=4.298 memavail=679520 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 63.5: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1360 bytes_read=10271 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001325 raspberry_pi: temp=34.3 mcu_temp: temp=27.3 heater_bed: target=0 temp=22.6 pwm=0.000 sysload=1.25 cputime=4.322 memavail=679520 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.5 pwm=0.000 Stats 7267.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=45256 bytes_read=1222742 bytes_retransmit=9 bytes_invalid=0 send_seq=7470 receive_seq=7470 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001418 raspberry_pi: temp=37.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.08 cputime=164.392 memavail=676388 print_time=7263.942 buffer_time=0.402 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1966154032: Disconnected Restarting printer Start printer at Mon Sep 25 19:20:48 2023 (1695662448.3 7268.8) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1966041240: New connection webhooks client 1966041240: Client info {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 7272.7: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000049 bytes_write=1196 bytes_read=4309 bytes_retransmit=0 bytes_invalid=0 send_seq=129 receive_seq=128 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=71997845 raspberry_pi: temp=37.6 mcu_temp: temp=0.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.16 cputime=166.458 memavail=676176 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1966041240 webhooks: registering remote method 'reboot_machine' for connection id: 1966041240 webhooks: registering remote method 'pause_job_queue' for connection id: 1966041240 webhooks: registering remote method 'start_job_queue' for connection id: 1966041240 webhooks: registering remote method 'set_wled_state' for connection id: 1966041240 webhooks: registering remote method 'set_wled' for connection id: 1966041240 webhooks: registering remote method 'timelapse_newframe' for connection id: 1966041240 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1966041240 webhooks: registering remote method 'timelapse_render' for connection id: 1966041240 Stats 7273.7: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000049 bytes_write=1210 bytes_read=4510 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=71999482 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.7 pwm=0.000 sysload=0.16 cputime=166.569 memavail=675940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7274.7: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000049 bytes_write=1216 bytes_read=4676 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72000178 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=166.618 memavail=675952 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7275.7: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000049 bytes_write=1222 bytes_read=4827 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72000565 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=166.642 memavail=675952 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7276.7: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000049 bytes_write=1228 bytes_read=5008 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72000752 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=166.667 memavail=675952 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7277.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1234 bytes_read=5188 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72000948 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=166.691 memavail=675728 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7278.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1240 bytes_read=5339 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001010 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=166.712 memavail=672464 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7279.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1246 bytes_read=5520 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001063 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=166.731 memavail=679748 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7280.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1252 bytes_read=5686 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001099 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=166.754 memavail=679524 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7281.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1258 bytes_read=5837 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001115 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=166.777 memavail=679300 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7282.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1264 bytes_read=6032 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001170 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=166.801 memavail=679080 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7283.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1270 bytes_read=6198 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001195 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=166.821 memavail=678604 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7284.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1276 bytes_read=6349 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001219 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=166.839 memavail=678388 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7285.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1282 bytes_read=6530 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001239 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.9 pwm=0.000 sysload=0.19 cputime=166.862 memavail=678164 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7286.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1288 bytes_read=6696 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001247 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=166.886 memavail=677940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7287.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1294 bytes_read=6847 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001261 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=166.909 memavail=677492 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7288.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1300 bytes_read=7042 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001268 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=166.933 memavail=677044 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7289.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1306 bytes_read=7208 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001285 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.17 cputime=166.958 memavail=676596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7290.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1312 bytes_read=7359 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001294 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.17 cputime=166.981 memavail=676376 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7291.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1318 bytes_read=7540 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001326 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.17 cputime=167.005 memavail=675928 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7292.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1324 bytes_read=7706 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001326 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.17 cputime=167.030 memavail=675708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7293.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1330 bytes_read=7871 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001331 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.17 cputime=167.053 memavail=675484 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7294.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1336 bytes_read=8052 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001335 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.077 memavail=675484 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7295.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1342 bytes_read=8218 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001341 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.102 memavail=675260 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7296.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1348 bytes_read=8369 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001345 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.126 memavail=675260 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7297.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1354 bytes_read=8550 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001349 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.149 memavail=675260 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7298.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1360 bytes_read=8730 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001352 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.173 memavail=675268 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7299.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1366 bytes_read=8881 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001473 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=167.195 memavail=675268 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=22.9 pwm=0.000 Stats 7300.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1372 bytes_read=9062 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001453 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=167.214 memavail=674012 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7301.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1378 bytes_read=9228 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001441 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=167.237 memavail=674012 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7302.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1384 bytes_read=9379 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=167.260 memavail=674012 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7303.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1390 bytes_read=9574 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001422 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.23 cputime=167.286 memavail=674012 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7304.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1396 bytes_read=9740 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001416 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=167.311 memavail=674012 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7305.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1402 bytes_read=9891 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001411 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=167.334 memavail=673788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7306.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1408 bytes_read=10072 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001405 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.21 cputime=167.354 memavail=673340 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7307.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1414 bytes_read=10238 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001401 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.9 pwm=0.000 sysload=0.21 cputime=167.376 memavail=673340 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7308.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1420 bytes_read=10403 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001397 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.9 pwm=0.000 sysload=0.21 cputime=167.399 memavail=673124 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7309.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1426 bytes_read=10584 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001396 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=167.422 memavail=672632 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7310.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1432 bytes_read=10750 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001405 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=167.445 memavail=672652 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7311.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1438 bytes_read=10901 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001403 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=167.468 memavail=672652 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7312.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1444 bytes_read=11082 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001402 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=167.492 memavail=672428 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7313.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1450 bytes_read=11262 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001400 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.19 cputime=167.515 memavail=672428 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7314.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1456 bytes_read=11413 bytes_retransmit=0 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001399 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.18 cputime=167.537 memavail=672428 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7315.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1462 bytes_read=11594 bytes_retransmit=0 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001399 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.18 cputime=167.562 memavail=672440 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7316.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1468 bytes_read=11760 bytes_retransmit=0 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001397 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.18 cputime=167.582 memavail=677416 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7317.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1474 bytes_read=11911 bytes_retransmit=0 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001399 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.18 cputime=167.604 memavail=677352 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7318.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1480 bytes_read=12121 bytes_retransmit=0 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001398 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.18 cputime=167.629 memavail=677352 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7319.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1486 bytes_read=12272 bytes_retransmit=0 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001420 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.9 pwm=0.000 sysload=0.16 cputime=167.652 memavail=676848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7320.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1492 bytes_read=12423 bytes_retransmit=0 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001417 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.674 memavail=676848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7321.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1498 bytes_read=12619 bytes_retransmit=0 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001413 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.699 memavail=676848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7322.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1504 bytes_read=12770 bytes_retransmit=0 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001410 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.720 memavail=676848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7323.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1510 bytes_read=12935 bytes_retransmit=0 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001419 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.743 memavail=676624 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7324.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1516 bytes_read=13131 bytes_retransmit=0 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001418 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.16 cputime=167.768 memavail=676624 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7325.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1522 bytes_read=13282 bytes_retransmit=0 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001416 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.15 cputime=167.791 memavail=676624 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 7326.8: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1528 bytes_read=13427 bytes_retransmit=0 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001416 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.8 pwm=0.000 sysload=0.15 cputime=167.816 memavail=676400 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 10041.9: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=18076 bytes_read=470427 bytes_retransmit=0 bytes_invalid=0 send_seq=2942 receive_seq=2942 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001420 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.20 cputime=228.638 memavail=680548 print_time=2774.376 buffer_time=0.105 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1966041240: Disconnected Restarting printer Start printer at Mon Sep 25 20:07:02 2023 (1695665222.7 10043.1) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1965810088: New connection webhooks client 1965810088: Client info {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 10047.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1211 bytes_read=4324 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=131 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001948 raspberry_pi: temp=39.2 mcu_temp: temp=0.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.18 cputime=230.718 memavail=679148 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1965810088 webhooks: registering remote method 'reboot_machine' for connection id: 1965810088 webhooks: registering remote method 'pause_job_queue' for connection id: 1965810088 webhooks: registering remote method 'start_job_queue' for connection id: 1965810088 webhooks: registering remote method 'set_wled_state' for connection id: 1965810088 webhooks: registering remote method 'set_wled' for connection id: 1965810088 webhooks: registering remote method 'timelapse_newframe' for connection id: 1965810088 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1965810088 webhooks: registering remote method 'timelapse_render' for connection id: 1965810088 Stats 10048.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1225 bytes_read=4525 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001495 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.18 cputime=230.829 memavail=678900 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10049.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1231 bytes_read=4691 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001447 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.18 cputime=230.883 memavail=676184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10050.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1237 bytes_read=4842 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001865 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.18 cputime=230.910 memavail=676184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10051.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1243 bytes_read=5023 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001654 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=230.935 memavail=676184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10052.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1249 bytes_read=5203 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001577 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=230.961 memavail=676184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10053.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1255 bytes_read=5354 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001559 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=230.986 memavail=676184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10054.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1261 bytes_read=5535 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001537 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.007 memavail=676184 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10055.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1267 bytes_read=5701 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001521 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.031 memavail=673928 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10056.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1273 bytes_read=5852 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001517 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.46 cputime=231.051 memavail=678356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10057.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1279 bytes_read=6047 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001495 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.46 cputime=231.075 memavail=678356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10058.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1285 bytes_read=6213 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001478 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.46 cputime=231.100 memavail=678356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10059.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1291 bytes_read=6364 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001469 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.46 cputime=231.124 memavail=678356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10060.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1297 bytes_read=6545 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001467 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.46 cputime=231.148 memavail=678356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10061.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1303 bytes_read=6711 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001464 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.43 cputime=231.173 memavail=678360 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10062.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1309 bytes_read=6862 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001512 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.43 cputime=231.195 memavail=678360 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10063.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1315 bytes_read=7057 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001479 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.43 cputime=231.213 memavail=678496 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10064.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1321 bytes_read=7223 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001468 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.43 cputime=231.236 memavail=678004 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10065.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1327 bytes_read=7374 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001546 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.43 cputime=231.259 memavail=678004 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10066.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1333 bytes_read=7555 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001530 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.39 cputime=231.282 memavail=677780 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10067.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1339 bytes_read=7721 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001511 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.39 cputime=231.306 memavail=677780 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10068.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1345 bytes_read=7886 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001500 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.39 cputime=231.329 memavail=677780 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10069.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1351 bytes_read=8067 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001494 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.39 cputime=231.354 memavail=677788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10070.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1357 bytes_read=8233 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001488 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.39 cputime=231.379 memavail=677788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10071.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1363 bytes_read=8384 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001476 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.36 cputime=231.404 memavail=677788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10072.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1369 bytes_read=8565 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001474 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.36 cputime=231.431 memavail=677788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10073.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1375 bytes_read=8745 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001473 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.36 cputime=231.454 memavail=677792 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10074.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1381 bytes_read=8896 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001462 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.36 cputime=231.474 memavail=677576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10075.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1387 bytes_read=9077 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001449 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.36 cputime=231.497 memavail=677120 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10076.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1393 bytes_read=9243 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001446 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.521 memavail=676896 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10077.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1399 bytes_read=9394 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001450 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.545 memavail=676896 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10078.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1405 bytes_read=9589 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001447 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.571 memavail=677096 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10079.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1411 bytes_read=9755 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001448 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.592 memavail=679972 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10080.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1417 bytes_read=9906 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.33 cputime=231.613 memavail=679972 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10081.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1423 bytes_read=10102 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001440 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.30 cputime=231.638 memavail=679748 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10082.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1429 bytes_read=10253 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001442 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.30 cputime=231.662 memavail=679748 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.0 pwm=0.000 Stats 10083.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1435 bytes_read=10418 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001440 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.30 cputime=231.685 memavail=679748 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10084.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1441 bytes_read=10614 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001441 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.30 cputime=231.711 memavail=679748 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10085.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1447 bytes_read=10765 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001439 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.30 cputime=231.734 memavail=678768 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10086.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1453 bytes_read=10916 bytes_retransmit=0 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.28 cputime=231.754 memavail=678768 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10087.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1459 bytes_read=11112 bytes_retransmit=0 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.28 cputime=231.779 memavail=678768 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10088.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1465 bytes_read=11277 bytes_retransmit=0 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001434 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.28 cputime=231.804 memavail=678768 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10089.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1471 bytes_read=11428 bytes_retransmit=0 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.28 cputime=231.827 memavail=678768 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10090.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1477 bytes_read=11624 bytes_retransmit=0 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=38.1 mcu_temp: temp=31.3 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.28 cputime=231.853 memavail=678772 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10091.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1483 bytes_read=11775 bytes_retransmit=0 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001430 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.26 cputime=231.876 memavail=678772 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10092.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1489 bytes_read=11926 bytes_retransmit=0 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.26 cputime=231.899 memavail=678772 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10093.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1495 bytes_read=12136 bytes_retransmit=0 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001429 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.26 cputime=231.923 memavail=678772 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10094.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1501 bytes_read=12287 bytes_retransmit=0 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.26 cputime=231.945 memavail=678756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10095.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1507 bytes_read=12438 bytes_retransmit=0 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001427 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.26 cputime=231.966 memavail=676756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10096.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1513 bytes_read=12634 bytes_retransmit=0 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001424 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.24 cputime=231.987 memavail=676756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10097.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1519 bytes_read=12785 bytes_retransmit=0 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001424 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.24 cputime=232.010 memavail=676756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10098.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1525 bytes_read=12950 bytes_retransmit=0 bytes_invalid=0 send_seq=184 receive_seq=184 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001426 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.24 cputime=232.034 memavail=676756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10099.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1531 bytes_read=13146 bytes_retransmit=0 bytes_invalid=0 send_seq=185 receive_seq=185 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.24 cputime=232.059 memavail=676756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10100.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1537 bytes_read=13297 bytes_retransmit=0 bytes_invalid=0 send_seq=186 receive_seq=186 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001426 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.24 cputime=232.082 memavail=676756 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10101.2: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1543 bytes_read=13442 bytes_retransmit=0 bytes_invalid=0 send_seq=187 receive_seq=187 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.0 pwm=0.000 sysload=0.22 cputime=232.105 memavail=676760 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10259.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=2509 bytes_read=40051 bytes_retransmit=0 bytes_invalid=0 send_seq=348 receive_seq=348 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.10 cputime=235.670 memavail=675084 print_time=217.450 buffer_time=0.246 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1965810088: Disconnected Restarting printer Start printer at Mon Sep 25 20:10:40 2023 (1695665440.2 10260.7) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1970872744: New connection webhooks client 1970872744: Client info {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 10264.6: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1191 bytes_read=4304 bytes_retransmit=9 bytes_invalid=0 send_seq=128 receive_seq=127 retransmit_seq=2 srtt=0.003 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72000190 raspberry_pi: temp=39.2 mcu_temp: temp=0.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.09 cputime=237.735 memavail=673384 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1970872744 webhooks: registering remote method 'reboot_machine' for connection id: 1970872744 webhooks: registering remote method 'pause_job_queue' for connection id: 1970872744 webhooks: registering remote method 'start_job_queue' for connection id: 1970872744 webhooks: registering remote method 'set_wled_state' for connection id: 1970872744 webhooks: registering remote method 'set_wled' for connection id: 1970872744 webhooks: registering remote method 'timelapse_newframe' for connection id: 1970872744 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1970872744 webhooks: registering remote method 'timelapse_render' for connection id: 1970872744 Stats 10265.6: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1205 bytes_read=4505 bytes_retransmit=9 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=2 srtt=0.003 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72002807 raspberry_pi: temp=38.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.09 cputime=237.846 memavail=672640 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10266.6: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1211 bytes_read=4671 bytes_retransmit=9 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001699 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=237.901 memavail=672644 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10267.6: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1217 bytes_read=4822 bytes_retransmit=9 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001446 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.17 cputime=237.925 memavail=672404 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10268.6: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000047 bytes_write=1223 bytes_read=5003 bytes_retransmit=9 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001379 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.17 cputime=237.951 memavail=672412 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10269.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1229 bytes_read=5183 bytes_retransmit=9 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001346 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=237.975 memavail=672412 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10270.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1235 bytes_read=5334 bytes_retransmit=9 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001372 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=237.998 memavail=672412 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10271.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1241 bytes_read=5515 bytes_retransmit=9 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001367 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.15 cputime=238.023 memavail=672412 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10272.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1247 bytes_read=5681 bytes_retransmit=9 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001317 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.15 cputime=238.047 memavail=672416 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10273.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1253 bytes_read=5832 bytes_retransmit=9 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001305 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.15 cputime=238.067 memavail=672168 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10274.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1259 bytes_read=6027 bytes_retransmit=9 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001359 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.15 cputime=238.092 memavail=672176 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10275.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1265 bytes_read=6193 bytes_retransmit=9 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001366 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.15 cputime=238.117 memavail=671704 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10276.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1271 bytes_read=6344 bytes_retransmit=9 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001372 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.140 memavail=671704 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10277.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1277 bytes_read=6525 bytes_retransmit=9 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001379 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.164 memavail=671704 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10278.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1283 bytes_read=6691 bytes_retransmit=9 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001386 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.188 memavail=671708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10279.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1289 bytes_read=6842 bytes_retransmit=9 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001408 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.212 memavail=671708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10280.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1295 bytes_read=7037 bytes_retransmit=9 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001398 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.236 memavail=671708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10281.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1301 bytes_read=7203 bytes_retransmit=9 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001394 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.28 cputime=238.259 memavail=671708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10282.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1307 bytes_read=7354 bytes_retransmit=9 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001393 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.28 cputime=238.282 memavail=671708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10283.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1313 bytes_read=7535 bytes_retransmit=9 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001406 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.28 cputime=238.306 memavail=671708 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10284.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1319 bytes_read=7701 bytes_retransmit=9 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001404 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.28 cputime=238.330 memavail=671716 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10285.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1325 bytes_read=7866 bytes_retransmit=9 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001404 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.28 cputime=238.353 memavail=671468 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10286.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1331 bytes_read=8047 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001404 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.26 cputime=238.377 memavail=671468 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10287.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1337 bytes_read=8213 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001402 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.26 cputime=238.400 memavail=671468 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10288.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1343 bytes_read=8364 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001399 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.26 cputime=238.423 memavail=671472 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10289.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1349 bytes_read=8545 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001404 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.26 cputime=238.447 memavail=671472 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10290.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1355 bytes_read=8725 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001396 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.26 cputime=238.466 memavail=671548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10291.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1361 bytes_read=8876 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001400 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.24 cputime=238.490 memavail=671548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10292.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1367 bytes_read=9057 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001409 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.24 cputime=238.515 memavail=671548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10293.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1373 bytes_read=9223 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001408 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.24 cputime=238.538 memavail=671548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10294.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1379 bytes_read=9374 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001408 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.24 cputime=238.561 memavail=671548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10295.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1385 bytes_read=9569 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001406 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.24 cputime=238.585 memavail=671560 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10296.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1391 bytes_read=9735 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001407 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.609 memavail=669796 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10297.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1397 bytes_read=9886 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001411 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.629 memavail=681544 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10298.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1403 bytes_read=10067 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001411 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.655 memavail=681544 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10299.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1409 bytes_read=10233 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001411 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.680 memavail=681544 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10300.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1415 bytes_read=10398 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001410 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.22 cputime=238.705 memavail=681544 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10301.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1421 bytes_read=10579 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001440 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.20 cputime=238.731 memavail=681544 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10302.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1427 bytes_read=10745 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.20 cputime=238.756 memavail=681548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10303.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1433 bytes_read=10896 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001433 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.20 cputime=238.781 memavail=681548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10304.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1439 bytes_read=11092 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.20 cputime=238.804 memavail=681548 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10305.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1445 bytes_read=11257 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001430 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.20 cputime=238.827 memavail=680588 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10306.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1451 bytes_read=11408 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001427 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.18 cputime=238.847 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10307.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1457 bytes_read=11604 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001430 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.18 cputime=238.869 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10308.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1463 bytes_read=11755 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001429 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.18 cputime=238.893 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10309.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1469 bytes_read=11906 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001426 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.18 cputime=238.918 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10310.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1475 bytes_read=12116 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001424 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.18 cputime=238.944 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10311.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1481 bytes_read=12267 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001427 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=238.969 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10312.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1487 bytes_read=12418 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.1 pwm=0.000 sysload=0.17 cputime=238.993 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10313.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1493 bytes_read=12614 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=239.019 memavail=679596 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10314.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1499 bytes_read=12765 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=239.043 memavail=679600 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.1 pwm=0.000 Stats 10315.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1505 bytes_read=12930 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.17 cputime=239.068 memavail=679356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10316.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1511 bytes_read=13126 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.16 cputime=239.093 memavail=679356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10317.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1517 bytes_read=13277 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.16 cputime=239.118 memavail=679356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10318.7: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1523 bytes_read=13422 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001424 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.2 pwm=0.000 sysload=0.16 cputime=239.143 memavail=679356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10766.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=4253 bytes_read=88720 bytes_retransmit=9 bytes_invalid=0 send_seq=638 receive_seq=638 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.12 cputime=249.154 memavail=678024 print_time=506.536 buffer_time=0.111 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1970872744: Disconnected Restarting printer Start printer at Mon Sep 25 20:19:06 2023 (1695665946.8 10767.3) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1947937160: New connection webhooks client 1947937160: Client info {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 10771.3: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000050 bytes_write=1191 bytes_read=4304 bytes_retransmit=9 bytes_invalid=0 send_seq=128 receive_seq=127 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72002009 raspberry_pi: temp=38.6 mcu_temp: temp=0.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.19 cputime=251.223 memavail=676520 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1947937160 webhooks: registering remote method 'reboot_machine' for connection id: 1947937160 webhooks: registering remote method 'pause_job_queue' for connection id: 1947937160 webhooks: registering remote method 'start_job_queue' for connection id: 1947937160 webhooks: registering remote method 'set_wled_state' for connection id: 1947937160 webhooks: registering remote method 'set_wled' for connection id: 1947937160 webhooks: registering remote method 'timelapse_newframe' for connection id: 1947937160 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1947937160 webhooks: registering remote method 'timelapse_render' for connection id: 1947937160 Stats 10772.3: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000050 bytes_write=1205 bytes_read=4520 bytes_retransmit=9 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001333 raspberry_pi: temp=38.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.18 cputime=251.341 memavail=675968 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10773.3: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000050 bytes_write=1211 bytes_read=4671 bytes_retransmit=9 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001765 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.18 cputime=251.394 memavail=675268 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10774.3: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000050 bytes_write=1217 bytes_read=4822 bytes_retransmit=9 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001611 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.18 cputime=251.419 memavail=675272 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10775.3: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000050 bytes_write=1223 bytes_read=5018 bytes_retransmit=9 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001440 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.18 cputime=251.444 memavail=675272 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10776.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1229 bytes_read=5183 bytes_retransmit=9 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001533 raspberry_pi: temp=38.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.18 cputime=251.467 memavail=675280 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10777.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1235 bytes_read=5334 bytes_retransmit=9 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.16 cputime=251.492 memavail=675056 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10778.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1241 bytes_read=5530 bytes_retransmit=9 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001729 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.16 cputime=251.512 memavail=673552 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10779.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1247 bytes_read=5681 bytes_retransmit=9 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001625 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.16 cputime=251.536 memavail=673552 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000 Stats 10780.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000019 mcu_task_stddev=0.000009 bytes_write=1253 bytes_read=5832 bytes_retransmit=9 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001498 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.16 cputime=251.552 memavail=673740 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10781.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1259 bytes_read=6042 bytes_retransmit=9 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001460 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.16 cputime=251.573 memavail=673740 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10782.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1265 bytes_read=6193 bytes_retransmit=9 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.15 cputime=251.596 memavail=673740 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10783.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1271 bytes_read=6344 bytes_retransmit=9 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001391 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.15 cputime=251.620 memavail=673740 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10784.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1277 bytes_read=6540 bytes_retransmit=9 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001379 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.15 cputime=251.645 memavail=673740 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10785.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1283 bytes_read=6691 bytes_retransmit=9 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001374 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.15 cputime=251.668 memavail=673740 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10786.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1289 bytes_read=6842 bytes_retransmit=9 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001371 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.15 cputime=251.692 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10787.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1295 bytes_read=7052 bytes_retransmit=9 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001378 raspberry_pi: temp=38.1 mcu_temp: temp=31.0 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.14 cputime=251.717 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10788.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1301 bytes_read=7203 bytes_retransmit=9 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001374 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.14 cputime=251.741 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10789.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1307 bytes_read=7354 bytes_retransmit=9 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001374 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.14 cputime=251.765 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10790.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1313 bytes_read=7550 bytes_retransmit=9 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001364 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.14 cputime=251.790 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10791.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=1319 bytes_read=7701 bytes_retransmit=9 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001362 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.14 cputime=251.813 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10792.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1325 bytes_read=7866 bytes_retransmit=9 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001362 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.13 cputime=251.838 memavail=678432 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10793.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1331 bytes_read=8062 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001354 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.13 cputime=251.857 memavail=678444 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10794.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1337 bytes_read=8213 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001347 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.13 cputime=251.874 memavail=677192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10795.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1343 bytes_read=8364 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001351 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.13 cputime=251.897 memavail=677192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10796.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1349 bytes_read=8560 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001359 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.13 cputime=251.922 memavail=677192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10797.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1355 bytes_read=8725 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001392 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.12 cputime=251.946 memavail=677192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10798.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1361 bytes_read=8876 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001396 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.12 cputime=251.970 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000 Stats 10799.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1367 bytes_read=9072 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001396 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.12 cputime=251.994 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10800.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1373 bytes_read=9223 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001418 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.12 cputime=252.017 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10801.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1379 bytes_read=9374 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001412 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.12 cputime=252.040 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10802.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1385 bytes_read=9584 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001407 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.11 cputime=252.065 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000 Stats 10803.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1391 bytes_read=9735 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001407 raspberry_pi: temp=37.0 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.11 cputime=252.089 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10804.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1397 bytes_read=9886 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001406 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.11 cputime=252.113 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10805.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1403 bytes_read=10082 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001422 raspberry_pi: temp=37.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.11 cputime=252.138 memavail=677196 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10806.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1409 bytes_read=10233 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001448 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.11 cputime=252.162 memavail=676460 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10807.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1415 bytes_read=10413 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.10 cputime=252.187 memavail=676472 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10808.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1421 bytes_read=10594 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.10 cputime=252.213 memavail=676472 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10809.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1427 bytes_read=10745 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.10 cputime=252.231 memavail=676480 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10810.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1433 bytes_read=10911 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.10 cputime=252.251 memavail=679656 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10811.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1439 bytes_read=11092 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001424 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.10 cputime=252.273 memavail=679656 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10812.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1445 bytes_read=11257 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.09 cputime=252.299 memavail=679664 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10813.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1451 bytes_read=11423 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.09 cputime=252.324 memavail=679664 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10814.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1457 bytes_read=11604 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.09 cputime=252.349 memavail=679668 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10815.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1463 bytes_read=11755 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.09 cputime=252.373 memavail=679668 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10816.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1469 bytes_read=11921 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001427 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.09 cputime=252.397 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000 Stats 10817.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1475 bytes_read=12116 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001423 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.421 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10818.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1481 bytes_read=12267 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001421 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.443 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10819.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1487 bytes_read=12433 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001418 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.467 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000 Stats 10820.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1493 bytes_read=12614 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001415 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.492 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10821.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1499 bytes_read=12765 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001434 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.516 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10822.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1505 bytes_read=12945 bytes_retransmit=9 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001429 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.541 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10823.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1511 bytes_read=13126 bytes_retransmit=9 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.566 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10824.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1517 bytes_read=13277 bytes_retransmit=9 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001425 raspberry_pi: temp=37.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.590 memavail=678940 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 10825.3: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1523 bytes_read=13436 bytes_retransmit=9 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001424 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=24.3 pwm=0.000 sysload=0.08 cputime=252.611 memavail=678948 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Starting Klippy... Args: ['/home/hitman/klipper/klippy/klippy.py', '/home/hitman/printer_data/config/printer.cfg', '-I', '/home/hitman/printer_data/comms/klippy.serial', '-l', '/home/hitman/printer_data/logs/klippy.log', '-a', '/home/hitman/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-275-g8ef0f7d7' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper CPU: 4 core ARMv7 Processor rev 4 (v7l) Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Mon Sep 25 21:18:58 2023 (1695669538.6 22.2) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) webhooks client 1965655592: New connection webhooks client 1965655592: Client info {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 27.0: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1199 bytes_read=4354 bytes_retransmit=9 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001141 raspberry_pi: temp=43.5 mcu_temp: temp=30.8 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.56 cputime=3.664 memavail=689404 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1965655592 webhooks: registering remote method 'reboot_machine' for connection id: 1965655592 webhooks: registering remote method 'pause_job_queue' for connection id: 1965655592 webhooks: registering remote method 'start_job_queue' for connection id: 1965655592 webhooks: registering remote method 'set_wled_state' for connection id: 1965655592 webhooks: registering remote method 'set_wled' for connection id: 1965655592 webhooks: registering remote method 'timelapse_newframe' for connection id: 1965655592 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1965655592 webhooks: registering remote method 'timelapse_render' for connection id: 1965655592 Stats 28.0: gcodein=0 mcu: mcu_awake=0.000 mcu_task_avg=0.000000 mcu_task_stddev=0.000000 bytes_write=1205 bytes_read=4505 bytes_retransmit=9 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001111 raspberry_pi: temp=42.9 mcu_temp: temp=30.9 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.56 cputime=3.737 memavail=685912 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 29.1: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000029 mcu_task_stddev=0.000044 bytes_write=1211 bytes_read=4701 bytes_retransmit=9 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001130 raspberry_pi: temp=44.0 mcu_temp: temp=30.9 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.56 cputime=3.756 memavail=685884 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 30.1: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000029 mcu_task_stddev=0.000044 bytes_write=1217 bytes_read=4867 bytes_retransmit=9 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001387 raspberry_pi: temp=44.0 mcu_temp: temp=30.9 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.56 cputime=3.776 memavail=682108 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 31.1: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000029 mcu_task_stddev=0.000044 bytes_write=1223 bytes_read=5018 bytes_retransmit=9 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001426 raspberry_pi: temp=44.0 mcu_temp: temp=30.9 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.67 cputime=3.789 memavail=681368 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 32.1: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000029 mcu_task_stddev=0.000044 bytes_write=1229 bytes_read=5199 bytes_retransmit=9 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001586 raspberry_pi: temp=44.0 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.67 cputime=3.804 memavail=685824 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 33.1: gcodein=0 mcu: mcu_awake=0.006 mcu_task_avg=0.000029 mcu_task_stddev=0.000044 bytes_write=1235 bytes_read=5365 bytes_retransmit=9 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001505 raspberry_pi: temp=43.5 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.67 cputime=3.819 memavail=678752 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 34.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1241 bytes_read=5530 bytes_retransmit=9 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001430 raspberry_pi: temp=42.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.67 cputime=3.850 memavail=690364 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 35.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1247 bytes_read=5711 bytes_retransmit=9 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001415 raspberry_pi: temp=42.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.67 cputime=3.870 memavail=686824 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 36.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1253 bytes_read=5877 bytes_retransmit=9 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001410 raspberry_pi: temp=42.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.62 cputime=3.887 memavail=676500 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 37.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1259 bytes_read=6028 bytes_retransmit=9 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001441 raspberry_pi: temp=42.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.62 cputime=3.906 memavail=682464 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 38.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1265 bytes_read=6209 bytes_retransmit=9 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001414 raspberry_pi: temp=41.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.62 cputime=3.924 memavail=686268 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.3 pwm=0.000 Stats 39.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1271 bytes_read=6389 bytes_retransmit=9 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001402 raspberry_pi: temp=42.4 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.62 cputime=3.945 memavail=685344 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 40.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1277 bytes_read=6540 bytes_retransmit=9 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001397 raspberry_pi: temp=41.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.62 cputime=3.965 memavail=686056 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 41.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1283 bytes_read=6721 bytes_retransmit=9 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001378 raspberry_pi: temp=41.9 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.57 cputime=3.984 memavail=682692 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 42.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1289 bytes_read=6887 bytes_retransmit=9 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=2 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001370 raspberry_pi: temp=41.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.57 cputime=4.004 memavail=684236 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 43.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1295 bytes_read=7038 bytes_retransmit=9 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001356 raspberry_pi: temp=41.9 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.57 cputime=4.023 memavail=691352 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 44.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1301 bytes_read=7233 bytes_retransmit=9 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001359 raspberry_pi: temp=40.8 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.57 cputime=4.048 memavail=691484 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 45.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1307 bytes_read=7399 bytes_retransmit=9 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001361 raspberry_pi: temp=40.8 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.57 cputime=4.074 memavail=691244 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 46.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1313 bytes_read=7550 bytes_retransmit=9 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001371 raspberry_pi: temp=40.2 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.44 cputime=4.098 memavail=690020 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 47.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1319 bytes_read=7731 bytes_retransmit=9 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001387 raspberry_pi: temp=40.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.44 cputime=4.131 memavail=690020 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 48.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1325 bytes_read=7897 bytes_retransmit=9 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001375 raspberry_pi: temp=40.8 mcu_temp: temp=31.0 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=1.44 cputime=4.150 memavail=690008 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 49.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1331 bytes_read=8048 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001385 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=1.44 cputime=4.174 memavail=690008 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 50.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1337 bytes_read=8243 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001393 raspberry_pi: temp=40.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.44 cputime=4.199 memavail=690012 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 51.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1343 bytes_read=8409 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001397 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.33 cputime=4.223 memavail=689788 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 52.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1349 bytes_read=8560 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001415 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.33 cputime=4.247 memavail=688112 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 53.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1355 bytes_read=8741 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001413 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.33 cputime=4.273 memavail=688160 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 54.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1361 bytes_read=8907 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001421 raspberry_pi: temp=39.2 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.33 cputime=4.298 memavail=688160 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 55.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1367 bytes_read=9072 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001419 raspberry_pi: temp=39.2 mcu_temp: temp=31.0 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=1.33 cputime=4.324 memavail=688168 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 56.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1373 bytes_read=9253 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001423 raspberry_pi: temp=39.2 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.22 cputime=4.349 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 57.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1379 bytes_read=9419 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001455 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.22 cputime=4.374 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 58.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1385 bytes_read=9570 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001468 raspberry_pi: temp=39.2 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.22 cputime=4.398 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 59.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1391 bytes_read=9751 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001460 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.22 cputime=4.423 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 60.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1397 bytes_read=9931 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001457 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.22 cputime=4.448 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 61.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1403 bytes_read=10082 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001454 raspberry_pi: temp=39.2 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.12 cputime=4.472 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 62.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1409 bytes_read=10263 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001455 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.12 cputime=4.496 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 63.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1415 bytes_read=10420 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001457 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=1.12 cputime=4.520 memavail=687936 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2413.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000010 bytes_write=15737 bytes_read=405922 bytes_retransmit=9 bytes_invalid=0 send_seq=2552 receive_seq=2552 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001422 raspberry_pi: temp=37.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.13 cputime=57.114 memavail=685544 print_time=2410.100 buffer_time=0.902 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1965655592: Disconnected Restarting printer Start printer at Mon Sep 25 22:24:06 2023 (1695673446.4 2415.0) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1947470456: New connection webhooks client 1947470456: Client info {'program': 'Moonraker', 'version': 'v0.8.0-139-g3d9052d'} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 2419.0: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000048 bytes_write=1191 bytes_read=4304 bytes_retransmit=0 bytes_invalid=0 send_seq=128 receive_seq=127 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72003094 raspberry_pi: temp=38.6 mcu_temp: temp=0.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.12 cputime=59.164 memavail=683296 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1947470456 webhooks: registering remote method 'reboot_machine' for connection id: 1947470456 webhooks: registering remote method 'pause_job_queue' for connection id: 1947470456 webhooks: registering remote method 'start_job_queue' for connection id: 1947470456 webhooks: registering remote method 'set_wled_state' for connection id: 1947470456 webhooks: registering remote method 'set_wled' for connection id: 1947470456 webhooks: registering remote method 'timelapse_newframe' for connection id: 1947470456 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1947470456 webhooks: registering remote method 'timelapse_render' for connection id: 1947470456 Stats 2420.0: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000048 bytes_write=1205 bytes_read=4490 bytes_retransmit=0 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001894 raspberry_pi: temp=38.6 mcu_temp: temp=31.0 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.11 cputime=59.270 memavail=683296 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2421.0: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000048 bytes_write=1211 bytes_read=4671 bytes_retransmit=0 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001677 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.11 cputime=59.321 memavail=683088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2422.0: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000048 bytes_write=1217 bytes_read=4822 bytes_retransmit=0 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001493 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.11 cputime=59.345 memavail=683088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2423.0: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000029 mcu_task_stddev=0.000048 bytes_write=1223 bytes_read=4988 bytes_retransmit=0 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001542 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.11 cputime=59.367 memavail=683088 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2424.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1229 bytes_read=5183 bytes_retransmit=0 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001513 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.11 cputime=59.392 memavail=683092 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2425.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1235 bytes_read=5334 bytes_retransmit=0 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001395 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.26 cputime=59.409 memavail=681848 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2426.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1241 bytes_read=5500 bytes_retransmit=0 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001402 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.26 cputime=59.433 memavail=681852 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2427.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1247 bytes_read=5681 bytes_retransmit=0 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001429 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.26 cputime=59.457 memavail=681852 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2428.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1253 bytes_read=5832 bytes_retransmit=0 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001564 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.26 cputime=59.481 memavail=681852 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2429.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1259 bytes_read=6012 bytes_retransmit=0 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001539 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.26 cputime=59.506 memavail=681348 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2430.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1265 bytes_read=6193 bytes_retransmit=0 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001543 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.32 cputime=59.531 memavail=681356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2431.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1271 bytes_read=6344 bytes_retransmit=0 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001523 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.32 cputime=59.556 memavail=681356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2432.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1277 bytes_read=6510 bytes_retransmit=0 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001530 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.32 cputime=59.581 memavail=681356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2433.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1283 bytes_read=6691 bytes_retransmit=0 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001501 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.32 cputime=59.607 memavail=681356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2434.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1289 bytes_read=6842 bytes_retransmit=0 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001484 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.32 cputime=59.631 memavail=681356 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2435.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1295 bytes_read=7022 bytes_retransmit=0 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001478 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.32 cputime=59.653 memavail=681364 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2436.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1301 bytes_read=7203 bytes_retransmit=0 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001476 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.38 cputime=59.677 memavail=681364 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2437.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1307 bytes_read=7354 bytes_retransmit=0 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001466 raspberry_pi: temp=38.1 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.38 cputime=59.701 memavail=681364 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2438.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1313 bytes_read=7520 bytes_retransmit=0 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001449 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.38 cputime=59.720 memavail=686220 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2439.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1319 bytes_read=7701 bytes_retransmit=0 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001433 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.38 cputime=59.740 memavail=685348 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 webhooks client 1947470456: Disconnected Stats 2440.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1325 bytes_read=7866 bytes_retransmit=0 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.38 cputime=59.755 memavail=697544 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2441.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1331 bytes_read=8032 bytes_retransmit=0 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.51 cputime=59.763 memavail=685296 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2442.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1337 bytes_read=8213 bytes_retransmit=0 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001426 raspberry_pi: temp=40.8 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.51 cputime=59.772 memavail=687084 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2443.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1343 bytes_read=8364 bytes_retransmit=0 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=0 srtt=0.004 rttvar=0.001 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001423 raspberry_pi: temp=40.8 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.51 cputime=59.778 memavail=683480 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2444.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1349 bytes_read=8545 bytes_retransmit=0 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001421 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.51 cputime=59.787 memavail=685868 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2445.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1355 bytes_read=8725 bytes_retransmit=0 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001428 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.51 cputime=59.797 memavail=685136 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2446.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1361 bytes_read=8876 bytes_retransmit=0 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001436 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.47 cputime=59.807 memavail=682888 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2447.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1367 bytes_read=9057 bytes_retransmit=0 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.47 cputime=59.817 memavail=682648 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 webhooks client 1965765152: New connection Stats 2448.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1373 bytes_read=9223 bytes_retransmit=0 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001434 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.47 cputime=59.827 memavail=682732 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 webhooks client 1965765152: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} webhooks: registering remote method 'shutdown_machine' for connection id: 1965765152 webhooks: registering remote method 'reboot_machine' for connection id: 1965765152 webhooks: registering remote method 'pause_job_queue' for connection id: 1965765152 webhooks: registering remote method 'start_job_queue' for connection id: 1965765152 webhooks: registering remote method 'timelapse_newframe' for connection id: 1965765152 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1965765152 webhooks: registering remote method 'timelapse_render' for connection id: 1965765152 webhooks: registering remote method 'set_wled_state' for connection id: 1965765152 webhooks: registering remote method 'set_wled' for connection id: 1965765152 Stats 2449.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1379 bytes_read=9374 bytes_retransmit=0 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.47 cputime=59.943 memavail=682036 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2450.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1385 bytes_read=9569 bytes_retransmit=0 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001432 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.47 cputime=59.981 memavail=683752 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2451.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1391 bytes_read=9735 bytes_retransmit=0 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001426 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.51 cputime=60.002 memavail=686316 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2452.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1397 bytes_read=9886 bytes_retransmit=0 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001438 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.51 cputime=60.026 memavail=686316 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2453.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1403 bytes_read=10067 bytes_retransmit=0 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.51 cputime=60.050 memavail=686072 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2454.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1409 bytes_read=10233 bytes_retransmit=0 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001436 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.51 cputime=60.075 memavail=686072 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2455.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1415 bytes_read=10398 bytes_retransmit=0 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.51 cputime=60.099 memavail=686072 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2456.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1421 bytes_read=10579 bytes_retransmit=0 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001442 raspberry_pi: temp=39.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.47 cputime=60.120 memavail=686072 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2457.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1427 bytes_read=10745 bytes_retransmit=0 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001439 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.47 cputime=60.139 memavail=684576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2458.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1433 bytes_read=10896 bytes_retransmit=0 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001433 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.47 cputime=60.159 memavail=684576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2459.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1439 bytes_read=11077 bytes_retransmit=0 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001433 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.47 cputime=60.185 memavail=684576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2460.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1445 bytes_read=11257 bytes_retransmit=0 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001461 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.47 cputime=60.210 memavail=684576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2461.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1451 bytes_read=11408 bytes_retransmit=0 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001458 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.43 cputime=60.234 memavail=684576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2462.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1457 bytes_read=11589 bytes_retransmit=0 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001454 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.43 cputime=60.260 memavail=684576 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2463.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1463 bytes_read=11755 bytes_retransmit=0 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001452 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.43 cputime=60.283 memavail=679564 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2464.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1469 bytes_read=11906 bytes_retransmit=0 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001446 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.43 cputime=60.299 memavail=679344 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2465.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1475 bytes_read=12101 bytes_retransmit=0 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001441 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.43 cputime=60.316 memavail=692808 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2466.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1481 bytes_read=12267 bytes_retransmit=0 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=40.2 mcu_temp: temp=31.1 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.48 cputime=60.333 memavail=688276 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2467.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1487 bytes_read=12418 bytes_retransmit=0 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001438 raspberry_pi: temp=39.7 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.48 cputime=60.356 memavail=685180 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2468.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1493 bytes_read=12599 bytes_retransmit=0 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001436 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.48 cputime=60.380 memavail=685180 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2469.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1499 bytes_read=12765 bytes_retransmit=0 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001436 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.48 cputime=60.405 memavail=685192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2470.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1505 bytes_read=12930 bytes_retransmit=0 bytes_invalid=0 send_seq=180 receive_seq=180 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.48 cputime=60.430 memavail=685192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2471.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1511 bytes_read=13111 bytes_retransmit=0 bytes_invalid=0 send_seq=181 receive_seq=181 retransmit_seq=0 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001435 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.44 cputime=60.455 memavail=685192 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2472.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1517 bytes_read=13277 bytes_retransmit=0 bytes_invalid=0 send_seq=182 receive_seq=182 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001438 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.44 cputime=60.478 memavail=685200 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 2473.0: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1523 bytes_read=13422 bytes_retransmit=0 bytes_invalid=0 send_seq=183 receive_seq=183 retransmit_seq=0 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001438 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.44 cputime=60.500 memavail=679688 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Starting Klippy... Args: ['/home/hitman/klipper/klippy/klippy.py', '/home/hitman/printer_data/config/printer.cfg', '-I', '/home/hitman/printer_data/comms/klippy.serial', '-l', '/home/hitman/printer_data/logs/klippy.log', '-a', '/home/hitman/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-276-ge9bf2d4c' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper CPU: 4 core ARMv7 Processor rev 4 (v7l) Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Mon Sep 25 22:25:07 2023 (1695673507.6 2476.3) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1965507344: New connection webhooks client 1965507344: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} mcu 'mcu': got {'oid': 10, 'next_clock': 413832704, 'value': 13936, '#name': 'analog_in_state', '#sent_time': 2479.033894055, '#receive_time': 2479.0487199920003} mcu 'mcu': got {'oid': 12, 'next_clock': 415272704, 'value': 31415, '#name': 'analog_in_state', '#sent_time': 2479.033894055, '#receive_time': 2479.0688358770003} mcu 'mcu': got {'oid': 17, 'next_clock': 418872704, 'value': 31398, '#name': 'analog_in_state', '#sent_time': 2479.089574055, '#receive_time': 2479.119260669} mcu 'mcu': got {'oid': 10, 'next_clock': 435432704, 'value': 13937, '#name': 'analog_in_state', '#sent_time': 2479.3101170749997, '#receive_time': 2479.348620357} mcu 'mcu': got {'oid': 12, 'next_clock': 436872704, 'value': 31413, '#name': 'analog_in_state', '#sent_time': 2479.365579888, '#receive_time': 2479.3687619710004} mcu 'mcu': got {'oid': 17, 'next_clock': 440472704, 'value': 31397, '#name': 'analog_in_state', '#sent_time': 2479.365579888, '#receive_time': 2479.418907752} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder webhooks: registering remote method 'shutdown_machine' for connection id: 1965507344 webhooks: registering remote method 'reboot_machine' for connection id: 1965507344 webhooks: registering remote method 'pause_job_queue' for connection id: 1965507344 webhooks: registering remote method 'start_job_queue' for connection id: 1965507344 webhooks: registering remote method 'timelapse_newframe' for connection id: 1965507344 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1965507344 webhooks: registering remote method 'timelapse_render' for connection id: 1965507344 webhooks: registering remote method 'set_wled_state' for connection id: 1965507344 webhooks: registering remote method 'set_wled' for connection id: 1965507344 Stats 3252.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=5816 bytes_read=134359 bytes_retransmit=9 bytes_invalid=0 send_seq=903 receive_seq=903 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.46 cputime=20.551 memavail=678312 print_time=838.840 buffer_time=0.639 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 webhooks client 1965507344: Disconnected Restarting printer Start printer at Mon Sep 25 22:38:05 2023 (1695674285.3 3253.9) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1971354304: New connection webhooks client 1971354304: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} mcu 'mcu': got {'oid': 10, 'next_clock': 552057856, 'value': 13931, '#name': 'analog_in_state', '#sent_time': 3256.419332873, '#receive_time': 3256.432842143} mcu 'mcu': got {'oid': 12, 'next_clock': 553497856, 'value': 31414, '#name': 'analog_in_state', '#sent_time': 3256.419332873, '#receive_time': 3256.452993289} mcu 'mcu': got {'oid': 17, 'next_clock': 564297856, 'value': 31398, '#name': 'analog_in_state', '#sent_time': 3256.58374131, '#receive_time': 3256.603464227} mcu 'mcu': got {'oid': 10, 'next_clock': 573657856, 'value': 13932, '#name': 'analog_in_state', '#sent_time': 3256.692876831, '#receive_time': 3256.733893341} mcu 'mcu': got {'oid': 12, 'next_clock': 575097856, 'value': 31413, '#name': 'analog_in_state', '#sent_time': 3256.748529175, '#receive_time': 3256.752786675} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder webhooks: registering remote method 'shutdown_machine' for connection id: 1971354304 webhooks: registering remote method 'reboot_machine' for connection id: 1971354304 webhooks: registering remote method 'pause_job_queue' for connection id: 1971354304 webhooks: registering remote method 'start_job_queue' for connection id: 1971354304 webhooks: registering remote method 'timelapse_newframe' for connection id: 1971354304 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1971354304 webhooks: registering remote method 'timelapse_render' for connection id: 1971354304 webhooks: registering remote method 'set_wled_state' for connection id: 1971354304 webhooks: registering remote method 'set_wled' for connection id: 1971354304 Stats 3972.4: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=5468 bytes_read=124679 bytes_retransmit=9 bytes_invalid=0 send_seq=844 receive_seq=844 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001431 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.26 cputime=38.560 memavail=678372 print_time=1559.080 buffer_time=0.582 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1971354304: Disconnected Restarting printer Start printer at Mon Sep 25 22:50:05 2023 (1695675005.5 3974.1) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = BASE_CANCEL_PRINT gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 TURN_OFF_HEATERS G0 X5 Y220 Z10 CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set e = params.E|default(1) %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} {% set custom_park_x = client.custom_park_x|default(0.0) %} {% set custom_park_y = client.custom_park_y|default(0.0) %} {% set park_dz = client.custom_park_dz|default(2.0)|abs %} {% set sp_hop = client.speed_hop|default(15) * 60 %} {% set sp_move = client.speed_move|default(velocity) * 60 %} {% set origin = printer.gcode_move.homing_origin %} {% set act = printer.gcode_move.gcode_position %} {% set max = printer.toolhead.axis_maximum %} {% set cone = printer.toolhead.cone_start_z|default(max.z) %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set z_min = params.Z_MIN|default(0)|float %} {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} {% set x_park = params.X if params.X is defined else custom_park_x if use_custom else 0.0 if round_bed else (max.x - 5.0) %} {% set y_park = params.Y if params.Y is defined else custom_park_y if use_custom else (max.y - 5.0) if round_bed and z_park < cone else 0.0 if round_bed else (max.y - 5.0) %} _CLIENT_RETRACT {% if "xyz" in printer.toolhead.homed_axes %} G90 G1 Z{z_park} F{sp_hop} G1 X{x_park} Y{y_park} F{sp_move} {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} {% else %} RESPOND TYPE=echo MSG='Printer not homed' {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 mcu 'mcu': Starting serial connect webhooks client 1971354064: New connection webhooks client 1971354064: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} Loaded MCU 'mcu' 112 commands (v0.11.0-271-g5f990f93 / 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_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi3=PB4,PB5,PB3 CLOCK_FREQ=72000000 MCU=stm32f103xe PWM_MAX=255 RECEIVE_WINDOW=192 RESERVE_PINS_serial=PA10,PA9 SERIAL_BAUD=250000 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1 mcu_temperature 'mcu' nominal base=357.558140 slope=-767.441860 Sending MCU 'mcu' printer configuration... Configured MCU 'mcu' (1024 moves) bed_mesh: generated points Index | Tool Adjusted | Probe 0 | (46.8, 55.5) | (15.0, 15.0) 1 | (75.6, 55.5) | (43.8, 15.0) 2 | (104.5, 55.5) | (72.7, 15.0) 3 | (133.3, 55.5) | (101.5, 15.0) 4 | (162.1, 55.5) | (130.3, 15.0) 5 | (190.9, 55.5) | (159.1, 15.0) 6 | (219.8, 55.5) | (188.0, 15.0) 7 | (219.8, 84.0) | (188.0, 43.5) 8 | (190.9, 84.0) | (159.1, 43.5) 9 | (162.1, 84.0) | (130.3, 43.5) 10 | (133.3, 84.0) | (101.5, 43.5) 11 | (104.5, 84.0) | (72.7, 43.5) 12 | (75.6, 84.0) | (43.8, 43.5) 13 | (46.8, 84.0) | (15.0, 43.5) 14 | (46.8, 112.5) | (15.0, 72.0) 15 | (75.6, 112.5) | (43.8, 72.0) 16 | (104.5, 112.5) | (72.7, 72.0) 17 | (133.3, 112.5) | (101.5, 72.0) 18 | (162.1, 112.5) | (130.3, 72.0) 19 | (190.9, 112.5) | (159.1, 72.0) 20 | (219.8, 112.5) | (188.0, 72.0) 21 | (219.8, 141.0) | (188.0, 100.5) 22 | (190.9, 141.0) | (159.1, 100.5) 23 | (162.1, 141.0) | (130.3, 100.5) 24 | (133.3, 141.0) | (101.5, 100.5) 25 | (104.5, 141.0) | (72.7, 100.5) 26 | (75.6, 141.0) | (43.8, 100.5) 27 | (46.8, 141.0) | (15.0, 100.5) 28 | (46.8, 169.5) | (15.0, 129.0) 29 | (75.6, 169.5) | (43.8, 129.0) 30 | (104.5, 169.5) | (72.7, 129.0) 31 | (133.3, 169.5) | (101.5, 129.0) 32 | (162.1, 169.5) | (130.3, 129.0) 33 | (190.9, 169.5) | (159.1, 129.0) 34 | (219.8, 169.5) | (188.0, 129.0) 35 | (219.8, 198.0) | (188.0, 157.5) 36 | (190.9, 198.0) | (159.1, 157.5) 37 | (162.1, 198.0) | (130.3, 157.5) 38 | (133.3, 198.0) | (101.5, 157.5) 39 | (104.5, 198.0) | (72.7, 157.5) 40 | (75.6, 198.0) | (43.8, 157.5) 41 | (46.8, 198.0) | (15.0, 157.5) 42 | (46.8, 226.5) | (15.0, 186.0) 43 | (75.6, 226.5) | (43.8, 186.0) 44 | (104.5, 226.5) | (72.7, 186.0) 45 | (133.3, 226.5) | (101.5, 186.0) 46 | (162.1, 226.5) | (130.3, 186.0) 47 | (190.9, 226.5) | (159.1, 186.0) 48 | (219.8, 226.5) | (188.0, 186.0) Starting heater checks for heater_bed Starting heater checks for extruder Stats 3978.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000051 bytes_write=1171 bytes_read=4284 bytes_retransmit=9 bytes_invalid=0 send_seq=124 receive_seq=123 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001898 raspberry_pi: temp=39.2 mcu_temp: temp=0.0 heater_bed: target=0 temp=0.0 pwm=0.000 sysload=0.30 cputime=40.623 memavail=677672 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=0.0 pwm=0.000 webhooks: registering remote method 'shutdown_machine' for connection id: 1971354064 webhooks: registering remote method 'reboot_machine' for connection id: 1971354064 webhooks: registering remote method 'pause_job_queue' for connection id: 1971354064 webhooks: registering remote method 'start_job_queue' for connection id: 1971354064 webhooks: registering remote method 'timelapse_newframe' for connection id: 1971354064 webhooks: registering remote method 'timelapse_saveFrames' for connection id: 1971354064 webhooks: registering remote method 'timelapse_render' for connection id: 1971354064 webhooks: registering remote method 'set_wled_state' for connection id: 1971354064 webhooks: registering remote method 'set_wled' for connection id: 1971354064 Stats 3979.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000051 bytes_write=1185 bytes_read=4485 bytes_retransmit=9 bytes_invalid=0 send_seq=126 receive_seq=126 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72002222 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.30 cputime=40.746 memavail=671876 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3980.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000051 bytes_write=1191 bytes_read=4651 bytes_retransmit=9 bytes_invalid=0 send_seq=127 receive_seq=127 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72002301 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.30 cputime=40.806 memavail=676988 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3981.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000051 bytes_write=1197 bytes_read=4802 bytes_retransmit=9 bytes_invalid=0 send_seq=128 receive_seq=128 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001923 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.30 cputime=40.840 memavail=676988 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3982.1: gcodein=0 mcu: mcu_awake=0.005 mcu_task_avg=0.000030 mcu_task_stddev=0.000051 bytes_write=1203 bytes_read=4983 bytes_retransmit=9 bytes_invalid=0 send_seq=129 receive_seq=129 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001754 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.30 cputime=40.864 memavail=676988 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3983.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1209 bytes_read=5163 bytes_retransmit=9 bytes_invalid=0 send_seq=130 receive_seq=130 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001568 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.27 cputime=40.886 memavail=676996 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3984.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1215 bytes_read=5314 bytes_retransmit=9 bytes_invalid=0 send_seq=131 receive_seq=131 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001498 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.27 cputime=40.905 memavail=676996 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3985.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1221 bytes_read=5495 bytes_retransmit=9 bytes_invalid=0 send_seq=132 receive_seq=132 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001488 raspberry_pi: temp=39.2 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.27 cputime=40.925 memavail=676996 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3986.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1227 bytes_read=5661 bytes_retransmit=9 bytes_invalid=0 send_seq=133 receive_seq=133 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001485 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.27 cputime=40.949 memavail=676744 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3987.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1233 bytes_read=5812 bytes_retransmit=9 bytes_invalid=0 send_seq=134 receive_seq=134 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001483 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.27 cputime=40.972 memavail=676248 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3988.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1239 bytes_read=6007 bytes_retransmit=9 bytes_invalid=0 send_seq=135 receive_seq=135 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001487 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.25 cputime=40.999 memavail=676248 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3989.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1245 bytes_read=6173 bytes_retransmit=9 bytes_invalid=0 send_seq=136 receive_seq=136 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001481 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.25 cputime=41.023 memavail=676248 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3990.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1251 bytes_read=6324 bytes_retransmit=9 bytes_invalid=0 send_seq=137 receive_seq=137 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001481 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.25 cputime=41.047 memavail=676256 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3991.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1257 bytes_read=6505 bytes_retransmit=9 bytes_invalid=0 send_seq=138 receive_seq=138 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001476 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.25 cputime=41.072 memavail=676256 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3992.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1263 bytes_read=6671 bytes_retransmit=9 bytes_invalid=0 send_seq=139 receive_seq=139 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001473 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.25 cputime=41.097 memavail=676256 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3993.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1269 bytes_read=6822 bytes_retransmit=9 bytes_invalid=0 send_seq=140 receive_seq=140 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001491 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.23 cputime=41.121 memavail=676256 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3994.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1275 bytes_read=7017 bytes_retransmit=9 bytes_invalid=0 send_seq=141 receive_seq=141 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001483 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.23 cputime=41.147 memavail=676256 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3995.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1281 bytes_read=7183 bytes_retransmit=9 bytes_invalid=0 send_seq=142 receive_seq=142 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001470 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.23 cputime=41.171 memavail=676256 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3996.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1287 bytes_read=7334 bytes_retransmit=9 bytes_invalid=0 send_seq=143 receive_seq=143 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001470 raspberry_pi: temp=39.7 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.23 cputime=41.191 memavail=682204 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3997.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1293 bytes_read=7515 bytes_retransmit=9 bytes_invalid=0 send_seq=144 receive_seq=144 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001469 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.23 cputime=41.215 memavail=681476 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3998.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1299 bytes_read=7681 bytes_retransmit=9 bytes_invalid=0 send_seq=145 receive_seq=145 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001463 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.21 cputime=41.239 memavail=681476 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 3999.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1305 bytes_read=7846 bytes_retransmit=9 bytes_invalid=0 send_seq=146 receive_seq=146 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001459 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.21 cputime=41.264 memavail=681484 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4000.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1311 bytes_read=8027 bytes_retransmit=9 bytes_invalid=0 send_seq=147 receive_seq=147 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001449 raspberry_pi: temp=39.2 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.21 cputime=41.283 memavail=681484 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4001.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1317 bytes_read=8193 bytes_retransmit=9 bytes_invalid=0 send_seq=148 receive_seq=148 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001447 raspberry_pi: temp=39.7 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.21 cputime=41.301 memavail=680224 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4002.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1323 bytes_read=8344 bytes_retransmit=9 bytes_invalid=0 send_seq=149 receive_seq=149 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001445 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.21 cputime=41.326 memavail=680224 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4003.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1329 bytes_read=8525 bytes_retransmit=9 bytes_invalid=0 send_seq=150 receive_seq=150 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.20 cputime=41.350 memavail=680224 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4004.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1335 bytes_read=8705 bytes_retransmit=9 bytes_invalid=0 send_seq=151 receive_seq=151 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.20 cputime=41.375 memavail=680224 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4005.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1341 bytes_read=8856 bytes_retransmit=9 bytes_invalid=0 send_seq=152 receive_seq=152 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.20 cputime=41.398 memavail=680232 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4006.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1347 bytes_read=9037 bytes_retransmit=9 bytes_invalid=0 send_seq=153 receive_seq=153 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001445 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.20 cputime=41.424 memavail=680232 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4007.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1353 bytes_read=9203 bytes_retransmit=9 bytes_invalid=0 send_seq=154 receive_seq=154 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.20 cputime=41.448 memavail=680248 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4008.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1359 bytes_read=9354 bytes_retransmit=9 bytes_invalid=0 send_seq=155 receive_seq=155 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.18 cputime=41.472 memavail=680248 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4009.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1365 bytes_read=9549 bytes_retransmit=9 bytes_invalid=0 send_seq=156 receive_seq=156 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001442 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.18 cputime=41.496 memavail=680248 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4010.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1371 bytes_read=9715 bytes_retransmit=9 bytes_invalid=0 send_seq=157 receive_seq=157 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001440 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.18 cputime=41.521 memavail=680028 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4011.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1377 bytes_read=9866 bytes_retransmit=9 bytes_invalid=0 send_seq=158 receive_seq=158 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001440 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.18 cputime=41.545 memavail=680028 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4012.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1383 bytes_read=10047 bytes_retransmit=9 bytes_invalid=0 send_seq=159 receive_seq=159 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=37.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.18 cputime=41.569 memavail=680028 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4013.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1389 bytes_read=10213 bytes_retransmit=9 bytes_invalid=0 send_seq=160 receive_seq=160 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001453 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.18 cputime=41.593 memavail=680028 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4014.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1395 bytes_read=10378 bytes_retransmit=9 bytes_invalid=0 send_seq=161 receive_seq=161 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001452 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.16 cputime=41.617 memavail=680028 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4015.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1401 bytes_read=10559 bytes_retransmit=9 bytes_invalid=0 send_seq=162 receive_seq=162 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001449 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.16 cputime=41.643 memavail=679776 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4016.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1407 bytes_read=10725 bytes_retransmit=9 bytes_invalid=0 send_seq=163 receive_seq=163 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001443 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.16 cputime=41.662 memavail=679776 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4017.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1413 bytes_read=10876 bytes_retransmit=9 bytes_invalid=0 send_seq=164 receive_seq=164 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001444 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.16 cputime=41.680 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4018.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1419 bytes_read=11057 bytes_retransmit=9 bytes_invalid=0 send_seq=165 receive_seq=165 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001442 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.16 cputime=41.705 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4019.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1425 bytes_read=11237 bytes_retransmit=9 bytes_invalid=0 send_seq=166 receive_seq=166 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001442 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.15 cputime=41.730 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4020.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1431 bytes_read=11388 bytes_retransmit=9 bytes_invalid=0 send_seq=167 receive_seq=167 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001448 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.15 cputime=41.754 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4021.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1437 bytes_read=11569 bytes_retransmit=9 bytes_invalid=0 send_seq=168 receive_seq=168 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001446 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.15 cputime=41.779 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4022.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1443 bytes_read=11735 bytes_retransmit=9 bytes_invalid=0 send_seq=169 receive_seq=169 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001445 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.15 cputime=41.803 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4023.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1449 bytes_read=11886 bytes_retransmit=9 bytes_invalid=0 send_seq=170 receive_seq=170 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001446 raspberry_pi: temp=38.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.15 cputime=41.824 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4024.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1455 bytes_read=12081 bytes_retransmit=9 bytes_invalid=0 send_seq=171 receive_seq=171 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001446 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.14 cputime=41.849 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4025.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1461 bytes_read=12247 bytes_retransmit=9 bytes_invalid=0 send_seq=172 receive_seq=172 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001444 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.14 cputime=41.874 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4026.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1467 bytes_read=12398 bytes_retransmit=9 bytes_invalid=0 send_seq=173 receive_seq=173 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001441 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.14 cputime=41.898 memavail=678284 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4027.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1473 bytes_read=12579 bytes_retransmit=9 bytes_invalid=0 send_seq=174 receive_seq=174 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=38.6 mcu_temp: temp=31.1 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.14 cputime=41.924 memavail=678060 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4028.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1479 bytes_read=12745 bytes_retransmit=9 bytes_invalid=0 send_seq=175 receive_seq=175 retransmit_seq=2 srtt=0.003 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=37.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.14 cputime=41.949 memavail=678060 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4029.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1485 bytes_read=12910 bytes_retransmit=9 bytes_invalid=0 send_seq=176 receive_seq=176 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001436 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=22.9 pwm=0.000 sysload=0.13 cputime=41.975 memavail=678060 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4030.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1491 bytes_read=13106 bytes_retransmit=9 bytes_invalid=0 send_seq=177 receive_seq=177 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=38.1 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.13 cputime=42.001 memavail=678060 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4031.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1497 bytes_read=13257 bytes_retransmit=9 bytes_invalid=0 send_seq=178 receive_seq=178 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001437 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.13 cputime=42.026 memavail=678060 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 4032.1: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=1503 bytes_read=13402 bytes_retransmit=9 bytes_invalid=0 send_seq=179 receive_seq=179 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001441 raspberry_pi: temp=38.6 mcu_temp: temp=31.2 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.13 cputime=42.050 memavail=678060 print_time=0.001 buffer_time=0.000 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Stats 5881.6: gcodein=0 mcu: mcu_awake=0.002 mcu_task_avg=0.000018 mcu_task_stddev=0.000009 bytes_write=12777 bytes_read=324702 bytes_retransmit=9 bytes_invalid=0 send_seq=2058 receive_seq=2058 retransmit_seq=2 srtt=0.004 rttvar=0.000 rto=0.025 ready_bytes=0 upcoming_bytes=0 freq=72001421 raspberry_pi: temp=37.6 mcu_temp: temp=31.3 heater_bed: target=0 temp=23.0 pwm=0.000 sysload=0.16 cputime=83.378 memavail=677776 print_time=1909.338 buffer_time=0.789 print_stall=0 extruder: target=0 temp=23.2 pwm=0.000 Attempting MCU 'mcu' reset command webhooks client 1971354064: Disconnected Restarting printer Start printer at Mon Sep 25 23:21:54 2023 (1695676914.9 5883.5) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 variable_park = True {% if printer.pause_resume.is_paused|lower = = 'false' and park|lower == 'true'%} _TOOLHEAD_PARK_PAUSE_CANCEL {% endif %} TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = variable_extrude = 1.0 {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} {% set z_park_delta = 2.0 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - z_park_delta) %} {% set z_safe = z_park_delta %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E-{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G91 G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 Config error Traceback (most recent call last): File "/home/hitman/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/hitman/klipper/klippy/klippy.py", line 145, in _read_config pconfig.check_unused_options(config) File "/home/hitman/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option '{% if printer.pause_resume.is_paused|lower' is not valid in section 'gcode_macro cancel_print' webhooks client 1966637336: New connection webhooks client 1966637336: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} Unable to issue reset command on MCU 'mcu' webhooks client 1966637336: Disconnected Restarting printer Start printer at Mon Sep 25 23:23:39 2023 (1695677019.8 5988.5) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 variable_park = True {% if printer.pause_resume.is_paused|lower = = 'false' and park|lower == 'true'%} _TOOLHEAD_PARK_PAUSE_CANCEL {% endif %} TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = variable_extrude = 1.0 {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} {% set z_park_delta = 2.0 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - z_park_delta) %} {% set z_safe = z_park_delta %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E-{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G91 G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 Config error Traceback (most recent call last): File "/home/hitman/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/hitman/klipper/klippy/klippy.py", line 145, in _read_config pconfig.check_unused_options(config) File "/home/hitman/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option '{% if printer.pause_resume.is_paused|lower' is not valid in section 'gcode_macro cancel_print' webhooks client 1965735048: New connection webhooks client 1965735048: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} Unable to issue reset command on MCU 'mcu' webhooks client 1965735048: Disconnected Restarting printer Start printer at Mon Sep 25 23:32:16 2023 (1695677537.0 6505.6) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 variable_park = True {% if printer.pause_resume.is_paused|lower = = 'false' and park|lower == 'true'%} _TOOLHEAD_PARK_PAUSE_CANCEL {% endif %} TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = variable_extrude = 1.0 {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} {% set z_park_delta = 2.0 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - z_park_delta) %} {% set z_safe = z_park_delta %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E-{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G91 G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 Config error Traceback (most recent call last): File "/home/hitman/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/hitman/klipper/klippy/klippy.py", line 145, in _read_config pconfig.check_unused_options(config) File "/home/hitman/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option '{% if printer.pause_resume.is_paused|lower' is not valid in section 'gcode_macro cancel_print' webhooks client 1966266784: New connection webhooks client 1966266784: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} Unable to issue reset command on MCU 'mcu' webhooks client 1966266784: Disconnected Restarting printer Start printer at Mon Sep 25 23:34:06 2023 (1695677646.3 6614.9) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 variable_park = True {% if printer.pause_resume.is_paused|lower = = 'false' and park|lower == 'true'%} _TOOLHEAD_PARK_PAUSE_CANCEL {% endif %} TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = variable_extrude = 1.0 {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} {% set z_park_delta = 2.0 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - z_park_delta) %} {% set z_safe = z_park_delta %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E-{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G91 G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on CLEAR_PAUSE RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 Config error Traceback (most recent call last): File "/home/hitman/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/hitman/klipper/klippy/klippy.py", line 145, in _read_config pconfig.check_unused_options(config) File "/home/hitman/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option '{% if printer.pause_resume.is_paused|lower' is not valid in section 'gcode_macro cancel_print' webhooks client 1966223048: New connection webhooks client 1966223048: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'} Starting Klippy... Args: ['/home/hitman/klipper/klippy/klippy.py', '/home/hitman/printer_data/config/printer.cfg', '-I', '/home/hitman/printer_data/comms/klippy.serial', '-l', '/home/hitman/printer_data/logs/klippy.log', '-a', '/home/hitman/printer_data/comms/klippy.sock'] Git version: 'v0.11.0-276-ge9bf2d4c' Branch: master Remote: origin Tracked URL: https://github.com/Klipper3d/klipper CPU: 4 core ARMv7 Processor rev 4 (v7l) Python: '3.9.2 (default, Mar 12 2021, 04:06:34) \n[GCC 10.2.1 20210110]' Start printer at Mon Sep 25 23:26:38 2023 (1695677198.2 22.9) ===== Config file ===== [virtual_sdcard] path = /home/hitman/printer_data/gcodes on_error_gcode = CANCEL_PRINT [pause_resume] recover_velocity = 25 [display_status] [respond] default_prefix = [gcode_macro CANCEL_PRINT] description = Cancel the actual running print rename_existing = CANCEL_PRINT_BASE gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 variable_park = True {% if printer.pause_resume.is_paused|lower = = 'false' and park|lower == 'true'%} _TOOLHEAD_PARK_PAUSE_CANCEL {% endif %} TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro PAUSE] description = Pause the actual running print rename_existing = PAUSE_BASE variable_restore_idle_timeout = 0 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 {% set x = params.X|default(5) %} {% set y = params.Y|default(225) %} {% set z = params.Z|default(10)|float %} {% set e = params.E|default(1) %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% set lift_z = z|abs %} {% if act_z < (max_z - lift_z) %} {% set z_safe = lift_z %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{e} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} G90 G1 X{x} Y{y} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description = Resume the actual running print rename_existing = RESUME_BASE variable_last_extruder_temp = {'restore': False, 'temp': 0} gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %} {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro SET_PAUSE_NEXT_LAYER] description = Enable a pause if the next layer is reached gcode = {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} {% set ENABLE = params.ENABLE|default(1)|int != 0 %} {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" [gcode_macro SET_PAUSE_AT_LAYER] description = Enable/disable a pause if a given layer number is reached gcode = {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined else params.LAYER is defined %} {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" [gcode_macro SET_PRINT_STATS_INFO] rename_existing = SET_PRINT_STATS_INFO_BASE description = Overwrite, to get pause_next_layer and pause_at_layer feature variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" } variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" } gcode = {% if pause_next_layer.enable %} RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' {pause_next_layer.call} SET_PAUSE_NEXT_LAYER ENABLE=0 {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' {pause_at_layer.call} SET_PAUSE_AT_LAYER ENABLE=0 {% endif %} SET_PRINT_STATS_INFO_BASE {rawparams} [gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] description = Helper: park toolhead used in PAUSE and CANCEL_PRINT gcode = variable_extrude = 1.0 {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} {% set z_park_delta = 2.0 %} {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - z_park_delta) %} {% set z_safe = z_park_delta %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} {% if printer.extruder.can_extrude|lower == 'true' %} M83 G1 E-{extrude} F2100 {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G91 G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %} {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro _CLIENT_EXTRUDE] description = Extrudes, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} {% set absolute_extrude = printer.gcode_move.absolute_extrude %} {% if printer.toolhead.extruder != '' %} {% if printer[printer.toolhead.extruder].can_extrude %} {% if use_fw_retract %} {% if length < 0 %} G10 {% else %} G11 {% endif %} {% else %} M83 G1 E{length} F{(speed|float|abs) * 60} {% if absolute_extrude %} M82 {% endif %} {% endif %} {% else %} RESPOND TYPE=echo MSG='Extruder not hot enough' {% endif %} {% endif %} [gcode_macro _CLIENT_RETRACT] description = Retracts, if the extruder is hot enough gcode = {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} [gcode_macro START_PRINT] gcode = led_on CLEAR_PAUSE RESPOND MSG="Preparing to print" {% set BED_TEMP = params.BED_TEMP|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %} SETUP_KAMP_MESHING DISPLAY_PARAMETERS=1 LED_ENABLE=1 FUZZ_ENABLE=1 SETUP_LINE_PURGE DISPLAY_PARAMETERS=1 ADAPTIVE_ENABLE=1 Z_HEIGHT=.3 PURGE_AMOUNT=20 LINE_LENGTH=25 G90 M83 led_heating RESPOND MSG="Warming up for bed leveling" M104 S170 M140 S{BED_TEMP} M109 S170 M190 S{BED_TEMP} G28 led_mesh BED_MESH_CLEAR RESPOND MSG="KAMP Adaptive Bed Meshing" BED_MESH_CALIBRATE RESPOND MSG="Heating to print temp" M104 S{EXTRUDER_TEMP} G0 Z50 F240 led_print RESPOND MSG="Clean bed and nozzle" G0 X2 Y220 F3000 M109 S{EXTRUDER_TEMP} RESPOND MSG="KAMP Line Purge" LINE_PURGE RESPOND MSG="Print Started" SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 [gcode_macro END_PRINT] gcode = led_end RESPOND MSG="Print Finished" G91 G1 E-.5 Z0.2 F2400 G1 X5 Y5 F6000 G1 Z10 G90 SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 G1 Z{printer.toolhead.position.z + 10} F600 G1 X0 Y220 F6000 M106 S0 M104 S0 M140 S0 M84 X Y E M109 R150 led_off [gcode_macro G29] gcode = G28 BED_MESH_CALIBRATE G0 X0 Y0 Z10 F6000 BED_MESH_PROFILE save=default [gcode_macro PARK_TOOLHEAD] gcode = SAVE_GCODE_STATE NAME=parking M117 Parking toolhead G91 G1 Z10 F600 G90 G1 X5 Y225 F4000 RESTORE_GCODE_STATE NAME=parking [gcode_macro Load_Filament] gcode = SAVE_GCODE_STATE NAME=loading_filament M117 Loading Filament M83 G92 E0.0 G1 E30 F200 G92 E0.0 RESTORE_GCODE_STATE NAME=loading_filament [gcode_macro Unload_Filament] gcode = SAVE_GCODE_STATE NAME=unloading_filament M125 M117 Unloading Filament G91 G1 E10 F100 G92 E0.0 G1 E-30 F3000 G92 E0.0 RESTORE_GCODE_STATE NAME=unloading_filament [gcode_macro Filament_Change] gcode = M117 Filament Change M118 Filament Change SAVE_GCODE_STATE NAME=filament_change PAUSE G91 G1 E-1 F300 M125 G1 E-5 F300 RESTORE_GCODE_STATE NAME=filament_change [gcode_macro GET_TIMELAPSE_SETUP] description = Print the Timelapse setup gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set output_txt = ["Timelapse Setup:"] %} {% set _dummy = output_txt.append("enable: %s" % tl.enable) %} {% set _dummy = output_txt.append("park: %s" % tl.park.enable) %} {% if tl.park.enable %} {% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %} {% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %} {% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %} {% endif %} {% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %} {% if not tl.extruder.fw_retract %} {% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %} {% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %} {% endif %} {% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %} {action_respond_info(output_txt|join("\n"))} [gcode_macro _SET_TIMELAPSE_SETUP] description = Set user parameters for timelapse gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] else False %} {% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3), 'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)}, 'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3), 'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)}, 'center': {'x': (max.x-(max.x-min.x)/2)|round(3), 'y': (max.y-(max.y-min.y)/2)|round(3)}} %} {% if params.ENABLE %} {% if params.ENABLE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False} {% else %} {action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)} {% endif %} {% endif %} {% if params.VERBOSE %} {% if params.VERBOSE|lower is in ['true', 'false'] %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False} {% else %} {action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)} {% endif %} {% endif %} {% if params.CUSTOM_POS_X %} {% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %} {% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))} {% endif %} {% endif %} {% if params.CUSTOM_POS_Y %} {% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %} {% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))} {% endif %} {% endif %} {% if params.CUSTOM_POS_DZ %} {% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %} {% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %} {% else %} {action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))} {% endif %} {% endif %} {% if params.PARK_ENABLE %} {% if params.PARK_ENABLE|lower is in ['true', 'false'] %} {% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %} {% else %} {action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)} {% endif %} {% endif %} {% if params.PARK_POS %} {% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %} {% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 }, 'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 }, 'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 }, 'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 }, 'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 }, 'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}, 'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz}, 'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %} {% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %} {% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %} {% else %} {action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]" % params.PARK_POS|upper)} {% endif %} {% endif %} {% if params.PARK_TIME %} {% if params.PARK_TIME|float >= 0.0 %} {% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %} {% else %} {action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}" {% if params.TRAVEL_SPEED %} {% if params.TRAVEL_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %} {% else %} {action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)} {% endif %} {% endif %} {% if params.RETRACT_SPEED %} {% if params.RETRACT_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)} {% endif %} {% endif %} {% if params.EXTRUDE_SPEED %} {% if params.EXTRUDE_SPEED|float > 0.0 %} {% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}" {% if params.EXTRUDE_DISTANCE %} {% if params.EXTRUDE_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)} {% endif %} {% endif %} {% if params.RETRACT_DISTANCE %} {% if params.RETRACT_DISTANCE|float >= 0.0 %} {% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %} {% else %} {action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)} {% endif %} {% endif %} {% if params.FW_RETRACT %} {% if params.FW_RETRACT|lower is in ['true', 'false'] %} {% if 'firmware_retraction' in printer.configfile.settings %} {% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %} {% else %} {% set _dummy = tl.extruder.update({'fw_retract':False}) %} {% if params.FW_RETRACT|capitalize == 'True' %} {action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")} {% endif %} {% endif %} {% else %} {action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}" {% if printer.configfile.settings['gcode_macro pause'] is defined %} {% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %} {% endif %} {% if printer.configfile.settings['gcode_macro resume'] is defined %} {% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}" [gcode_macro TIMELAPSE_TAKE_FRAME] description = Take Timelapse shoot variable_enable = False variable_takingframe = False variable_park = {'enable': False, 'pos' : 'center', 'time' : 0.1, 'custom': {'x': 0, 'y': 0, 'dz': 0}, 'coord' : {'x': 0, 'y': 0, 'dz': 0}} variable_extruder = {'fw_retract': False, 'retract': 1.0, 'extrude': 1.0} variable_speed = {'travel': 100, 'retract': 15, 'extrude': 15} variable_verbose = True variable_restore = {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}} variable_macro = {'pause': 'PAUSE', 'resume': 'RESUME'} variable_is_paused = False gcode = {% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %} {% if enable %} {% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or (not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %} {% if park.enable %} {% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '', 'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '', 'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %} {% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates, 'extrude' : printer.gcode_move.absolute_extrude}, 'speed' : printer.gcode_move.speed, 'e' : printer.gcode_move.gcode_position.e, 'factor' : {'speed' : printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor}} %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}" {% if not printer[printer.toolhead.extruder].can_extrude %} {% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %} {% else %} {% if extruder.fw_retract %} G10 {% else %} M83 G0 E-{extruder.retract} F{speed.retract * 60} {% endif %} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True {macro.pause} SET_GCODE_OFFSET X=0 Y=0 G90 {% if "xyz" not in printer.toolhead.homed_axes %} {% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %} {% else %} G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60} {% endif %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 M400 {% endif %} _TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse} {% endif %} {% else %} {% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %} {% endif %} [gcode_macro _TIMELAPSE_NEW_FRAME] description = action call for timelapse shoot. must be a seperate macro gcode = {action_call_remote_method("timelapse_newframe", macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park, hyperlapse=params.HYPERLAPSE)} [delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME] gcode = {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %} {% if tl.takingframe %} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5 {% else %} {tl.macro.resume} VELOCITY={tl.speed.travel} SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False {% if not printer[printer.toolhead.extruder].can_extrude %} {action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")} {% else %} {% if tl.extruder.fw_retract %} G11 {% else %} G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60} G0 F{tl.restore.speed} {% if tl.restore.absolute.extrude %} M82 G92 E{tl.restore.e} {% endif %} {% endif %} {% endif %} {% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %} {% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %} {% if not tl.restore.absolute.coordinates %} G91 {% endif %} {% endif %} [gcode_macro HYPERLAPSE] description = Start/Stop a hyperlapse recording variable_cycle = 0 variable_run = False gcode = {% set cycle = params.CYCLE|default(30)|int %} {% if params.ACTION and params.ACTION|lower == 'start' %} {action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle} UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True {% elif params.ACTION and params.ACTION|lower == 'stop' %} {% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %} SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0 {% else %} {action_raise_error("Hyperlapse: No valid input parameter Use: - HYPERLAPSE ACTION=START [CYCLE=time] - HYPERLAPSE ACTION=STOP")} {% endif %} [delayed_gcode _HYPERLAPSE_LOOP] gcode = UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle} TIMELAPSE_TAKE_FRAME HYPERLAPSE=True [gcode_macro TIMELAPSE_RENDER] description = Render Timelapse video and wait for the result variable_render = False variable_run_identifier = 0 gcode = {action_respond_info("Timelapse: Rendering started")} {action_call_remote_method("timelapse_render", byrendermacro="True")} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True {printer.configfile.settings['gcode_macro pause'].rename_existing} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 [delayed_gcode _WAIT_TIMELAPSE_RENDER] gcode = {% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %} SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1} {% if printer['gcode_macro TIMELAPSE_RENDER'].render %} M117 Rendering {['-','\\','|','/'][ri]} UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5 {% else %} {action_respond_info("Timelapse: Rendering finished")} M117 {printer.configfile.settings['gcode_macro resume'].rename_existing} {% endif %} [gcode_macro TEST_STREAM_DELAY] description = Helper macro to find stream and park delay gcode = {% set min = printer.toolhead.axis_minimum %} {% set max = printer.toolhead.axis_maximum %} {% set act = printer.toolhead.position %} {% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %} {% if act.z > 5.0 %} G0 X{min.x + 5.0} F{tl.speed.travel|int * 60} G0 X{(max.x-min.x)/2} G4 P{tl.park.time|float * 1000} _TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE G0 X{max.x - 5.0} {% else %} {action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)} {% endif %} [gcode_macro WLED_ON] description = Turn WLED strip on using optional preset and resets led colors gcode = {% set strip = params.STRIP|default("E3H47")|string %} {% set preset = params.PRESET|default(4)|int %} {action_call_remote_method("set_wled_state", strip=strip, state=True, preset=preset)} [gcode_macro WLED_OFF] description = Turn WLED strip off gcode = {% set strip = params.STRIP|string %} {action_call_remote_method("set_wled_state", strip=strip, state=False)} [gcode_macro led_on] gcode = WLED_ON STRIP=E3H47 PRESET=1 [gcode_macro led_heating] gcode = WLED_ON STRIP=E3H47 PRESET=2 [gcode_macro led_mesh] gcode = WLED_ON STRIP=E3H47 PRESET=3 [gcode_macro led_print] gcode = WLED_ON STRIP=E3H47 PRESET=4 [gcode_macro led_end] gcode = WLED_ON STRIP=E3H47 PRESET=5 [gcode_macro led_off] gcode = WLED_ON STRIP=E3H47 PRESET=6 [gcode_macro BED_MESH_CALIBRATE] rename_existing = _BED_MESH_CALIBRATE variable_led_enable = False variable_status_macro = 'status_meshing' variable_fuzz_enable = False variable_fuzz_min = 0 variable_fuzz_max = 4 variable_margin_enable = False variable_margin_size = 5 variable_probe_dock_enable = False variable_attach_macro = 'Attach_Probe' variable_detach_macro = 'Dock_Probe' variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("led_enable : %d" % (led_enable)) } { action_respond_info("status_macro: \'%s\'" % (status_macro)) } { action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } { action_respond_info("fuzz_min : %f" % (fuzz_min)) } { action_respond_info("fuzz_max : %f" % (fuzz_max)) } { action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } { action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } { action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } {% endif %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} {% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} {% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} {% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} {% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} {% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} {% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} {% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} {% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} {% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} {% if margin_enable == False %} {% set margin_size = 0 %} {% endif %} { action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( all_points | count, bed_mesh_min, bed_mesh_max, )) } {% if fuzz_enable == True %} {% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} {% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} {% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} {% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} {% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} {% else %} {% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} {% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} {% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} {% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} {% endif %} { action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( (x_min, y_min), (x_max, y_max), )) } {% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} {% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} {% if (([points_x, points_y]|max) > 6) %} {% set algorithm = "bicubic" %} {% set min_points = 4 %} {% else %} {% set algorithm = "lagrange" %} {% set min_points = 3 %} {% endif %} { action_respond_info( "Algorithm: {}".format(algorithm)) } {% set points_x = [points_x, min_points]|max %} {% set points_y = [points_y, min_points]|max %} { action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } {% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} {% set ref_index = (points_x * points_y / 2) | int %} { action_respond_info( "Reference index: {}".format(ref_index) ) } {% else %} {% set ref_index = -1 %} {% endif %} {% if probe_dock_enable == True %} {attach_macro} {% endif %} {% if led_enable == True %} {status_macro} {% endif %} _BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} {% if probe_dock_enable == True %} {detach_macro} {% endif %} [gcode_macro SETUP_KAMP_MESHING] gcode = SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' [gcode_macro LINE_PURGE] description = A purge macro that adapts to be near your actual printed objects variable_adaptive_enable = True variable_z_height = 0.4 variable_purge_amount = 40 variable_line_length = 50 variable_flow_rate = 12 variable_x_default = 10 variable_y_default = 10 variable_distance_to_object_y = 10 variable_display_parameters = True gcode = {% if display_parameters == True %} { action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } { action_respond_info("z_height : %f" % (z_height)) } { action_respond_info("purge_amount : %f" % (purge_amount)) } { action_respond_info("line_length : %f" % (line_length)) } { action_respond_info("flow_rate : %f" % (flow_rate)) } { action_respond_info("x_default : %f" % (x_default)) } { action_respond_info("y_default : %f" % (y_default)) } { action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } {% endif %} {% if adaptive_enable == True %} {% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} {% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} {% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} {% set x_origin = ([x_origin, 0] | max) %} {% set y_origin = ([y_origin, 0] | max) %} {% else %} {% set x_origin = x_default | float %} {% set y_origin = y_default | float %} {% endif %} {% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} {% set cross_section = nozzle_dia * z_height | float %} {% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} {% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} G92 E0 G0 F{travel_speed} G90 G0 X{x_origin} Y{y_origin - distance_to_object_y} G0 Z{z_height} M83 G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} G1 E-.5 F2100 G92 E0 M82 G0 Z{z_height * 2} F{travel_speed} [gcode_macro SETUP_LINE_PURGE] gcode = SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} [exclude_object] [mcu] serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 restart_method = command [temperature_sensor raspberry_pi] sensor_type = temperature_host min_temp = 10 max_temp = 100 [temperature_sensor mcu_temp] sensor_type = temperature_mcu min_temp = 0 max_temp = 100 [board_pins] aliases = EXP1_1=PC6,EXP1_3=PB10,EXP1_5=PB14,EXP1_7=PB12,EXP1_9=, EXP1_2=PB2,EXP1_4=PB11,EXP1_6=PB13,EXP1_8=PB15,EXP1_10=<5V>, PROBE_IN=PB0,PROBE_OUT=PB1,FIL_RUNOUT=PC6 [printer] kinematics = cartesian max_velocity = 300 max_accel = 3500 max_accel_to_decel = 3500 max_z_velocity = 5 max_z_accel = 100 square_corner_velocity = 5 [stepper_x] step_pin = PB9 dir_pin = PC2 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA5 position_endstop = 0 position_max = 235 position_min = -15 homing_speed = 50 [stepper_y] step_pin = PB7 dir_pin = PB8 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 endstop_pin = ^PA6 position_endstop = 0 position_max = 235 position_min = -13 homing_speed = 50 [stepper_z] step_pin = PB5 dir_pin = !PB6 enable_pin = !PC3 microsteps = 16 rotation_distance = 40 gear_ratio = 80:16 endstop_pin = probe:z_virtual_endstop position_max = 250 position_min = -10 homing_speed = 4 second_homing_speed = 1 homing_retract_dist = 2.0 [extruder] max_extrude_only_distance = 100.0 step_pin = PB3 dir_pin = PB4 enable_pin = !PC3 microsteps = 16 rotation_distance = 7.512 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PA1 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC5 min_temp = 0 max_temp = 300 min_extrude_temp = 180 max_extrude_cross_section = 5 control = pid pid_kp = 18.348 pid_ki = 0.844 pid_kd = 99.770 [bltouch] sensor_pin = ^PB1 control_pin = PB0 x_offset = -31.8 y_offset = -40.5 speed = 35 samples = 3 samples_result = median samples_tolerance = 0.0075 samples_tolerance_retries = 10 probe_with_touch_mode = true stow_on_each_sample = false z_offset = 3.655 [safe_z_home] home_xy_position = 147, 154 speed = 75 z_hop = 10 z_hop_speed = 5 move_to_previous = False [bed_mesh] speed = 120 horizontal_move_z = 8 mesh_min = 15,15 mesh_max = 188,186 probe_count = 7,7 algorithm = bicubic fade_start = 1 fade_end = 10 fade_target = 0 [heater_bed] heater_pin = PA2 sensor_type = EPCOS 100K B57560G104F sensor_pin = PC4 min_temp = 0 max_temp = 130 control = pid pid_kp = 65.224 pid_ki = 0.833 pid_kd = 1276.754 [fan] pin = PA0 [bed_screws] screw1 = 25, 205 screw1_name = rear left screw screw2 = 195, 205 screw2_name = rear right screw screw3 = 195, 35 screw3_name = front right screw screw4 = 25, 35 screw4_name = front left screw [screws_tilt_adjust] screw1 = 57, 233 screw1_name = rear left screw screw2 = 227, 233 screw2_name = rear right screw screw3 = 227, 70 screw3_name = front right screw screw4 = 57, 70 screw4_name = front left screw horizontal_move_z = 10 speed = 50 screw_thread = CW-M4 [filament_motion_sensor filament_sensor] detection_length = 10.0 extruder = extruder switch_pin = ^PA4 pause_on_runout = True insert_gcode = M117 Insert Detected runout_gcode = M117 Runout Detected [delayed_gcode DISABLEFILAMENTSENSOR] initial_duration = 1 gcode = SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 [gcode_arcs] resolution = 0.1 [bed_mesh default] version = 1 points = -0.047500, -0.047500, -0.045000 0.015000, -0.000000, -0.002500 0.042500, 0.042500, 0.040000 x_count = 3 y_count = 3 mesh_x_pps = 2 mesh_y_pps = 2 algo = lagrange tension = 0.2 min_x = 92.58 max_x = 126.92 min_y = 91.69999999999999 max_y = 127.52000000000001 ======================= Extruder max_extrude_ratio=2.078758 Config error Traceback (most recent call last): File "/home/hitman/klipper/klippy/klippy.py", line 175, in _connect self._read_config() File "/home/hitman/klipper/klippy/klippy.py", line 145, in _read_config pconfig.check_unused_options(config) File "/home/hitman/klipper/klippy/configfile.py", line 304, in check_unused_options raise error("Option '%s' is not valid in section '%s'" configparser.Error: Option '{% if printer.pause_resume.is_paused|lower' is not valid in section 'gcode_macro cancel_print' webhooks client 1965113152: New connection webhooks client 1965113152: Client info {'program': 'Moonraker', 'version': 'v0.8.0-142-gee62d07'}