Skip to content

OctoKlipper

Steven De George SR edited this page May 11, 2024 · 8 revisions

Notes here on getting everything setup for using Klipper in OctoPrint
Make sure your OctoKlipper plugin is installed and working.

Setting up basic macros

To make OctoTouchController (OctoTC) work for OctoKlipper you need to add some common macros to your printer.cfg file. These are:

  1. PAUSE
  2. RESUME
  3. CANCEL_PRINT
  4. M600
  5. G29 (optional if you have auto bed leveling)

Code follows below:

[pause_resume]
#recover_velocity: 50.

[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
	# Parameters
	{% set z = params.Z|default(10)|int %}                                                   ; z hop amount

	{% if printer['pause_resume'].is_paused|int == 0 %}
		SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}                              ; set z hop variable for reference in resume macro
		SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}    ; set hotend temp variable for reference in resume macro

		########################################################################################
		# Unrem when using a filament sensor and change the name from 'filament_sensor' to your
		# filament sensor name. Also see RESUME macro below
		#SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0                                 ; disable filament sensor
		########################################################################################
		
		SAVE_GCODE_STATE NAME=PAUSE                                                          ; save current print position for resume
		BASE_PAUSE                                                                           ; pause print
		{% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}       ; check that zhop doesn't exceed z max
			G91                                                                              ; relative positioning
			G1 Z{z} F900                                                                     ; raise Z up by z hop amount
		{% else %}
			{ action_respond_info("Pause zhop exceeds maximum Z height.") }                  ; if z max is exceeded, show message and set zhop value for resume to 0
			SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
		{% endif %}
		G90                                                                                  ; absolute positioning
		G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000   ; park toolhead at front center
		SAVE_GCODE_STATE NAME=PAUSEPARK                                                      ; save parked position in case toolhead is moved during the pause (otherwise the return zhop can error)
		M104 S0                                                                              ; turn off hotend
		SET_IDLE_TIMEOUT TIMEOUT=43200                                                       ; set timeout to 12 hours
	{% endif %}
	
	
[gcode_macro RESUME]
rename_existing: BASE_RESUME
variable_zhop: 0
variable_etemp: 0
gcode:
	# Parameters
	{% set e = params.E|default(2.5)|int %}                                          ; hotend prime amount (in mm)

	{% if printer['pause_resume'].is_paused|int == 1 %}
	
		
		########################################################################################
		# Unrem when using a filament sensor and change the name from 'filament_sensor' to your
		# filament sensor name. Also see PAUSE macro above
		#SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1                          ; enable filament sensor        
		########################################################################################
		
		
		SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}  ; set timeout back to configured value
		{% if etemp > 0 %}
			M109 S{etemp|int}                                                        ; wait for hotend to heat back up
		{% endif %}
		RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100                     ; go back to parked position in case toolhead was moved during pause (otherwise the return zhop can error)
		G91                                                                          ; relative positioning
		M83                                                                          ; relative extruder positioning
		{% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
			G1 Z{zhop * -1} E{e} F900                                                ; prime nozzle by E, lower Z back down
		{% else %}
			G1 Z{zhop * -1} F900                                                     ; lower Z back down without priming (just in case we are testing the macro with cold hotend)
		{% endif %}
		RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60                          ; restore position
		BASE_RESUME                                                                  ; resume print
	{% endif %}
	
	
	
[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
	SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value
	CLEAR_PAUSE
	
	########################################################################################
	# unrem below if you use an SD card
	#SDCARD_RESET_FILE 
	########################################################################################
	
	PRINT_END
	BASE_CANCEL_PRINT
	

[gcode_macro M600]
gcode:
	PAUSE                ; call the PAUSE macro

[gcode_macro G29]
gcode:
	# optional: if you have auto bed leveling use this
	# or call your own custom macro from here
	BED_MESH_CLEAR
	G28
	M117 Heating the bed
	M140 S60
	M190 S60
	M117 Calibrating...
	BED_MESH_CALIBRATE
	SAVE_CONFIG
	G1 X0 Y0 Z5 F4000
	M117 All done

Once you have added these to your printer.cfg file you can change the Octoprint printer GCode scripts.

image


All of this was taken from https://ellis3dp.com/Print-Tuning-Guide/articles/useful_macros/pause_resume_filament.html#cancel and adapted to what works for me and should work for you too. If you really want to tune your printer his guide is excellent!