Browse code

New update

Steve caster authored on05/02/2025 02:18:04
Showing1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,3888 +0,0 @@
1
-=============== Log rollover at Wed Dec 11 08:06:04 2024 ===============
2
-Starting Klippy...
3
-Args: ['/home/countcobolt/klipper/klippy/klippy.py', '/home/countcobolt/printer_data/config/printer.cfg', '-I', '/home/countcobolt/printer_data/comms/klippy.serial', '-l', '/home/countcobolt/printer_data/logs/klippy.log', '-a', '/home/countcobolt/printer_data/comms/klippy.sock']
4
-Git version: 'v0.12.0-396-gb7233d119'
5
-Branch: master
6
-Remote: origin
7
-Tracked URL: https://github.com/Klipper3d/klipper
8
-CPU: 4 core ?
9
-Python: '3.11.2 (main, Sep 14 2024, 03:00:30) [GCC 12.2.0]'
10
-Start printer at Wed Dec 11 08:06:05 2024 (1733900765.9 26.5)
11
-===== Config file =====
12
-[virtual_sdcard]
13
-path = /home/countcobolt/printer_data/gcodes
14
-on_error_gcode = CANCEL_PRINT
15
-
16
-[pause_resume]
17
-
18
-[display_status]
19
-
20
-[respond]
21
-
22
-[gcode_macro CANCEL_PRINT]
23
-description = Cancel the actual running print
24
-rename_existing = CANCEL_PRINT_BASE
25
-gcode = 
26
-	
27
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
28
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
29
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
30
-	
31
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
32
-	else "X=" ~ client.park_at_cancel_x %}
33
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
34
-	else "Y=" ~ client.park_at_cancel_y %}
35
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
36
-	
37
-	
38
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
39
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
40
-	{% endif %}
41
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
42
-	_CLIENT_RETRACT LENGTH={retract}
43
-	TURN_OFF_HEATERS
44
-	M106 S0
45
-	{client.user_cancel_macro|default("")}
46
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
47
-	
48
-	SET_PAUSE_NEXT_LAYER ENABLE=0
49
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
50
-	CANCEL_PRINT_BASE
51
-
52
-[gcode_macro PAUSE]
53
-description = Pause the actual running print
54
-rename_existing = PAUSE_BASE
55
-gcode = 
56
-	
57
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
58
-	{% set idle_timeout = client.idle_timeout|default(0) %}
59
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
60
-	{% set restore = False if printer.toolhead.extruder == ''
61
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
62
-	
63
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
64
-	
65
-	{% if idle_timeout > 0 %}
66
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
67
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
68
-	{% endif %}
69
-	PAUSE_BASE
70
-	{client.user_pause_macro|default("")}
71
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
72
-
73
-[gcode_macro RESUME]
74
-description = Resume the actual running print
75
-rename_existing = RESUME_BASE
76
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
77
-variable_restore_idle_timeout = 0
78
-variable_idle_state = False
79
-gcode = 
80
-	
81
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
82
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
83
-	{% set sp_move = client.speed_move|default(velocity) %}
84
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
85
-	else True if not printer[client.runout_sensor].enabled
86
-	else printer[client.runout_sensor].filament_detected %}
87
-	{% set can_extrude = True if printer.toolhead.extruder == ''
88
-	else printer[printer.toolhead.extruder].can_extrude %}
89
-	{% set do_resume = False %}
90
-	{% set prompt_txt = [] %}
91
-	
92
-	
93
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
94
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
95
-	{% if last_extruder_temp.restore %}
96
-	
97
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
98
-	M109 S{last_extruder_temp.temp}
99
-	{% set do_resume = True %}
100
-	{% elif can_extrude %}
101
-	{% set do_resume = True %}
102
-	{% else %}
103
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
104
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
105
-	{% endif %}
106
-	
107
-	{% elif can_extrude %}
108
-	{% set do_resume = True %}
109
-	{% else %}
110
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
111
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
112
-	{% endif %}
113
-	{% if runout_resume %}
114
-	{% if do_resume %}
115
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
116
-	{client.user_resume_macro|default("")}
117
-	_CLIENT_EXTRUDE
118
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
119
-	{% endif %}
120
-	{% else %}
121
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
122
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
123
-	{% endif %}
124
-	
125
-	{% if not (runout_resume and do_resume) %}
126
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
127
-	{% for element in prompt_txt %}
128
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
129
-	{% endfor %}
130
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
131
-	RESPOND TYPE=command MSG="action:prompt_show"
132
-	{% endif %}
133
-
134
-[gcode_macro SET_PAUSE_NEXT_LAYER]
135
-description = Enable a pause if the next layer is reached
136
-gcode = 
137
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
138
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
139
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
140
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
141
-
142
-[gcode_macro SET_PAUSE_AT_LAYER]
143
-description = Enable/disable a pause if a given layer number is reached
144
-gcode = 
145
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
146
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
147
-	else params.LAYER is defined %}
148
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
149
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
150
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
151
-
152
-[gcode_macro SET_PRINT_STATS_INFO]
153
-rename_existing = SET_PRINT_STATS_INFO_BASE
154
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
155
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
156
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
157
-gcode = 
158
-	{% if pause_next_layer.enable %}
159
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
160
-	{pause_next_layer.call}
161
-	SET_PAUSE_NEXT_LAYER ENABLE=0
162
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
163
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
164
-	{pause_at_layer.call}
165
-	SET_PAUSE_AT_LAYER ENABLE=0
166
-	{% endif %}
167
-	SET_PRINT_STATS_INFO_BASE {rawparams}
168
-
169
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
170
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
171
-gcode = 
172
-	
173
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
174
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
175
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
176
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
177
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
178
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
179
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
180
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
181
-	
182
-	{% set origin    = printer.gcode_move.homing_origin %}
183
-	{% set act       = printer.gcode_move.gcode_position %}
184
-	{% set max       = printer.toolhead.axis_maximum %}
185
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
186
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
187
-	else False %}
188
-	
189
-	{% set z_min = params.Z_MIN|default(0)|float %}
190
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
191
-	{% set x_park = params.X       if params.X is defined
192
-	else custom_park_x  if use_custom
193
-	else 0.0            if round_bed
194
-	else (max.x - 5.0) %}
195
-	{% set y_park = params.Y       if params.Y is defined
196
-	else custom_park_y  if use_custom
197
-	else (max.y - 5.0)  if round_bed and z_park < cone
198
-	else 0.0            if round_bed
199
-	else (max.y - 5.0) %}
200
-	
201
-	_CLIENT_RETRACT
202
-	{% if "xyz" in printer.toolhead.homed_axes %}
203
-	G90
204
-	G1 Z{z_park} F{sp_hop}
205
-	G1 X{x_park} Y{y_park} F{sp_move}
206
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
207
-	{% else %}
208
-	RESPOND TYPE=echo MSG='Printer not homed'
209
-	{% endif %}
210
-
211
-[gcode_macro _CLIENT_EXTRUDE]
212
-description = Extrudes, if the extruder is hot enough
213
-gcode = 
214
-	
215
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
216
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
217
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
218
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
219
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
220
-	
221
-	{% if printer.toolhead.extruder != '' %}
222
-	{% if printer[printer.toolhead.extruder].can_extrude %}
223
-	{% if use_fw_retract %}
224
-	{% if length < 0 %}
225
-	G10
226
-	{% else %}
227
-	G11
228
-	{% endif %}
229
-	{% else %}
230
-	M83
231
-	G1 E{length} F{(speed|float|abs) * 60}
232
-	{% if absolute_extrude %}
233
-	M82
234
-	{% endif %}
235
-	{% endif %}
236
-	{% else %}
237
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
238
-	{% endif %}
239
-	{% endif %}
240
-
241
-[gcode_macro _CLIENT_RETRACT]
242
-description = Retracts, if the extruder is hot enough
243
-gcode = 
244
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
245
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
246
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
247
-	
248
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
249
-
250
-[gcode_macro _CLIENT_LINEAR_MOVE]
251
-description = Linear move with save and restore of the gcode state
252
-gcode = 
253
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
254
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
255
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
256
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
257
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
258
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
259
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
260
-	SAVE_GCODE_STATE NAME=_client_movement
261
-	{% if x_move or y_move or z_move %}
262
-	G9{ 0 if ABSOLUTE else 1 }
263
-	{% endif %}
264
-	{% if e_move %}
265
-	M8{ 2 if ABSOLUTE_E else 3 }
266
-	{% endif %}
267
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
268
-	RESTORE_GCODE_STATE NAME=_client_movement
269
-
270
-[mcu]
271
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
272
-
273
-[stepper_x]
274
-step_pin = PE3
275
-dir_pin = !PE2
276
-enable_pin = !PE4
277
-microsteps = 16
278
-rotation_distance = 40
279
-endstop_pin = PA15
280
-position_endstop = 0
281
-position_max = 300
282
-homing_speed = 50
283
-
284
-[stepper_y]
285
-step_pin = PE0
286
-dir_pin = !PB9
287
-enable_pin = !PE1
288
-microsteps = 16
289
-rotation_distance = 40
290
-endstop_pin = !PD2
291
-position_endstop = 0
292
-position_max = 300
293
-homing_speed = 50
294
-
295
-[stepper_z]
296
-step_pin = PB5
297
-dir_pin = PB4
298
-enable_pin = !PB8
299
-microsteps = 16
300
-rotation_distance = 8
301
-endstop_pin = !PC8
302
-position_endstop = 0.5
303
-position_max = 200
304
-
305
-[stepper_z1]
306
-step_pin = PD15
307
-dir_pin = !PA1
308
-enable_pin = !PA3
309
-microsteps = 16
310
-rotation_distance = 8
311
-endstop_pin = !PC8
312
-position_endstop = 0.5
313
-position_max = 200
314
-
315
-[extruder]
316
-step_pin = PD6
317
-dir_pin = !PD3
318
-enable_pin = !PB3
319
-microsteps = 16
320
-rotation_distance = 33.500
321
-nozzle_diameter = 0.400
322
-filament_diameter = 1.750
323
-heater_pin = PE5
324
-sensor_type = ATC Semitec 104GT-2
325
-sensor_pin = PC1
326
-control = pid
327
-pid_kp = 14.669
328
-pid_ki = 0.572
329
-pid_kd = 94.068
330
-min_temp = 0
331
-max_temp = 250
332
-
333
-[heater_bed]
334
-heater_pin = PA0
335
-sensor_type = EPCOS 100K B57560G104F
336
-sensor_pin = PC0
337
-control = pid
338
-pid_kp = 325.10
339
-pid_ki = 63.35
340
-pid_kd = 417.10
341
-min_temp = 0
342
-max_temp = 130
343
-
344
-[fan]
345
-pin = PC14
346
-
347
-[printer]
348
-kinematics = corexy
349
-max_velocity = 300
350
-max_accel = 3000
351
-max_z_velocity = 25
352
-max_z_accel = 30
353
-
354
-[board_pins]
355
-aliases = 
356
-	
357
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
358
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
359
-	
360
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
361
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
362
-=======================
363
-Extruder max_extrude_ratio=0.266081
364
-Config error
365
-Traceback (most recent call last):
366
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 130, in _connect
367
-    self._read_config()
368
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 127, in _read_config
369
-    pconfig.check_unused_options(config)
370
-  File "/home/countcobolt/klipper/klippy/configfile.py", line 497, in check_unused_options
371
-    self.validate.check_unused(config.fileconfig)
372
-  File "/home/countcobolt/klipper/klippy/configfile.py", line 446, in check_unused
373
-    raise error("Option '%s' is not valid in section '%s'"
374
-configparser.Error: Option 'position_endstop' is not valid in section 'stepper_z1'
375
-webhooks client 548583637904: New connection
376
-webhooks client 548583637904: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
377
-webhooks client 548583637904: Disconnected
378
-Restarting printer
379
-Start printer at Wed Dec 11 08:23:00 2024 (1733901780.0 851.4)
380
-===== Config file =====
381
-[virtual_sdcard]
382
-path = /home/countcobolt/printer_data/gcodes
383
-on_error_gcode = CANCEL_PRINT
384
-
385
-[pause_resume]
386
-
387
-[display_status]
388
-
389
-[respond]
390
-
391
-[gcode_macro CANCEL_PRINT]
392
-description = Cancel the actual running print
393
-rename_existing = CANCEL_PRINT_BASE
394
-gcode = 
395
-	
396
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
397
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
398
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
399
-	
400
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
401
-	else "X=" ~ client.park_at_cancel_x %}
402
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
403
-	else "Y=" ~ client.park_at_cancel_y %}
404
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
405
-	
406
-	
407
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
408
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
409
-	{% endif %}
410
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
411
-	_CLIENT_RETRACT LENGTH={retract}
412
-	TURN_OFF_HEATERS
413
-	M106 S0
414
-	{client.user_cancel_macro|default("")}
415
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
416
-	
417
-	SET_PAUSE_NEXT_LAYER ENABLE=0
418
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
419
-	CANCEL_PRINT_BASE
420
-
421
-[gcode_macro PAUSE]
422
-description = Pause the actual running print
423
-rename_existing = PAUSE_BASE
424
-gcode = 
425
-	
426
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
427
-	{% set idle_timeout = client.idle_timeout|default(0) %}
428
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
429
-	{% set restore = False if printer.toolhead.extruder == ''
430
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
431
-	
432
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
433
-	
434
-	{% if idle_timeout > 0 %}
435
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
436
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
437
-	{% endif %}
438
-	PAUSE_BASE
439
-	{client.user_pause_macro|default("")}
440
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
441
-
442
-[gcode_macro RESUME]
443
-description = Resume the actual running print
444
-rename_existing = RESUME_BASE
445
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
446
-variable_restore_idle_timeout = 0
447
-variable_idle_state = False
448
-gcode = 
449
-	
450
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
451
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
452
-	{% set sp_move = client.speed_move|default(velocity) %}
453
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
454
-	else True if not printer[client.runout_sensor].enabled
455
-	else printer[client.runout_sensor].filament_detected %}
456
-	{% set can_extrude = True if printer.toolhead.extruder == ''
457
-	else printer[printer.toolhead.extruder].can_extrude %}
458
-	{% set do_resume = False %}
459
-	{% set prompt_txt = [] %}
460
-	
461
-	
462
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
463
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
464
-	{% if last_extruder_temp.restore %}
465
-	
466
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
467
-	M109 S{last_extruder_temp.temp}
468
-	{% set do_resume = True %}
469
-	{% elif can_extrude %}
470
-	{% set do_resume = True %}
471
-	{% else %}
472
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
473
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
474
-	{% endif %}
475
-	
476
-	{% elif can_extrude %}
477
-	{% set do_resume = True %}
478
-	{% else %}
479
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
480
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
481
-	{% endif %}
482
-	{% if runout_resume %}
483
-	{% if do_resume %}
484
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
485
-	{client.user_resume_macro|default("")}
486
-	_CLIENT_EXTRUDE
487
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
488
-	{% endif %}
489
-	{% else %}
490
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
491
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
492
-	{% endif %}
493
-	
494
-	{% if not (runout_resume and do_resume) %}
495
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
496
-	{% for element in prompt_txt %}
497
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
498
-	{% endfor %}
499
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
500
-	RESPOND TYPE=command MSG="action:prompt_show"
501
-	{% endif %}
502
-
503
-[gcode_macro SET_PAUSE_NEXT_LAYER]
504
-description = Enable a pause if the next layer is reached
505
-gcode = 
506
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
507
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
508
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
509
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
510
-
511
-[gcode_macro SET_PAUSE_AT_LAYER]
512
-description = Enable/disable a pause if a given layer number is reached
513
-gcode = 
514
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
515
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
516
-	else params.LAYER is defined %}
517
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
518
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
519
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
520
-
521
-[gcode_macro SET_PRINT_STATS_INFO]
522
-rename_existing = SET_PRINT_STATS_INFO_BASE
523
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
524
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
525
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
526
-gcode = 
527
-	{% if pause_next_layer.enable %}
528
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
529
-	{pause_next_layer.call}
530
-	SET_PAUSE_NEXT_LAYER ENABLE=0
531
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
532
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
533
-	{pause_at_layer.call}
534
-	SET_PAUSE_AT_LAYER ENABLE=0
535
-	{% endif %}
536
-	SET_PRINT_STATS_INFO_BASE {rawparams}
537
-
538
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
539
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
540
-gcode = 
541
-	
542
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
543
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
544
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
545
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
546
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
547
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
548
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
549
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
550
-	
551
-	{% set origin    = printer.gcode_move.homing_origin %}
552
-	{% set act       = printer.gcode_move.gcode_position %}
553
-	{% set max       = printer.toolhead.axis_maximum %}
554
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
555
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
556
-	else False %}
557
-	
558
-	{% set z_min = params.Z_MIN|default(0)|float %}
559
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
560
-	{% set x_park = params.X       if params.X is defined
561
-	else custom_park_x  if use_custom
562
-	else 0.0            if round_bed
563
-	else (max.x - 5.0) %}
564
-	{% set y_park = params.Y       if params.Y is defined
565
-	else custom_park_y  if use_custom
566
-	else (max.y - 5.0)  if round_bed and z_park < cone
567
-	else 0.0            if round_bed
568
-	else (max.y - 5.0) %}
569
-	
570
-	_CLIENT_RETRACT
571
-	{% if "xyz" in printer.toolhead.homed_axes %}
572
-	G90
573
-	G1 Z{z_park} F{sp_hop}
574
-	G1 X{x_park} Y{y_park} F{sp_move}
575
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
576
-	{% else %}
577
-	RESPOND TYPE=echo MSG='Printer not homed'
578
-	{% endif %}
579
-
580
-[gcode_macro _CLIENT_EXTRUDE]
581
-description = Extrudes, if the extruder is hot enough
582
-gcode = 
583
-	
584
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
585
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
586
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
587
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
588
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
589
-	
590
-	{% if printer.toolhead.extruder != '' %}
591
-	{% if printer[printer.toolhead.extruder].can_extrude %}
592
-	{% if use_fw_retract %}
593
-	{% if length < 0 %}
594
-	G10
595
-	{% else %}
596
-	G11
597
-	{% endif %}
598
-	{% else %}
599
-	M83
600
-	G1 E{length} F{(speed|float|abs) * 60}
601
-	{% if absolute_extrude %}
602
-	M82
603
-	{% endif %}
604
-	{% endif %}
605
-	{% else %}
606
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
607
-	{% endif %}
608
-	{% endif %}
609
-
610
-[gcode_macro _CLIENT_RETRACT]
611
-description = Retracts, if the extruder is hot enough
612
-gcode = 
613
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
614
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
615
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
616
-	
617
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
618
-
619
-[gcode_macro _CLIENT_LINEAR_MOVE]
620
-description = Linear move with save and restore of the gcode state
621
-gcode = 
622
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
623
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
624
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
625
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
626
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
627
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
628
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
629
-	SAVE_GCODE_STATE NAME=_client_movement
630
-	{% if x_move or y_move or z_move %}
631
-	G9{ 0 if ABSOLUTE else 1 }
632
-	{% endif %}
633
-	{% if e_move %}
634
-	M8{ 2 if ABSOLUTE_E else 3 }
635
-	{% endif %}
636
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
637
-	RESTORE_GCODE_STATE NAME=_client_movement
638
-
639
-[mcu]
640
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
641
-
642
-[stepper_x]
643
-step_pin = PE3
644
-dir_pin = !PE2
645
-enable_pin = !PE4
646
-microsteps = 16
647
-rotation_distance = 40
648
-endstop_pin = PA15
649
-position_endstop = 0
650
-position_max = 300
651
-homing_speed = 50
652
-
653
-[stepper_y]
654
-step_pin = PE0
655
-dir_pin = !PB9
656
-enable_pin = !PE1
657
-microsteps = 16
658
-rotation_distance = 40
659
-endstop_pin = !PD2
660
-position_endstop = 0
661
-position_max = 300
662
-homing_speed = 50
663
-
664
-[stepper_z]
665
-step_pin = PB5
666
-dir_pin = PB4
667
-enable_pin = !PB8
668
-microsteps = 16
669
-rotation_distance = 8
670
-endstop_pin = !PC8
671
-position_endstop = 0.5
672
-position_max = 200
673
-
674
-[stepper_z1]
675
-step_pin = PD15
676
-dir_pin = !PA1
677
-enable_pin = !PA3
678
-microsteps = 16
679
-rotation_distance = 8
680
-
681
-[extruder]
682
-step_pin = PD6
683
-dir_pin = !PD3
684
-enable_pin = !PB3
685
-microsteps = 16
686
-rotation_distance = 33.500
687
-nozzle_diameter = 0.400
688
-filament_diameter = 1.750
689
-heater_pin = PE5
690
-sensor_type = ATC Semitec 104GT-2
691
-sensor_pin = PC1
692
-control = pid
693
-pid_kp = 14.669
694
-pid_ki = 0.572
695
-pid_kd = 94.068
696
-min_temp = 0
697
-max_temp = 250
698
-
699
-[heater_bed]
700
-heater_pin = PA0
701
-sensor_type = EPCOS 100K B57560G104F
702
-sensor_pin = PC0
703
-control = pid
704
-pid_kp = 325.10
705
-pid_ki = 63.35
706
-pid_kd = 417.10
707
-min_temp = 0
708
-max_temp = 130
709
-
710
-[fan]
711
-pin = PC14
712
-
713
-[printer]
714
-kinematics = corexy
715
-max_velocity = 300
716
-max_accel = 3000
717
-max_z_velocity = 25
718
-max_z_accel = 30
719
-
720
-[board_pins]
721
-aliases = 
722
-	
723
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
724
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
725
-	
726
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
727
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
728
-=======================
729
-Extruder max_extrude_ratio=0.266081
730
-mcu 'mcu': Starting serial connect
731
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
732
-webhooks client 548576811024: New connection
733
-webhooks client 548576811024: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
734
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
735
-Attempting MCU 'mcu' reset
736
-Unhandled exception during post run
737
-Traceback (most recent call last):
738
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
739
-    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
740
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
741
-FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
742
-
743
-During handling of the above exception, another exception occurred:
744
-
745
-Traceback (most recent call last):
746
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
747
-    self.send_event("klippy:firmware_restart")
748
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
749
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
750
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
751
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
752
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
753
-            ^^^^^^^^^^^
754
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
755
-    self._restart_arduino()
756
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
757
-    serialhdl.arduino_reset(self._serialport, self._reactor)
758
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
759
-    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
760
-          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
761
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
762
-    self.open()
763
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
764
-    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
765
-serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
766
-Restarting printer
767
-Start printer at Wed Dec 11 08:23:11 2024 (1733901791.1 862.6)
768
-===== Config file =====
769
-[virtual_sdcard]
770
-path = /home/countcobolt/printer_data/gcodes
771
-on_error_gcode = CANCEL_PRINT
772
-
773
-[pause_resume]
774
-
775
-[display_status]
776
-
777
-[respond]
778
-
779
-[gcode_macro CANCEL_PRINT]
780
-description = Cancel the actual running print
781
-rename_existing = CANCEL_PRINT_BASE
782
-gcode = 
783
-	
784
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
785
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
786
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
787
-	
788
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
789
-	else "X=" ~ client.park_at_cancel_x %}
790
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
791
-	else "Y=" ~ client.park_at_cancel_y %}
792
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
793
-	
794
-	
795
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
796
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
797
-	{% endif %}
798
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
799
-	_CLIENT_RETRACT LENGTH={retract}
800
-	TURN_OFF_HEATERS
801
-	M106 S0
802
-	{client.user_cancel_macro|default("")}
803
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
804
-	
805
-	SET_PAUSE_NEXT_LAYER ENABLE=0
806
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
807
-	CANCEL_PRINT_BASE
808
-
809
-[gcode_macro PAUSE]
810
-description = Pause the actual running print
811
-rename_existing = PAUSE_BASE
812
-gcode = 
813
-	
814
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
815
-	{% set idle_timeout = client.idle_timeout|default(0) %}
816
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
817
-	{% set restore = False if printer.toolhead.extruder == ''
818
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
819
-	
820
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
821
-	
822
-	{% if idle_timeout > 0 %}
823
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
824
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
825
-	{% endif %}
826
-	PAUSE_BASE
827
-	{client.user_pause_macro|default("")}
828
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
829
-
830
-[gcode_macro RESUME]
831
-description = Resume the actual running print
832
-rename_existing = RESUME_BASE
833
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
834
-variable_restore_idle_timeout = 0
835
-variable_idle_state = False
836
-gcode = 
837
-	
838
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
839
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
840
-	{% set sp_move = client.speed_move|default(velocity) %}
841
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
842
-	else True if not printer[client.runout_sensor].enabled
843
-	else printer[client.runout_sensor].filament_detected %}
844
-	{% set can_extrude = True if printer.toolhead.extruder == ''
845
-	else printer[printer.toolhead.extruder].can_extrude %}
846
-	{% set do_resume = False %}
847
-	{% set prompt_txt = [] %}
848
-	
849
-	
850
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
851
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
852
-	{% if last_extruder_temp.restore %}
853
-	
854
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
855
-	M109 S{last_extruder_temp.temp}
856
-	{% set do_resume = True %}
857
-	{% elif can_extrude %}
858
-	{% set do_resume = True %}
859
-	{% else %}
860
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
861
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
862
-	{% endif %}
863
-	
864
-	{% elif can_extrude %}
865
-	{% set do_resume = True %}
866
-	{% else %}
867
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
868
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
869
-	{% endif %}
870
-	{% if runout_resume %}
871
-	{% if do_resume %}
872
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
873
-	{client.user_resume_macro|default("")}
874
-	_CLIENT_EXTRUDE
875
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
876
-	{% endif %}
877
-	{% else %}
878
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
879
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
880
-	{% endif %}
881
-	
882
-	{% if not (runout_resume and do_resume) %}
883
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
884
-	{% for element in prompt_txt %}
885
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
886
-	{% endfor %}
887
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
888
-	RESPOND TYPE=command MSG="action:prompt_show"
889
-	{% endif %}
890
-
891
-[gcode_macro SET_PAUSE_NEXT_LAYER]
892
-description = Enable a pause if the next layer is reached
893
-gcode = 
894
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
895
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
896
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
897
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
898
-
899
-[gcode_macro SET_PAUSE_AT_LAYER]
900
-description = Enable/disable a pause if a given layer number is reached
901
-gcode = 
902
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
903
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
904
-	else params.LAYER is defined %}
905
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
906
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
907
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
908
-
909
-[gcode_macro SET_PRINT_STATS_INFO]
910
-rename_existing = SET_PRINT_STATS_INFO_BASE
911
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
912
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
913
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
914
-gcode = 
915
-	{% if pause_next_layer.enable %}
916
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
917
-	{pause_next_layer.call}
918
-	SET_PAUSE_NEXT_LAYER ENABLE=0
919
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
920
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
921
-	{pause_at_layer.call}
922
-	SET_PAUSE_AT_LAYER ENABLE=0
923
-	{% endif %}
924
-	SET_PRINT_STATS_INFO_BASE {rawparams}
925
-
926
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
927
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
928
-gcode = 
929
-	
930
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
931
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
932
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
933
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
934
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
935
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
936
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
937
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
938
-	
939
-	{% set origin    = printer.gcode_move.homing_origin %}
940
-	{% set act       = printer.gcode_move.gcode_position %}
941
-	{% set max       = printer.toolhead.axis_maximum %}
942
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
943
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
944
-	else False %}
945
-	
946
-	{% set z_min = params.Z_MIN|default(0)|float %}
947
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
948
-	{% set x_park = params.X       if params.X is defined
949
-	else custom_park_x  if use_custom
950
-	else 0.0            if round_bed
951
-	else (max.x - 5.0) %}
952
-	{% set y_park = params.Y       if params.Y is defined
953
-	else custom_park_y  if use_custom
954
-	else (max.y - 5.0)  if round_bed and z_park < cone
955
-	else 0.0            if round_bed
956
-	else (max.y - 5.0) %}
957
-	
958
-	_CLIENT_RETRACT
959
-	{% if "xyz" in printer.toolhead.homed_axes %}
960
-	G90
961
-	G1 Z{z_park} F{sp_hop}
962
-	G1 X{x_park} Y{y_park} F{sp_move}
963
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
964
-	{% else %}
965
-	RESPOND TYPE=echo MSG='Printer not homed'
966
-	{% endif %}
967
-
968
-[gcode_macro _CLIENT_EXTRUDE]
969
-description = Extrudes, if the extruder is hot enough
970
-gcode = 
971
-	
972
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
973
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
974
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
975
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
976
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
977
-	
978
-	{% if printer.toolhead.extruder != '' %}
979
-	{% if printer[printer.toolhead.extruder].can_extrude %}
980
-	{% if use_fw_retract %}
981
-	{% if length < 0 %}
982
-	G10
983
-	{% else %}
984
-	G11
985
-	{% endif %}
986
-	{% else %}
987
-	M83
988
-	G1 E{length} F{(speed|float|abs) * 60}
989
-	{% if absolute_extrude %}
990
-	M82
991
-	{% endif %}
992
-	{% endif %}
993
-	{% else %}
994
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
995
-	{% endif %}
996
-	{% endif %}
997
-
998
-[gcode_macro _CLIENT_RETRACT]
999
-description = Retracts, if the extruder is hot enough
1000
-gcode = 
1001
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1002
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
1003
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
1004
-	
1005
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
1006
-
1007
-[gcode_macro _CLIENT_LINEAR_MOVE]
1008
-description = Linear move with save and restore of the gcode state
1009
-gcode = 
1010
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
1011
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
1012
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
1013
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
1014
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
1015
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
1016
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
1017
-	SAVE_GCODE_STATE NAME=_client_movement
1018
-	{% if x_move or y_move or z_move %}
1019
-	G9{ 0 if ABSOLUTE else 1 }
1020
-	{% endif %}
1021
-	{% if e_move %}
1022
-	M8{ 2 if ABSOLUTE_E else 3 }
1023
-	{% endif %}
1024
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
1025
-	RESTORE_GCODE_STATE NAME=_client_movement
1026
-
1027
-[mcu]
1028
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
1029
-
1030
-[stepper_x]
1031
-step_pin = PE3
1032
-dir_pin = !PE2
1033
-enable_pin = !PE4
1034
-microsteps = 16
1035
-rotation_distance = 40
1036
-endstop_pin = PA15
1037
-position_endstop = 0
1038
-position_max = 300
1039
-homing_speed = 50
1040
-
1041
-[stepper_y]
1042
-step_pin = PE0
1043
-dir_pin = !PB9
1044
-enable_pin = !PE1
1045
-microsteps = 16
1046
-rotation_distance = 40
1047
-endstop_pin = !PD2
1048
-position_endstop = 0
1049
-position_max = 300
1050
-homing_speed = 50
1051
-
1052
-[stepper_z]
1053
-step_pin = PB5
1054
-dir_pin = PB4
1055
-enable_pin = !PB8
1056
-microsteps = 16
1057
-rotation_distance = 8
1058
-endstop_pin = !PC8
1059
-position_endstop = 0.5
1060
-position_max = 200
1061
-
1062
-[stepper_z1]
1063
-step_pin = PD15
1064
-dir_pin = !PA1
1065
-enable_pin = !PA3
1066
-microsteps = 16
1067
-rotation_distance = 8
1068
-
1069
-[extruder]
1070
-step_pin = PD6
1071
-dir_pin = !PD3
1072
-enable_pin = !PB3
1073
-microsteps = 16
1074
-rotation_distance = 33.500
1075
-nozzle_diameter = 0.400
1076
-filament_diameter = 1.750
1077
-heater_pin = PE5
1078
-sensor_type = ATC Semitec 104GT-2
1079
-sensor_pin = PC1
1080
-control = pid
1081
-pid_kp = 14.669
1082
-pid_ki = 0.572
1083
-pid_kd = 94.068
1084
-min_temp = 0
1085
-max_temp = 250
1086
-
1087
-[heater_bed]
1088
-heater_pin = PA0
1089
-sensor_type = EPCOS 100K B57560G104F
1090
-sensor_pin = PC0
1091
-control = pid
1092
-pid_kp = 325.10
1093
-pid_ki = 63.35
1094
-pid_kd = 417.10
1095
-min_temp = 0
1096
-max_temp = 130
1097
-
1098
-[fan]
1099
-pin = PC14
1100
-
1101
-[printer]
1102
-kinematics = corexy
1103
-max_velocity = 300
1104
-max_accel = 3000
1105
-max_z_velocity = 25
1106
-max_z_accel = 30
1107
-
1108
-[board_pins]
1109
-aliases = 
1110
-	
1111
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
1112
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
1113
-	
1114
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
1115
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
1116
-=======================
1117
-Extruder max_extrude_ratio=0.266081
1118
-mcu 'mcu': Starting serial connect
1119
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1120
-webhooks client 548575050192: New connection
1121
-webhooks client 548575050192: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
1122
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1123
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1124
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1125
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1126
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1127
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1128
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1129
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1130
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1131
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1132
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1133
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1134
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1135
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1136
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1137
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1138
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1139
-MCU error during connect
1140
-Traceback (most recent call last):
1141
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 793, in _mcu_identify
1142
-    self._serial.connect_uart(self._serialport, self._baud, rts)
1143
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 183, in connect_uart
1144
-    self._error("Unable to connect")
1145
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 61, in _error
1146
-    raise error(self.warn_prefix + (msg % params))
1147
-serialhdl.error: mcu 'mcu': Unable to connect
1148
-
1149
-During handling of the above exception, another exception occurred:
1150
-
1151
-Traceback (most recent call last):
1152
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 131, in _connect
1153
-    self.send_event("klippy:mcu_identify")
1154
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
1155
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1156
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1157
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
1158
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1159
-            ^^^^^^^^^^^
1160
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 798, in _mcu_identify
1161
-    raise error(str(e))
1162
-mcu.error: mcu 'mcu': Unable to connect
1163
-mcu 'mcu': Unable to connect
1164
-Once the underlying issue is corrected, use the
1165
-"FIRMWARE_RESTART" command to reset the firmware, reload the
1166
-config, and restart the host software.
1167
-Error configuring printer
1168
-
1169
-Build file /home/countcobolt/klipper/klippy/../.config(3654): Tue Dec 10 19:59:19 2024
1170
-========= Last MCU build config =========
1171
-CONFIG_LOW_LEVEL_OPTIONS=y
1172
-# CONFIG_MACH_AVR is not set
1173
-# CONFIG_MACH_ATSAM is not set
1174
-# CONFIG_MACH_ATSAMD is not set
1175
-# CONFIG_MACH_LPC176X is not set
1176
-CONFIG_MACH_STM32=y
1177
-# CONFIG_MACH_HC32F460 is not set
1178
-# CONFIG_MACH_RPXXXX is not set
1179
-# CONFIG_MACH_PRU is not set
1180
-# CONFIG_MACH_AR100 is not set
1181
-# CONFIG_MACH_LINUX is not set
1182
-# CONFIG_MACH_SIMU is not set
1183
-CONFIG_BOARD_DIRECTORY="stm32"
1184
-CONFIG_MCU="stm32f407xx"
1185
-CONFIG_CLOCK_FREQ=168000000
1186
-CONFIG_USBSERIAL=y
1187
-CONFIG_FLASH_SIZE=0x80000
1188
-CONFIG_FLASH_BOOT_ADDRESS=0x8000000
1189
-CONFIG_RAM_START=0x20000000
1190
-CONFIG_RAM_SIZE=0x20000
1191
-CONFIG_STACK_SIZE=512
1192
-CONFIG_FLASH_APPLICATION_ADDRESS=0x800C000
1193
-CONFIG_STM32_SELECT=y
1194
-# CONFIG_MACH_STM32F103 is not set
1195
-# CONFIG_MACH_STM32F207 is not set
1196
-# CONFIG_MACH_STM32F401 is not set
1197
-# CONFIG_MACH_STM32F405 is not set
1198
-CONFIG_MACH_STM32F407=y
1199
-# CONFIG_MACH_STM32F429 is not set
1200
-# CONFIG_MACH_STM32F446 is not set
1201
-# CONFIG_MACH_STM32F765 is not set
1202
-# CONFIG_MACH_STM32F031 is not set
1203
-# CONFIG_MACH_STM32F042 is not set
1204
-# CONFIG_MACH_STM32F070 is not set
1205
-# CONFIG_MACH_STM32F072 is not set
1206
-# CONFIG_MACH_STM32G070 is not set
1207
-# CONFIG_MACH_STM32G071 is not set
1208
-# CONFIG_MACH_STM32G0B0 is not set
1209
-# CONFIG_MACH_STM32G0B1 is not set
1210
-# CONFIG_MACH_STM32G431 is not set
1211
-# CONFIG_MACH_STM32G474 is not set
1212
-# CONFIG_MACH_STM32H723 is not set
1213
-# CONFIG_MACH_STM32H743 is not set
1214
-# CONFIG_MACH_STM32H750 is not set
1215
-# CONFIG_MACH_STM32L412 is not set
1216
-# CONFIG_MACH_N32G452 is not set
1217
-# CONFIG_MACH_N32G455 is not set
1218
-CONFIG_MACH_STM32F4=y
1219
-CONFIG_MACH_STM32F4x5=y
1220
-CONFIG_HAVE_STM32_USBOTG=y
1221
-CONFIG_HAVE_STM32_CANBUS=y
1222
-CONFIG_HAVE_STM32_USBCANBUS=y
1223
-CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000
1224
-# CONFIG_STM32_FLASH_START_8000 is not set
1225
-# CONFIG_STM32_FLASH_START_20200 is not set
1226
-CONFIG_STM32_FLASH_START_C000=y
1227
-# CONFIG_STM32_FLASH_START_10000 is not set
1228
-# CONFIG_STM32_FLASH_START_4000 is not set
1229
-# CONFIG_STM32_FLASH_START_0000 is not set
1230
-CONFIG_STM32_CLOCK_REF_8M=y
1231
-# CONFIG_STM32_CLOCK_REF_12M is not set
1232
-# CONFIG_STM32_CLOCK_REF_16M is not set
1233
-# CONFIG_STM32_CLOCK_REF_20M is not set
1234
-# CONFIG_STM32_CLOCK_REF_24M is not set
1235
-# CONFIG_STM32_CLOCK_REF_25M is not set
1236
-# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
1237
-CONFIG_CLOCK_REF_FREQ=8000000
1238
-CONFIG_STM32F0_TRIM=16
1239
-CONFIG_STM32_USB_PA11_PA12=y
1240
-# CONFIG_STM32_SERIAL_USART1 is not set
1241
-# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
1242
-# CONFIG_STM32_SERIAL_USART2 is not set
1243
-# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
1244
-# CONFIG_STM32_SERIAL_USART3 is not set
1245
-# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
1246
-# CONFIG_STM32_CANBUS_PA11_PA12 is not set
1247
-# CONFIG_STM32_CANBUS_PA11_PB9 is not set
1248
-# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
1249
-# CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set
1250
-# CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set
1251
-# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
1252
-# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
1253
-# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
1254
-CONFIG_USB=y
1255
-CONFIG_USB_VENDOR_ID=0x1d50
1256
-CONFIG_USB_DEVICE_ID=0x614e
1257
-CONFIG_USB_SERIAL_NUMBER_CHIPID=y
1258
-CONFIG_USB_SERIAL_NUMBER="12345"
1259
-
1260
-#
1261
-# USB ids
1262
-#
1263
-# end of USB ids
1264
-
1265
-CONFIG_WANT_GPIO_BITBANGING=y
1266
-CONFIG_WANT_DISPLAYS=y
1267
-CONFIG_WANT_SENSORS=y
1268
-CONFIG_WANT_LIS2DW=y
1269
-CONFIG_WANT_LDC1612=y
1270
-CONFIG_WANT_HX71X=y
1271
-CONFIG_WANT_ADS1220=y
1272
-CONFIG_WANT_SOFTWARE_I2C=y
1273
-CONFIG_WANT_SOFTWARE_SPI=y
1274
-CONFIG_NEED_SENSOR_BULK=y
1275
-CONFIG_CANBUS_FREQUENCY=1000000
1276
-CONFIG_INITIAL_PINS=""
1277
-CONFIG_HAVE_GPIO=y
1278
-CONFIG_HAVE_GPIO_ADC=y
1279
-CONFIG_HAVE_GPIO_SPI=y
1280
-CONFIG_HAVE_GPIO_SDIO=y
1281
-CONFIG_HAVE_GPIO_I2C=y
1282
-CONFIG_HAVE_GPIO_HARD_PWM=y
1283
-CONFIG_HAVE_STRICT_TIMING=y
1284
-CONFIG_HAVE_CHIPID=y
1285
-CONFIG_HAVE_STEPPER_BOTH_EDGE=y
1286
-CONFIG_HAVE_BOOTLOADER_REQUEST=y
1287
-CONFIG_INLINE_STEPPER_HACK=y
1288
-=======================
1289
-Build file /home/countcobolt/klipper/klippy/../out/klipper.dict(9334): Tue Dec 10 19:59:42 2024
1290
-Last MCU build version: v0.12.0-396-gb7233d119
1291
-Last MCU build tools: gcc: (15:12.2.rel1-1) 12.2.1 20221205 binutils: (2.40-2+18+b1) 2.40
1292
-Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c2a=PH4,PH5 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_i2c3a=PH7,PH8 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi2b=PI2,PI3,PI1 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 CLOCK_FREQ=168000000 MCU=stm32f407xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
1293
-Build file /home/countcobolt/klipper/klippy/../out/klipper.elf(1243184): Tue Dec 10 19:59:48 2024
1294
-Starting Klippy...
1295
-Args: ['/home/countcobolt/klipper/klippy/klippy.py', '/home/countcobolt/printer_data/config/printer.cfg', '-I', '/home/countcobolt/printer_data/comms/klippy.serial', '-l', '/home/countcobolt/printer_data/logs/klippy.log', '-a', '/home/countcobolt/printer_data/comms/klippy.sock']
1296
-Git version: 'v0.12.0-396-gb7233d119'
1297
-Branch: master
1298
-Remote: origin
1299
-Tracked URL: https://github.com/Klipper3d/klipper
1300
-CPU: 4 core ?
1301
-Python: '3.11.2 (main, Sep 14 2024, 03:00:30) [GCC 12.2.0]'
1302
-Start printer at Wed Dec 11 08:28:25 2024 (1733902105.1 18.7)
1303
-===== Config file =====
1304
-[virtual_sdcard]
1305
-path = /home/countcobolt/printer_data/gcodes
1306
-on_error_gcode = CANCEL_PRINT
1307
-
1308
-[pause_resume]
1309
-
1310
-[display_status]
1311
-
1312
-[respond]
1313
-
1314
-[gcode_macro CANCEL_PRINT]
1315
-description = Cancel the actual running print
1316
-rename_existing = CANCEL_PRINT_BASE
1317
-gcode = 
1318
-	
1319
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1320
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
1321
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
1322
-	
1323
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
1324
-	else "X=" ~ client.park_at_cancel_x %}
1325
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
1326
-	else "Y=" ~ client.park_at_cancel_y %}
1327
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
1328
-	
1329
-	
1330
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
1331
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
1332
-	{% endif %}
1333
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
1334
-	_CLIENT_RETRACT LENGTH={retract}
1335
-	TURN_OFF_HEATERS
1336
-	M106 S0
1337
-	{client.user_cancel_macro|default("")}
1338
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1339
-	
1340
-	SET_PAUSE_NEXT_LAYER ENABLE=0
1341
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
1342
-	CANCEL_PRINT_BASE
1343
-
1344
-[gcode_macro PAUSE]
1345
-description = Pause the actual running print
1346
-rename_existing = PAUSE_BASE
1347
-gcode = 
1348
-	
1349
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1350
-	{% set idle_timeout = client.idle_timeout|default(0) %}
1351
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
1352
-	{% set restore = False if printer.toolhead.extruder == ''
1353
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
1354
-	
1355
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
1356
-	
1357
-	{% if idle_timeout > 0 %}
1358
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
1359
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
1360
-	{% endif %}
1361
-	PAUSE_BASE
1362
-	{client.user_pause_macro|default("")}
1363
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
1364
-
1365
-[gcode_macro RESUME]
1366
-description = Resume the actual running print
1367
-rename_existing = RESUME_BASE
1368
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
1369
-variable_restore_idle_timeout = 0
1370
-variable_idle_state = False
1371
-gcode = 
1372
-	
1373
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1374
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
1375
-	{% set sp_move = client.speed_move|default(velocity) %}
1376
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
1377
-	else True if not printer[client.runout_sensor].enabled
1378
-	else printer[client.runout_sensor].filament_detected %}
1379
-	{% set can_extrude = True if printer.toolhead.extruder == ''
1380
-	else printer[printer.toolhead.extruder].can_extrude %}
1381
-	{% set do_resume = False %}
1382
-	{% set prompt_txt = [] %}
1383
-	
1384
-	
1385
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
1386
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1387
-	{% if last_extruder_temp.restore %}
1388
-	
1389
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
1390
-	M109 S{last_extruder_temp.temp}
1391
-	{% set do_resume = True %}
1392
-	{% elif can_extrude %}
1393
-	{% set do_resume = True %}
1394
-	{% else %}
1395
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1396
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1397
-	{% endif %}
1398
-	
1399
-	{% elif can_extrude %}
1400
-	{% set do_resume = True %}
1401
-	{% else %}
1402
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1403
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1404
-	{% endif %}
1405
-	{% if runout_resume %}
1406
-	{% if do_resume %}
1407
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
1408
-	{client.user_resume_macro|default("")}
1409
-	_CLIENT_EXTRUDE
1410
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
1411
-	{% endif %}
1412
-	{% else %}
1413
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
1414
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
1415
-	{% endif %}
1416
-	
1417
-	{% if not (runout_resume and do_resume) %}
1418
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
1419
-	{% for element in prompt_txt %}
1420
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
1421
-	{% endfor %}
1422
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
1423
-	RESPOND TYPE=command MSG="action:prompt_show"
1424
-	{% endif %}
1425
-
1426
-[gcode_macro SET_PAUSE_NEXT_LAYER]
1427
-description = Enable a pause if the next layer is reached
1428
-gcode = 
1429
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
1430
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
1431
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
1432
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
1433
-
1434
-[gcode_macro SET_PAUSE_AT_LAYER]
1435
-description = Enable/disable a pause if a given layer number is reached
1436
-gcode = 
1437
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
1438
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
1439
-	else params.LAYER is defined %}
1440
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
1441
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
1442
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
1443
-
1444
-[gcode_macro SET_PRINT_STATS_INFO]
1445
-rename_existing = SET_PRINT_STATS_INFO_BASE
1446
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
1447
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
1448
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
1449
-gcode = 
1450
-	{% if pause_next_layer.enable %}
1451
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
1452
-	{pause_next_layer.call}
1453
-	SET_PAUSE_NEXT_LAYER ENABLE=0
1454
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
1455
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
1456
-	{pause_at_layer.call}
1457
-	SET_PAUSE_AT_LAYER ENABLE=0
1458
-	{% endif %}
1459
-	SET_PRINT_STATS_INFO_BASE {rawparams}
1460
-
1461
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
1462
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
1463
-gcode = 
1464
-	
1465
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1466
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
1467
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
1468
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
1469
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
1470
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
1471
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
1472
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
1473
-	
1474
-	{% set origin    = printer.gcode_move.homing_origin %}
1475
-	{% set act       = printer.gcode_move.gcode_position %}
1476
-	{% set max       = printer.toolhead.axis_maximum %}
1477
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
1478
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
1479
-	else False %}
1480
-	
1481
-	{% set z_min = params.Z_MIN|default(0)|float %}
1482
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
1483
-	{% set x_park = params.X       if params.X is defined
1484
-	else custom_park_x  if use_custom
1485
-	else 0.0            if round_bed
1486
-	else (max.x - 5.0) %}
1487
-	{% set y_park = params.Y       if params.Y is defined
1488
-	else custom_park_y  if use_custom
1489
-	else (max.y - 5.0)  if round_bed and z_park < cone
1490
-	else 0.0            if round_bed
1491
-	else (max.y - 5.0) %}
1492
-	
1493
-	_CLIENT_RETRACT
1494
-	{% if "xyz" in printer.toolhead.homed_axes %}
1495
-	G90
1496
-	G1 Z{z_park} F{sp_hop}
1497
-	G1 X{x_park} Y{y_park} F{sp_move}
1498
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
1499
-	{% else %}
1500
-	RESPOND TYPE=echo MSG='Printer not homed'
1501
-	{% endif %}
1502
-
1503
-[gcode_macro _CLIENT_EXTRUDE]
1504
-description = Extrudes, if the extruder is hot enough
1505
-gcode = 
1506
-	
1507
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1508
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
1509
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
1510
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
1511
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
1512
-	
1513
-	{% if printer.toolhead.extruder != '' %}
1514
-	{% if printer[printer.toolhead.extruder].can_extrude %}
1515
-	{% if use_fw_retract %}
1516
-	{% if length < 0 %}
1517
-	G10
1518
-	{% else %}
1519
-	G11
1520
-	{% endif %}
1521
-	{% else %}
1522
-	M83
1523
-	G1 E{length} F{(speed|float|abs) * 60}
1524
-	{% if absolute_extrude %}
1525
-	M82
1526
-	{% endif %}
1527
-	{% endif %}
1528
-	{% else %}
1529
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
1530
-	{% endif %}
1531
-	{% endif %}
1532
-
1533
-[gcode_macro _CLIENT_RETRACT]
1534
-description = Retracts, if the extruder is hot enough
1535
-gcode = 
1536
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1537
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
1538
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
1539
-	
1540
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
1541
-
1542
-[gcode_macro _CLIENT_LINEAR_MOVE]
1543
-description = Linear move with save and restore of the gcode state
1544
-gcode = 
1545
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
1546
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
1547
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
1548
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
1549
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
1550
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
1551
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
1552
-	SAVE_GCODE_STATE NAME=_client_movement
1553
-	{% if x_move or y_move or z_move %}
1554
-	G9{ 0 if ABSOLUTE else 1 }
1555
-	{% endif %}
1556
-	{% if e_move %}
1557
-	M8{ 2 if ABSOLUTE_E else 3 }
1558
-	{% endif %}
1559
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
1560
-	RESTORE_GCODE_STATE NAME=_client_movement
1561
-
1562
-[mcu]
1563
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
1564
-
1565
-[stepper_x]
1566
-step_pin = PE3
1567
-dir_pin = !PE2
1568
-enable_pin = !PE4
1569
-microsteps = 16
1570
-rotation_distance = 40
1571
-endstop_pin = PA15
1572
-position_endstop = 0
1573
-position_max = 300
1574
-homing_speed = 50
1575
-
1576
-[stepper_y]
1577
-step_pin = PE0
1578
-dir_pin = !PB9
1579
-enable_pin = !PE1
1580
-microsteps = 16
1581
-rotation_distance = 40
1582
-endstop_pin = !PD2
1583
-position_endstop = 0
1584
-position_max = 300
1585
-homing_speed = 50
1586
-
1587
-[stepper_z]
1588
-step_pin = PB5
1589
-dir_pin = PB4
1590
-enable_pin = !PB8
1591
-microsteps = 16
1592
-rotation_distance = 8
1593
-endstop_pin = !PC8
1594
-position_endstop = 0.5
1595
-position_max = 200
1596
-
1597
-[stepper_z1]
1598
-step_pin = PD15
1599
-dir_pin = !PA1
1600
-enable_pin = !PA3
1601
-microsteps = 16
1602
-rotation_distance = 8
1603
-
1604
-[extruder]
1605
-step_pin = PD6
1606
-dir_pin = !PD3
1607
-enable_pin = !PB3
1608
-microsteps = 16
1609
-rotation_distance = 33.500
1610
-nozzle_diameter = 0.400
1611
-filament_diameter = 1.750
1612
-heater_pin = PE5
1613
-sensor_type = ATC Semitec 104GT-2
1614
-sensor_pin = PC1
1615
-control = pid
1616
-pid_kp = 14.669
1617
-pid_ki = 0.572
1618
-pid_kd = 94.068
1619
-min_temp = 0
1620
-max_temp = 250
1621
-
1622
-[heater_bed]
1623
-heater_pin = PA0
1624
-sensor_type = EPCOS 100K B57560G104F
1625
-sensor_pin = PC0
1626
-control = pid
1627
-pid_kp = 325.10
1628
-pid_ki = 63.35
1629
-pid_kd = 417.10
1630
-min_temp = 0
1631
-max_temp = 130
1632
-
1633
-[fan]
1634
-pin = PC14
1635
-
1636
-[printer]
1637
-kinematics = corexy
1638
-max_velocity = 300
1639
-max_accel = 3000
1640
-max_z_velocity = 25
1641
-max_z_accel = 30
1642
-
1643
-[board_pins]
1644
-aliases = 
1645
-	
1646
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
1647
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
1648
-	
1649
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
1650
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
1651
-=======================
1652
-Extruder max_extrude_ratio=0.266081
1653
-mcu 'mcu': Starting serial connect
1654
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1655
-webhooks client 547739626384: New connection
1656
-webhooks client 547739626384: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
1657
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1658
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1659
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1660
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1661
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1662
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1663
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1664
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1665
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1666
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1667
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1668
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1669
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1670
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1671
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1672
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1673
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1674
-MCU error during connect
1675
-Traceback (most recent call last):
1676
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 793, in _mcu_identify
1677
-    self._serial.connect_uart(self._serialport, self._baud, rts)
1678
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 183, in connect_uart
1679
-    self._error("Unable to connect")
1680
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 61, in _error
1681
-    raise error(self.warn_prefix + (msg % params))
1682
-serialhdl.error: mcu 'mcu': Unable to connect
1683
-
1684
-During handling of the above exception, another exception occurred:
1685
-
1686
-Traceback (most recent call last):
1687
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 131, in _connect
1688
-    self.send_event("klippy:mcu_identify")
1689
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
1690
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1691
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1692
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
1693
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1694
-            ^^^^^^^^^^^
1695
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 798, in _mcu_identify
1696
-    raise error(str(e))
1697
-mcu.error: mcu 'mcu': Unable to connect
1698
-mcu 'mcu': Unable to connect
1699
-Once the underlying issue is corrected, use the
1700
-"FIRMWARE_RESTART" command to reset the firmware, reload the
1701
-config, and restart the host software.
1702
-Error configuring printer
1703
-
1704
-Build file /home/countcobolt/klipper/klippy/../.config(3654): Tue Dec 10 19:59:19 2024
1705
-========= Last MCU build config =========
1706
-CONFIG_LOW_LEVEL_OPTIONS=y
1707
-# CONFIG_MACH_AVR is not set
1708
-# CONFIG_MACH_ATSAM is not set
1709
-# CONFIG_MACH_ATSAMD is not set
1710
-# CONFIG_MACH_LPC176X is not set
1711
-CONFIG_MACH_STM32=y
1712
-# CONFIG_MACH_HC32F460 is not set
1713
-# CONFIG_MACH_RPXXXX is not set
1714
-# CONFIG_MACH_PRU is not set
1715
-# CONFIG_MACH_AR100 is not set
1716
-# CONFIG_MACH_LINUX is not set
1717
-# CONFIG_MACH_SIMU is not set
1718
-CONFIG_BOARD_DIRECTORY="stm32"
1719
-CONFIG_MCU="stm32f407xx"
1720
-CONFIG_CLOCK_FREQ=168000000
1721
-CONFIG_USBSERIAL=y
1722
-CONFIG_FLASH_SIZE=0x80000
1723
-CONFIG_FLASH_BOOT_ADDRESS=0x8000000
1724
-CONFIG_RAM_START=0x20000000
1725
-CONFIG_RAM_SIZE=0x20000
1726
-CONFIG_STACK_SIZE=512
1727
-CONFIG_FLASH_APPLICATION_ADDRESS=0x800C000
1728
-CONFIG_STM32_SELECT=y
1729
-# CONFIG_MACH_STM32F103 is not set
1730
-# CONFIG_MACH_STM32F207 is not set
1731
-# CONFIG_MACH_STM32F401 is not set
1732
-# CONFIG_MACH_STM32F405 is not set
1733
-CONFIG_MACH_STM32F407=y
1734
-# CONFIG_MACH_STM32F429 is not set
1735
-# CONFIG_MACH_STM32F446 is not set
1736
-# CONFIG_MACH_STM32F765 is not set
1737
-# CONFIG_MACH_STM32F031 is not set
1738
-# CONFIG_MACH_STM32F042 is not set
1739
-# CONFIG_MACH_STM32F070 is not set
1740
-# CONFIG_MACH_STM32F072 is not set
1741
-# CONFIG_MACH_STM32G070 is not set
1742
-# CONFIG_MACH_STM32G071 is not set
1743
-# CONFIG_MACH_STM32G0B0 is not set
1744
-# CONFIG_MACH_STM32G0B1 is not set
1745
-# CONFIG_MACH_STM32G431 is not set
1746
-# CONFIG_MACH_STM32G474 is not set
1747
-# CONFIG_MACH_STM32H723 is not set
1748
-# CONFIG_MACH_STM32H743 is not set
1749
-# CONFIG_MACH_STM32H750 is not set
1750
-# CONFIG_MACH_STM32L412 is not set
1751
-# CONFIG_MACH_N32G452 is not set
1752
-# CONFIG_MACH_N32G455 is not set
1753
-CONFIG_MACH_STM32F4=y
1754
-CONFIG_MACH_STM32F4x5=y
1755
-CONFIG_HAVE_STM32_USBOTG=y
1756
-CONFIG_HAVE_STM32_CANBUS=y
1757
-CONFIG_HAVE_STM32_USBCANBUS=y
1758
-CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000
1759
-# CONFIG_STM32_FLASH_START_8000 is not set
1760
-# CONFIG_STM32_FLASH_START_20200 is not set
1761
-CONFIG_STM32_FLASH_START_C000=y
1762
-# CONFIG_STM32_FLASH_START_10000 is not set
1763
-# CONFIG_STM32_FLASH_START_4000 is not set
1764
-# CONFIG_STM32_FLASH_START_0000 is not set
1765
-CONFIG_STM32_CLOCK_REF_8M=y
1766
-# CONFIG_STM32_CLOCK_REF_12M is not set
1767
-# CONFIG_STM32_CLOCK_REF_16M is not set
1768
-# CONFIG_STM32_CLOCK_REF_20M is not set
1769
-# CONFIG_STM32_CLOCK_REF_24M is not set
1770
-# CONFIG_STM32_CLOCK_REF_25M is not set
1771
-# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
1772
-CONFIG_CLOCK_REF_FREQ=8000000
1773
-CONFIG_STM32F0_TRIM=16
1774
-CONFIG_STM32_USB_PA11_PA12=y
1775
-# CONFIG_STM32_SERIAL_USART1 is not set
1776
-# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
1777
-# CONFIG_STM32_SERIAL_USART2 is not set
1778
-# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
1779
-# CONFIG_STM32_SERIAL_USART3 is not set
1780
-# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
1781
-# CONFIG_STM32_CANBUS_PA11_PA12 is not set
1782
-# CONFIG_STM32_CANBUS_PA11_PB9 is not set
1783
-# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
1784
-# CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set
1785
-# CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set
1786
-# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
1787
-# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
1788
-# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
1789
-CONFIG_USB=y
1790
-CONFIG_USB_VENDOR_ID=0x1d50
1791
-CONFIG_USB_DEVICE_ID=0x614e
1792
-CONFIG_USB_SERIAL_NUMBER_CHIPID=y
1793
-CONFIG_USB_SERIAL_NUMBER="12345"
1794
-
1795
-#
1796
-# USB ids
1797
-#
1798
-# end of USB ids
1799
-
1800
-CONFIG_WANT_GPIO_BITBANGING=y
1801
-CONFIG_WANT_DISPLAYS=y
1802
-CONFIG_WANT_SENSORS=y
1803
-CONFIG_WANT_LIS2DW=y
1804
-CONFIG_WANT_LDC1612=y
1805
-CONFIG_WANT_HX71X=y
1806
-CONFIG_WANT_ADS1220=y
1807
-CONFIG_WANT_SOFTWARE_I2C=y
1808
-CONFIG_WANT_SOFTWARE_SPI=y
1809
-CONFIG_NEED_SENSOR_BULK=y
1810
-CONFIG_CANBUS_FREQUENCY=1000000
1811
-CONFIG_INITIAL_PINS=""
1812
-CONFIG_HAVE_GPIO=y
1813
-CONFIG_HAVE_GPIO_ADC=y
1814
-CONFIG_HAVE_GPIO_SPI=y
1815
-CONFIG_HAVE_GPIO_SDIO=y
1816
-CONFIG_HAVE_GPIO_I2C=y
1817
-CONFIG_HAVE_GPIO_HARD_PWM=y
1818
-CONFIG_HAVE_STRICT_TIMING=y
1819
-CONFIG_HAVE_CHIPID=y
1820
-CONFIG_HAVE_STEPPER_BOTH_EDGE=y
1821
-CONFIG_HAVE_BOOTLOADER_REQUEST=y
1822
-CONFIG_INLINE_STEPPER_HACK=y
1823
-=======================
1824
-Build file /home/countcobolt/klipper/klippy/../out/klipper.dict(9334): Tue Dec 10 19:59:42 2024
1825
-Last MCU build version: v0.12.0-396-gb7233d119
1826
-Last MCU build tools: gcc: (15:12.2.rel1-1) 12.2.1 20221205 binutils: (2.40-2+18+b1) 2.40
1827
-Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c2a=PH4,PH5 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_i2c3a=PH7,PH8 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi2b=PI2,PI3,PI1 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 CLOCK_FREQ=168000000 MCU=stm32f407xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
1828
-Build file /home/countcobolt/klipper/klippy/../out/klipper.elf(1243184): Tue Dec 10 19:59:48 2024
1829
-Attempting MCU 'mcu' reset
1830
-Unhandled exception during post run
1831
-Traceback (most recent call last):
1832
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
1833
-    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
1834
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1835
-FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1836
-
1837
-During handling of the above exception, another exception occurred:
1838
-
1839
-Traceback (most recent call last):
1840
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
1841
-    self.send_event("klippy:firmware_restart")
1842
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
1843
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1844
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1845
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
1846
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1847
-            ^^^^^^^^^^^
1848
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
1849
-    self._restart_arduino()
1850
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
1851
-    serialhdl.arduino_reset(self._serialport, self._reactor)
1852
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
1853
-    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
1854
-          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1855
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
1856
-    self.open()
1857
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
1858
-    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
1859
-serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1860
-Restarting printer
1861
-Start printer at Wed Dec 11 08:43:45 2024 (1733903025.1 594.1)
1862
-===== Config file =====
1863
-[virtual_sdcard]
1864
-path = /home/countcobolt/printer_data/gcodes
1865
-on_error_gcode = CANCEL_PRINT
1866
-
1867
-[pause_resume]
1868
-
1869
-[display_status]
1870
-
1871
-[respond]
1872
-
1873
-[gcode_macro CANCEL_PRINT]
1874
-description = Cancel the actual running print
1875
-rename_existing = CANCEL_PRINT_BASE
1876
-gcode = 
1877
-	
1878
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1879
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
1880
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
1881
-	
1882
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
1883
-	else "X=" ~ client.park_at_cancel_x %}
1884
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
1885
-	else "Y=" ~ client.park_at_cancel_y %}
1886
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
1887
-	
1888
-	
1889
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
1890
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
1891
-	{% endif %}
1892
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
1893
-	_CLIENT_RETRACT LENGTH={retract}
1894
-	TURN_OFF_HEATERS
1895
-	M106 S0
1896
-	{client.user_cancel_macro|default("")}
1897
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1898
-	
1899
-	SET_PAUSE_NEXT_LAYER ENABLE=0
1900
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
1901
-	CANCEL_PRINT_BASE
1902
-
1903
-[gcode_macro PAUSE]
1904
-description = Pause the actual running print
1905
-rename_existing = PAUSE_BASE
1906
-gcode = 
1907
-	
1908
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1909
-	{% set idle_timeout = client.idle_timeout|default(0) %}
1910
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
1911
-	{% set restore = False if printer.toolhead.extruder == ''
1912
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
1913
-	
1914
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
1915
-	
1916
-	{% if idle_timeout > 0 %}
1917
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
1918
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
1919
-	{% endif %}
1920
-	PAUSE_BASE
1921
-	{client.user_pause_macro|default("")}
1922
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
1923
-
1924
-[gcode_macro RESUME]
1925
-description = Resume the actual running print
1926
-rename_existing = RESUME_BASE
1927
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
1928
-variable_restore_idle_timeout = 0
1929
-variable_idle_state = False
1930
-gcode = 
1931
-	
1932
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1933
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
1934
-	{% set sp_move = client.speed_move|default(velocity) %}
1935
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
1936
-	else True if not printer[client.runout_sensor].enabled
1937
-	else printer[client.runout_sensor].filament_detected %}
1938
-	{% set can_extrude = True if printer.toolhead.extruder == ''
1939
-	else printer[printer.toolhead.extruder].can_extrude %}
1940
-	{% set do_resume = False %}
1941
-	{% set prompt_txt = [] %}
1942
-	
1943
-	
1944
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
1945
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1946
-	{% if last_extruder_temp.restore %}
1947
-	
1948
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
1949
-	M109 S{last_extruder_temp.temp}
1950
-	{% set do_resume = True %}
1951
-	{% elif can_extrude %}
1952
-	{% set do_resume = True %}
1953
-	{% else %}
1954
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1955
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1956
-	{% endif %}
1957
-	
1958
-	{% elif can_extrude %}
1959
-	{% set do_resume = True %}
1960
-	{% else %}
1961
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1962
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1963
-	{% endif %}
1964
-	{% if runout_resume %}
1965
-	{% if do_resume %}
1966
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
1967
-	{client.user_resume_macro|default("")}
1968
-	_CLIENT_EXTRUDE
1969
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
1970
-	{% endif %}
1971
-	{% else %}
1972
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
1973
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
1974
-	{% endif %}
1975
-	
1976
-	{% if not (runout_resume and do_resume) %}
1977
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
1978
-	{% for element in prompt_txt %}
1979
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
1980
-	{% endfor %}
1981
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
1982
-	RESPOND TYPE=command MSG="action:prompt_show"
1983
-	{% endif %}
1984
-
1985
-[gcode_macro SET_PAUSE_NEXT_LAYER]
1986
-description = Enable a pause if the next layer is reached
1987
-gcode = 
1988
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
1989
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
1990
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
1991
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
1992
-
1993
-[gcode_macro SET_PAUSE_AT_LAYER]
1994
-description = Enable/disable a pause if a given layer number is reached
1995
-gcode = 
1996
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
1997
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
1998
-	else params.LAYER is defined %}
1999
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
2000
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
2001
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
2002
-
2003
-[gcode_macro SET_PRINT_STATS_INFO]
2004
-rename_existing = SET_PRINT_STATS_INFO_BASE
2005
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
2006
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
2007
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
2008
-gcode = 
2009
-	{% if pause_next_layer.enable %}
2010
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
2011
-	{pause_next_layer.call}
2012
-	SET_PAUSE_NEXT_LAYER ENABLE=0
2013
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
2014
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
2015
-	{pause_at_layer.call}
2016
-	SET_PAUSE_AT_LAYER ENABLE=0
2017
-	{% endif %}
2018
-	SET_PRINT_STATS_INFO_BASE {rawparams}
2019
-
2020
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
2021
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
2022
-gcode = 
2023
-	
2024
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2025
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2026
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
2027
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
2028
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
2029
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
2030
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
2031
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
2032
-	
2033
-	{% set origin    = printer.gcode_move.homing_origin %}
2034
-	{% set act       = printer.gcode_move.gcode_position %}
2035
-	{% set max       = printer.toolhead.axis_maximum %}
2036
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
2037
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
2038
-	else False %}
2039
-	
2040
-	{% set z_min = params.Z_MIN|default(0)|float %}
2041
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
2042
-	{% set x_park = params.X       if params.X is defined
2043
-	else custom_park_x  if use_custom
2044
-	else 0.0            if round_bed
2045
-	else (max.x - 5.0) %}
2046
-	{% set y_park = params.Y       if params.Y is defined
2047
-	else custom_park_y  if use_custom
2048
-	else (max.y - 5.0)  if round_bed and z_park < cone
2049
-	else 0.0            if round_bed
2050
-	else (max.y - 5.0) %}
2051
-	
2052
-	_CLIENT_RETRACT
2053
-	{% if "xyz" in printer.toolhead.homed_axes %}
2054
-	G90
2055
-	G1 Z{z_park} F{sp_hop}
2056
-	G1 X{x_park} Y{y_park} F{sp_move}
2057
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
2058
-	{% else %}
2059
-	RESPOND TYPE=echo MSG='Printer not homed'
2060
-	{% endif %}
2061
-
2062
-[gcode_macro _CLIENT_EXTRUDE]
2063
-description = Extrudes, if the extruder is hot enough
2064
-gcode = 
2065
-	
2066
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2067
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
2068
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
2069
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
2070
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
2071
-	
2072
-	{% if printer.toolhead.extruder != '' %}
2073
-	{% if printer[printer.toolhead.extruder].can_extrude %}
2074
-	{% if use_fw_retract %}
2075
-	{% if length < 0 %}
2076
-	G10
2077
-	{% else %}
2078
-	G11
2079
-	{% endif %}
2080
-	{% else %}
2081
-	M83
2082
-	G1 E{length} F{(speed|float|abs) * 60}
2083
-	{% if absolute_extrude %}
2084
-	M82
2085
-	{% endif %}
2086
-	{% endif %}
2087
-	{% else %}
2088
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
2089
-	{% endif %}
2090
-	{% endif %}
2091
-
2092
-[gcode_macro _CLIENT_RETRACT]
2093
-description = Retracts, if the extruder is hot enough
2094
-gcode = 
2095
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2096
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
2097
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
2098
-	
2099
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
2100
-
2101
-[gcode_macro _CLIENT_LINEAR_MOVE]
2102
-description = Linear move with save and restore of the gcode state
2103
-gcode = 
2104
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
2105
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
2106
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
2107
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
2108
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
2109
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
2110
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
2111
-	SAVE_GCODE_STATE NAME=_client_movement
2112
-	{% if x_move or y_move or z_move %}
2113
-	G9{ 0 if ABSOLUTE else 1 }
2114
-	{% endif %}
2115
-	{% if e_move %}
2116
-	M8{ 2 if ABSOLUTE_E else 3 }
2117
-	{% endif %}
2118
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
2119
-	RESTORE_GCODE_STATE NAME=_client_movement
2120
-
2121
-[mcu]
2122
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
2123
-
2124
-[stepper_x]
2125
-step_pin = PE3
2126
-dir_pin = !PE2
2127
-enable_pin = !PE4
2128
-microsteps = 16
2129
-rotation_distance = 40
2130
-endstop_pin = PA15
2131
-position_endstop = 0
2132
-position_max = 300
2133
-homing_speed = 50
2134
-
2135
-[stepper_y]
2136
-step_pin = PE0
2137
-dir_pin = !PB9
2138
-enable_pin = !PE1
2139
-microsteps = 16
2140
-rotation_distance = 40
2141
-endstop_pin = !PD2
2142
-position_endstop = 0
2143
-position_max = 300
2144
-homing_speed = 50
2145
-
2146
-[stepper_z]
2147
-step_pin = PB5
2148
-dir_pin = PB4
2149
-enable_pin = !PB8
2150
-microsteps = 16
2151
-rotation_distance = 8
2152
-endstop_pin = !PC8
2153
-position_endstop = 0.5
2154
-position_max = 200
2155
-
2156
-[stepper_z1]
2157
-step_pin = PD15
2158
-dir_pin = !PA1
2159
-enable_pin = !PA3
2160
-microsteps = 16
2161
-rotation_distance = 8
2162
-
2163
-[extruder]
2164
-step_pin = PD6
2165
-dir_pin = !PD3
2166
-enable_pin = !PB3
2167
-microsteps = 16
2168
-rotation_distance = 33.500
2169
-nozzle_diameter = 0.400
2170
-filament_diameter = 1.750
2171
-heater_pin = PE5
2172
-sensor_type = ATC Semitec 104GT-2
2173
-sensor_pin = PC1
2174
-control = pid
2175
-pid_kp = 14.669
2176
-pid_ki = 0.572
2177
-pid_kd = 94.068
2178
-min_temp = 0
2179
-max_temp = 250
2180
-
2181
-[heater_bed]
2182
-heater_pin = PA0
2183
-sensor_type = EPCOS 100K B57560G104F
2184
-sensor_pin = PC0
2185
-control = pid
2186
-pid_kp = 325.10
2187
-pid_ki = 63.35
2188
-pid_kd = 417.10
2189
-min_temp = 0
2190
-max_temp = 130
2191
-
2192
-[fan]
2193
-pin = PC14
2194
-
2195
-[printer]
2196
-kinematics = corexy
2197
-max_velocity = 300
2198
-max_accel = 3000
2199
-max_z_velocity = 25
2200
-max_z_accel = 30
2201
-
2202
-[board_pins]
2203
-aliases = 
2204
-	
2205
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
2206
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
2207
-	
2208
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
2209
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
2210
-=======================
2211
-Extruder max_extrude_ratio=0.266081
2212
-mcu 'mcu': Starting serial connect
2213
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2214
-webhooks client 547723684112: New connection
2215
-webhooks client 547723684112: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
2216
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2217
-webhooks client 547723684112: Disconnected
2218
-Restarting printer
2219
-Start printer at Wed Dec 11 08:43:53 2024 (1733903033.5 602.5)
2220
-===== Config file =====
2221
-[virtual_sdcard]
2222
-path = /home/countcobolt/printer_data/gcodes
2223
-on_error_gcode = CANCEL_PRINT
2224
-
2225
-[pause_resume]
2226
-
2227
-[display_status]
2228
-
2229
-[respond]
2230
-
2231
-[gcode_macro CANCEL_PRINT]
2232
-description = Cancel the actual running print
2233
-rename_existing = CANCEL_PRINT_BASE
2234
-gcode = 
2235
-	
2236
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2237
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
2238
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
2239
-	
2240
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
2241
-	else "X=" ~ client.park_at_cancel_x %}
2242
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
2243
-	else "Y=" ~ client.park_at_cancel_y %}
2244
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
2245
-	
2246
-	
2247
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
2248
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
2249
-	{% endif %}
2250
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
2251
-	_CLIENT_RETRACT LENGTH={retract}
2252
-	TURN_OFF_HEATERS
2253
-	M106 S0
2254
-	{client.user_cancel_macro|default("")}
2255
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2256
-	
2257
-	SET_PAUSE_NEXT_LAYER ENABLE=0
2258
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
2259
-	CANCEL_PRINT_BASE
2260
-
2261
-[gcode_macro PAUSE]
2262
-description = Pause the actual running print
2263
-rename_existing = PAUSE_BASE
2264
-gcode = 
2265
-	
2266
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2267
-	{% set idle_timeout = client.idle_timeout|default(0) %}
2268
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
2269
-	{% set restore = False if printer.toolhead.extruder == ''
2270
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
2271
-	
2272
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
2273
-	
2274
-	{% if idle_timeout > 0 %}
2275
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
2276
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
2277
-	{% endif %}
2278
-	PAUSE_BASE
2279
-	{client.user_pause_macro|default("")}
2280
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
2281
-
2282
-[gcode_macro RESUME]
2283
-description = Resume the actual running print
2284
-rename_existing = RESUME_BASE
2285
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
2286
-variable_restore_idle_timeout = 0
2287
-variable_idle_state = False
2288
-gcode = 
2289
-	
2290
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2291
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2292
-	{% set sp_move = client.speed_move|default(velocity) %}
2293
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
2294
-	else True if not printer[client.runout_sensor].enabled
2295
-	else printer[client.runout_sensor].filament_detected %}
2296
-	{% set can_extrude = True if printer.toolhead.extruder == ''
2297
-	else printer[printer.toolhead.extruder].can_extrude %}
2298
-	{% set do_resume = False %}
2299
-	{% set prompt_txt = [] %}
2300
-	
2301
-	
2302
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
2303
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2304
-	{% if last_extruder_temp.restore %}
2305
-	
2306
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
2307
-	M109 S{last_extruder_temp.temp}
2308
-	{% set do_resume = True %}
2309
-	{% elif can_extrude %}
2310
-	{% set do_resume = True %}
2311
-	{% else %}
2312
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2313
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2314
-	{% endif %}
2315
-	
2316
-	{% elif can_extrude %}
2317
-	{% set do_resume = True %}
2318
-	{% else %}
2319
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2320
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2321
-	{% endif %}
2322
-	{% if runout_resume %}
2323
-	{% if do_resume %}
2324
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
2325
-	{client.user_resume_macro|default("")}
2326
-	_CLIENT_EXTRUDE
2327
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
2328
-	{% endif %}
2329
-	{% else %}
2330
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
2331
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
2332
-	{% endif %}
2333
-	
2334
-	{% if not (runout_resume and do_resume) %}
2335
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
2336
-	{% for element in prompt_txt %}
2337
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
2338
-	{% endfor %}
2339
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
2340
-	RESPOND TYPE=command MSG="action:prompt_show"
2341
-	{% endif %}
2342
-
2343
-[gcode_macro SET_PAUSE_NEXT_LAYER]
2344
-description = Enable a pause if the next layer is reached
2345
-gcode = 
2346
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
2347
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
2348
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
2349
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
2350
-
2351
-[gcode_macro SET_PAUSE_AT_LAYER]
2352
-description = Enable/disable a pause if a given layer number is reached
2353
-gcode = 
2354
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
2355
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
2356
-	else params.LAYER is defined %}
2357
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
2358
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
2359
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
2360
-
2361
-[gcode_macro SET_PRINT_STATS_INFO]
2362
-rename_existing = SET_PRINT_STATS_INFO_BASE
2363
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
2364
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
2365
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
2366
-gcode = 
2367
-	{% if pause_next_layer.enable %}
2368
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
2369
-	{pause_next_layer.call}
2370
-	SET_PAUSE_NEXT_LAYER ENABLE=0
2371
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
2372
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
2373
-	{pause_at_layer.call}
2374
-	SET_PAUSE_AT_LAYER ENABLE=0
2375
-	{% endif %}
2376
-	SET_PRINT_STATS_INFO_BASE {rawparams}
2377
-
2378
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
2379
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
2380
-gcode = 
2381
-	
2382
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2383
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2384
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
2385
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
2386
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
2387
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
2388
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
2389
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
2390
-	
2391
-	{% set origin    = printer.gcode_move.homing_origin %}
2392
-	{% set act       = printer.gcode_move.gcode_position %}
2393
-	{% set max       = printer.toolhead.axis_maximum %}
2394
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
2395
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
2396
-	else False %}
2397
-	
2398
-	{% set z_min = params.Z_MIN|default(0)|float %}
2399
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
2400
-	{% set x_park = params.X       if params.X is defined
2401
-	else custom_park_x  if use_custom
2402
-	else 0.0            if round_bed
2403
-	else (max.x - 5.0) %}
2404
-	{% set y_park = params.Y       if params.Y is defined
2405
-	else custom_park_y  if use_custom
2406
-	else (max.y - 5.0)  if round_bed and z_park < cone
2407
-	else 0.0            if round_bed
2408
-	else (max.y - 5.0) %}
2409
-	
2410
-	_CLIENT_RETRACT
2411
-	{% if "xyz" in printer.toolhead.homed_axes %}
2412
-	G90
2413
-	G1 Z{z_park} F{sp_hop}
2414
-	G1 X{x_park} Y{y_park} F{sp_move}
2415
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
2416
-	{% else %}
2417
-	RESPOND TYPE=echo MSG='Printer not homed'
2418
-	{% endif %}
2419
-
2420
-[gcode_macro _CLIENT_EXTRUDE]
2421
-description = Extrudes, if the extruder is hot enough
2422
-gcode = 
2423
-	
2424
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2425
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
2426
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
2427
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
2428
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
2429
-	
2430
-	{% if printer.toolhead.extruder != '' %}
2431
-	{% if printer[printer.toolhead.extruder].can_extrude %}
2432
-	{% if use_fw_retract %}
2433
-	{% if length < 0 %}
2434
-	G10
2435
-	{% else %}
2436
-	G11
2437
-	{% endif %}
2438
-	{% else %}
2439
-	M83
2440
-	G1 E{length} F{(speed|float|abs) * 60}
2441
-	{% if absolute_extrude %}
2442
-	M82
2443
-	{% endif %}
2444
-	{% endif %}
2445
-	{% else %}
2446
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
2447
-	{% endif %}
2448
-	{% endif %}
2449
-
2450
-[gcode_macro _CLIENT_RETRACT]
2451
-description = Retracts, if the extruder is hot enough
2452
-gcode = 
2453
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2454
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
2455
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
2456
-	
2457
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
2458
-
2459
-[gcode_macro _CLIENT_LINEAR_MOVE]
2460
-description = Linear move with save and restore of the gcode state
2461
-gcode = 
2462
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
2463
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
2464
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
2465
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
2466
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
2467
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
2468
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
2469
-	SAVE_GCODE_STATE NAME=_client_movement
2470
-	{% if x_move or y_move or z_move %}
2471
-	G9{ 0 if ABSOLUTE else 1 }
2472
-	{% endif %}
2473
-	{% if e_move %}
2474
-	M8{ 2 if ABSOLUTE_E else 3 }
2475
-	{% endif %}
2476
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
2477
-	RESTORE_GCODE_STATE NAME=_client_movement
2478
-
2479
-[mcu]
2480
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
2481
-
2482
-[stepper_x]
2483
-step_pin = PE3
2484
-dir_pin = !PE2
2485
-enable_pin = !PE4
2486
-microsteps = 16
2487
-rotation_distance = 40
2488
-endstop_pin = PA15
2489
-position_endstop = 0
2490
-position_max = 300
2491
-homing_speed = 50
2492
-
2493
-[stepper_y]
2494
-step_pin = PE0
2495
-dir_pin = !PB9
2496
-enable_pin = !PE1
2497
-microsteps = 16
2498
-rotation_distance = 40
2499
-endstop_pin = !PD2
2500
-position_endstop = 0
2501
-position_max = 300
2502
-homing_speed = 50
2503
-
2504
-[stepper_z]
2505
-step_pin = PB5
2506
-dir_pin = PB4
2507
-enable_pin = !PB8
2508
-microsteps = 16
2509
-rotation_distance = 8
2510
-endstop_pin = !PC8
2511
-position_endstop = 0.5
2512
-position_max = 200
2513
-
2514
-[stepper_z1]
2515
-step_pin = PD15
2516
-dir_pin = !PA1
2517
-enable_pin = !PA3
2518
-microsteps = 16
2519
-rotation_distance = 8
2520
-
2521
-[extruder]
2522
-step_pin = PD6
2523
-dir_pin = !PD3
2524
-enable_pin = !PB3
2525
-microsteps = 16
2526
-rotation_distance = 33.500
2527
-nozzle_diameter = 0.400
2528
-filament_diameter = 1.750
2529
-heater_pin = PE5
2530
-sensor_type = ATC Semitec 104GT-2
2531
-sensor_pin = PC1
2532
-control = pid
2533
-pid_kp = 14.669
2534
-pid_ki = 0.572
2535
-pid_kd = 94.068
2536
-min_temp = 0
2537
-max_temp = 250
2538
-
2539
-[heater_bed]
2540
-heater_pin = PA0
2541
-sensor_type = EPCOS 100K B57560G104F
2542
-sensor_pin = PC0
2543
-control = pid
2544
-pid_kp = 325.10
2545
-pid_ki = 63.35
2546
-pid_kd = 417.10
2547
-min_temp = 0
2548
-max_temp = 130
2549
-
2550
-[fan]
2551
-pin = PC14
2552
-
2553
-[printer]
2554
-kinematics = corexy
2555
-max_velocity = 300
2556
-max_accel = 3000
2557
-max_z_velocity = 25
2558
-max_z_accel = 30
2559
-
2560
-[board_pins]
2561
-aliases = 
2562
-	
2563
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
2564
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
2565
-	
2566
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
2567
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
2568
-=======================
2569
-Extruder max_extrude_ratio=0.266081
2570
-mcu 'mcu': Starting serial connect
2571
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2572
-webhooks client 547723426512: New connection
2573
-webhooks client 547723426512: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
2574
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2575
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2576
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2577
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2578
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2579
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2580
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2581
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2582
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2583
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2584
-Attempting MCU 'mcu' reset
2585
-Unhandled exception during post run
2586
-Traceback (most recent call last):
2587
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
2588
-    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
2589
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2590
-FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2591
-
2592
-During handling of the above exception, another exception occurred:
2593
-
2594
-Traceback (most recent call last):
2595
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
2596
-    self.send_event("klippy:firmware_restart")
2597
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
2598
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
2599
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2600
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
2601
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
2602
-            ^^^^^^^^^^^
2603
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
2604
-    self._restart_arduino()
2605
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
2606
-    serialhdl.arduino_reset(self._serialport, self._reactor)
2607
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
2608
-    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
2609
-          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2610
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
2611
-    self.open()
2612
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
2613
-    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
2614
-serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2615
-Restarting printer
2616
-Start printer at Wed Dec 11 08:44:47 2024 (1733903087.9 656.9)
2617
-===== Config file =====
2618
-[virtual_sdcard]
2619
-path = /home/countcobolt/printer_data/gcodes
2620
-on_error_gcode = CANCEL_PRINT
2621
-
2622
-[pause_resume]
2623
-
2624
-[display_status]
2625
-
2626
-[respond]
2627
-
2628
-[gcode_macro CANCEL_PRINT]
2629
-description = Cancel the actual running print
2630
-rename_existing = CANCEL_PRINT_BASE
2631
-gcode = 
2632
-	
2633
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2634
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
2635
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
2636
-	
2637
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
2638
-	else "X=" ~ client.park_at_cancel_x %}
2639
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
2640
-	else "Y=" ~ client.park_at_cancel_y %}
2641
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
2642
-	
2643
-	
2644
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
2645
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
2646
-	{% endif %}
2647
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
2648
-	_CLIENT_RETRACT LENGTH={retract}
2649
-	TURN_OFF_HEATERS
2650
-	M106 S0
2651
-	{client.user_cancel_macro|default("")}
2652
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2653
-	
2654
-	SET_PAUSE_NEXT_LAYER ENABLE=0
2655
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
2656
-	CANCEL_PRINT_BASE
2657
-
2658
-[gcode_macro PAUSE]
2659
-description = Pause the actual running print
2660
-rename_existing = PAUSE_BASE
2661
-gcode = 
2662
-	
2663
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2664
-	{% set idle_timeout = client.idle_timeout|default(0) %}
2665
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
2666
-	{% set restore = False if printer.toolhead.extruder == ''
2667
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
2668
-	
2669
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
2670
-	
2671
-	{% if idle_timeout > 0 %}
2672
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
2673
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
2674
-	{% endif %}
2675
-	PAUSE_BASE
2676
-	{client.user_pause_macro|default("")}
2677
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
2678
-
2679
-[gcode_macro RESUME]
2680
-description = Resume the actual running print
2681
-rename_existing = RESUME_BASE
2682
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
2683
-variable_restore_idle_timeout = 0
2684
-variable_idle_state = False
2685
-gcode = 
2686
-	
2687
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2688
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2689
-	{% set sp_move = client.speed_move|default(velocity) %}
2690
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
2691
-	else True if not printer[client.runout_sensor].enabled
2692
-	else printer[client.runout_sensor].filament_detected %}
2693
-	{% set can_extrude = True if printer.toolhead.extruder == ''
2694
-	else printer[printer.toolhead.extruder].can_extrude %}
2695
-	{% set do_resume = False %}
2696
-	{% set prompt_txt = [] %}
2697
-	
2698
-	
2699
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
2700
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2701
-	{% if last_extruder_temp.restore %}
2702
-	
2703
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
2704
-	M109 S{last_extruder_temp.temp}
2705
-	{% set do_resume = True %}
2706
-	{% elif can_extrude %}
2707
-	{% set do_resume = True %}
2708
-	{% else %}
2709
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2710
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2711
-	{% endif %}
2712
-	
2713
-	{% elif can_extrude %}
2714
-	{% set do_resume = True %}
2715
-	{% else %}
2716
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2717
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2718
-	{% endif %}
2719
-	{% if runout_resume %}
2720
-	{% if do_resume %}
2721
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
2722
-	{client.user_resume_macro|default("")}
2723
-	_CLIENT_EXTRUDE
2724
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
2725
-	{% endif %}
2726
-	{% else %}
2727
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
2728
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
2729
-	{% endif %}
2730
-	
2731
-	{% if not (runout_resume and do_resume) %}
2732
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
2733
-	{% for element in prompt_txt %}
2734
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
2735
-	{% endfor %}
2736
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
2737
-	RESPOND TYPE=command MSG="action:prompt_show"
2738
-	{% endif %}
2739
-
2740
-[gcode_macro SET_PAUSE_NEXT_LAYER]
2741
-description = Enable a pause if the next layer is reached
2742
-gcode = 
2743
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
2744
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
2745
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
2746
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
2747
-
2748
-[gcode_macro SET_PAUSE_AT_LAYER]
2749
-description = Enable/disable a pause if a given layer number is reached
2750
-gcode = 
2751
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
2752
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
2753
-	else params.LAYER is defined %}
2754
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
2755
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
2756
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
2757
-
2758
-[gcode_macro SET_PRINT_STATS_INFO]
2759
-rename_existing = SET_PRINT_STATS_INFO_BASE
2760
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
2761
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
2762
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
2763
-gcode = 
2764
-	{% if pause_next_layer.enable %}
2765
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
2766
-	{pause_next_layer.call}
2767
-	SET_PAUSE_NEXT_LAYER ENABLE=0
2768
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
2769
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
2770
-	{pause_at_layer.call}
2771
-	SET_PAUSE_AT_LAYER ENABLE=0
2772
-	{% endif %}
2773
-	SET_PRINT_STATS_INFO_BASE {rawparams}
2774
-
2775
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
2776
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
2777
-gcode = 
2778
-	
2779
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2780
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2781
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
2782
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
2783
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
2784
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
2785
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
2786
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
2787
-	
2788
-	{% set origin    = printer.gcode_move.homing_origin %}
2789
-	{% set act       = printer.gcode_move.gcode_position %}
2790
-	{% set max       = printer.toolhead.axis_maximum %}
2791
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
2792
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
2793
-	else False %}
2794
-	
2795
-	{% set z_min = params.Z_MIN|default(0)|float %}
2796
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
2797
-	{% set x_park = params.X       if params.X is defined
2798
-	else custom_park_x  if use_custom
2799
-	else 0.0            if round_bed
2800
-	else (max.x - 5.0) %}
2801
-	{% set y_park = params.Y       if params.Y is defined
2802
-	else custom_park_y  if use_custom
2803
-	else (max.y - 5.0)  if round_bed and z_park < cone
2804
-	else 0.0            if round_bed
2805
-	else (max.y - 5.0) %}
2806
-	
2807
-	_CLIENT_RETRACT
2808
-	{% if "xyz" in printer.toolhead.homed_axes %}
2809
-	G90
2810
-	G1 Z{z_park} F{sp_hop}
2811
-	G1 X{x_park} Y{y_park} F{sp_move}
2812
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
2813
-	{% else %}
2814
-	RESPOND TYPE=echo MSG='Printer not homed'
2815
-	{% endif %}
2816
-
2817
-[gcode_macro _CLIENT_EXTRUDE]
2818
-description = Extrudes, if the extruder is hot enough
2819
-gcode = 
2820
-	
2821
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2822
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
2823
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
2824
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
2825
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
2826
-	
2827
-	{% if printer.toolhead.extruder != '' %}
2828
-	{% if printer[printer.toolhead.extruder].can_extrude %}
2829
-	{% if use_fw_retract %}
2830
-	{% if length < 0 %}
2831
-	G10
2832
-	{% else %}
2833
-	G11
2834
-	{% endif %}
2835
-	{% else %}
2836
-	M83
2837
-	G1 E{length} F{(speed|float|abs) * 60}
2838
-	{% if absolute_extrude %}
2839
-	M82
2840
-	{% endif %}
2841
-	{% endif %}
2842
-	{% else %}
2843
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
2844
-	{% endif %}
2845
-	{% endif %}
2846
-
2847
-[gcode_macro _CLIENT_RETRACT]
2848
-description = Retracts, if the extruder is hot enough
2849
-gcode = 
2850
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2851
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
2852
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
2853
-	
2854
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
2855
-
2856
-[gcode_macro _CLIENT_LINEAR_MOVE]
2857
-description = Linear move with save and restore of the gcode state
2858
-gcode = 
2859
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
2860
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
2861
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
2862
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
2863
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
2864
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
2865
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
2866
-	SAVE_GCODE_STATE NAME=_client_movement
2867
-	{% if x_move or y_move or z_move %}
2868
-	G9{ 0 if ABSOLUTE else 1 }
2869
-	{% endif %}
2870
-	{% if e_move %}
2871
-	M8{ 2 if ABSOLUTE_E else 3 }
2872
-	{% endif %}
2873
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
2874
-	RESTORE_GCODE_STATE NAME=_client_movement
2875
-
2876
-[mcu]
2877
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
2878
-
2879
-[stepper_x]
2880
-step_pin = PE3
2881
-dir_pin = !PE2
2882
-enable_pin = !PE4
2883
-microsteps = 16
2884
-rotation_distance = 40
2885
-endstop_pin = PA15
2886
-position_endstop = 0
2887
-position_max = 300
2888
-homing_speed = 50
2889
-
2890
-[stepper_y]
2891
-step_pin = PE0
2892
-dir_pin = !PB9
2893
-enable_pin = !PE1
2894
-microsteps = 16
2895
-rotation_distance = 40
2896
-endstop_pin = !PD2
2897
-position_endstop = 0
2898
-position_max = 300
2899
-homing_speed = 50
2900
-
2901
-[stepper_z]
2902
-step_pin = PB5
2903
-dir_pin = PB4
2904
-enable_pin = !PB8
2905
-microsteps = 16
2906
-rotation_distance = 8
2907
-endstop_pin = !PC8
2908
-position_endstop = 0.5
2909
-position_max = 200
2910
-
2911
-[stepper_z1]
2912
-step_pin = PD15
2913
-dir_pin = !PA1
2914
-enable_pin = !PA3
2915
-microsteps = 16
2916
-rotation_distance = 8
2917
-
2918
-[extruder]
2919
-step_pin = PD6
2920
-dir_pin = !PD3
2921
-enable_pin = !PB3
2922
-microsteps = 16
2923
-rotation_distance = 33.500
2924
-nozzle_diameter = 0.400
2925
-filament_diameter = 1.750
2926
-heater_pin = PE5
2927
-sensor_type = ATC Semitec 104GT-2
2928
-sensor_pin = PC1
2929
-control = pid
2930
-pid_kp = 14.669
2931
-pid_ki = 0.572
2932
-pid_kd = 94.068
2933
-min_temp = 0
2934
-max_temp = 250
2935
-
2936
-[heater_bed]
2937
-heater_pin = PA0
2938
-sensor_type = EPCOS 100K B57560G104F
2939
-sensor_pin = PC0
2940
-control = pid
2941
-pid_kp = 325.10
2942
-pid_ki = 63.35
2943
-pid_kd = 417.10
2944
-min_temp = 0
2945
-max_temp = 130
2946
-
2947
-[fan]
2948
-pin = PC14
2949
-
2950
-[printer]
2951
-kinematics = corexy
2952
-max_velocity = 300
2953
-max_accel = 3000
2954
-max_z_velocity = 25
2955
-max_z_accel = 30
2956
-
2957
-[board_pins]
2958
-aliases = 
2959
-	
2960
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
2961
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
2962
-	
2963
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
2964
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
2965
-=======================
2966
-Extruder max_extrude_ratio=0.266081
2967
-mcu 'mcu': Starting serial connect
2968
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2969
-webhooks client 547723688528: New connection
2970
-webhooks client 547723688528: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
2971
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2972
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2973
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2974
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2975
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2976
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2977
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2978
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2979
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2980
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2981
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2982
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2983
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2984
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2985
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2986
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2987
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2988
-MCU error during connect
2989
-Traceback (most recent call last):
2990
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 793, in _mcu_identify
2991
-    self._serial.connect_uart(self._serialport, self._baud, rts)
2992
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 183, in connect_uart
2993
-    self._error("Unable to connect")
2994
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 61, in _error
2995
-    raise error(self.warn_prefix + (msg % params))
2996
-serialhdl.error: mcu 'mcu': Unable to connect
2997
-
2998
-During handling of the above exception, another exception occurred:
2999
-
3000
-Traceback (most recent call last):
3001
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 131, in _connect
3002
-    self.send_event("klippy:mcu_identify")
3003
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
3004
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3005
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3006
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
3007
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3008
-            ^^^^^^^^^^^
3009
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 798, in _mcu_identify
3010
-    raise error(str(e))
3011
-mcu.error: mcu 'mcu': Unable to connect
3012
-mcu 'mcu': Unable to connect
3013
-Once the underlying issue is corrected, use the
3014
-"FIRMWARE_RESTART" command to reset the firmware, reload the
3015
-config, and restart the host software.
3016
-Error configuring printer
3017
-
3018
-Build file /home/countcobolt/klipper/klippy/../.config(3654): Tue Dec 10 19:59:19 2024
3019
-========= Last MCU build config =========
3020
-CONFIG_LOW_LEVEL_OPTIONS=y
3021
-# CONFIG_MACH_AVR is not set
3022
-# CONFIG_MACH_ATSAM is not set
3023
-# CONFIG_MACH_ATSAMD is not set
3024
-# CONFIG_MACH_LPC176X is not set
3025
-CONFIG_MACH_STM32=y
3026
-# CONFIG_MACH_HC32F460 is not set
3027
-# CONFIG_MACH_RPXXXX is not set
3028
-# CONFIG_MACH_PRU is not set
3029
-# CONFIG_MACH_AR100 is not set
3030
-# CONFIG_MACH_LINUX is not set
3031
-# CONFIG_MACH_SIMU is not set
3032
-CONFIG_BOARD_DIRECTORY="stm32"
3033
-CONFIG_MCU="stm32f407xx"
3034
-CONFIG_CLOCK_FREQ=168000000
3035
-CONFIG_USBSERIAL=y
3036
-CONFIG_FLASH_SIZE=0x80000
3037
-CONFIG_FLASH_BOOT_ADDRESS=0x8000000
3038
-CONFIG_RAM_START=0x20000000
3039
-CONFIG_RAM_SIZE=0x20000
3040
-CONFIG_STACK_SIZE=512
3041
-CONFIG_FLASH_APPLICATION_ADDRESS=0x800C000
3042
-CONFIG_STM32_SELECT=y
3043
-# CONFIG_MACH_STM32F103 is not set
3044
-# CONFIG_MACH_STM32F207 is not set
3045
-# CONFIG_MACH_STM32F401 is not set
3046
-# CONFIG_MACH_STM32F405 is not set
3047
-CONFIG_MACH_STM32F407=y
3048
-# CONFIG_MACH_STM32F429 is not set
3049
-# CONFIG_MACH_STM32F446 is not set
3050
-# CONFIG_MACH_STM32F765 is not set
3051
-# CONFIG_MACH_STM32F031 is not set
3052
-# CONFIG_MACH_STM32F042 is not set
3053
-# CONFIG_MACH_STM32F070 is not set
3054
-# CONFIG_MACH_STM32F072 is not set
3055
-# CONFIG_MACH_STM32G070 is not set
3056
-# CONFIG_MACH_STM32G071 is not set
3057
-# CONFIG_MACH_STM32G0B0 is not set
3058
-# CONFIG_MACH_STM32G0B1 is not set
3059
-# CONFIG_MACH_STM32G431 is not set
3060
-# CONFIG_MACH_STM32G474 is not set
3061
-# CONFIG_MACH_STM32H723 is not set
3062
-# CONFIG_MACH_STM32H743 is not set
3063
-# CONFIG_MACH_STM32H750 is not set
3064
-# CONFIG_MACH_STM32L412 is not set
3065
-# CONFIG_MACH_N32G452 is not set
3066
-# CONFIG_MACH_N32G455 is not set
3067
-CONFIG_MACH_STM32F4=y
3068
-CONFIG_MACH_STM32F4x5=y
3069
-CONFIG_HAVE_STM32_USBOTG=y
3070
-CONFIG_HAVE_STM32_CANBUS=y
3071
-CONFIG_HAVE_STM32_USBCANBUS=y
3072
-CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000
3073
-# CONFIG_STM32_FLASH_START_8000 is not set
3074
-# CONFIG_STM32_FLASH_START_20200 is not set
3075
-CONFIG_STM32_FLASH_START_C000=y
3076
-# CONFIG_STM32_FLASH_START_10000 is not set
3077
-# CONFIG_STM32_FLASH_START_4000 is not set
3078
-# CONFIG_STM32_FLASH_START_0000 is not set
3079
-CONFIG_STM32_CLOCK_REF_8M=y
3080
-# CONFIG_STM32_CLOCK_REF_12M is not set
3081
-# CONFIG_STM32_CLOCK_REF_16M is not set
3082
-# CONFIG_STM32_CLOCK_REF_20M is not set
3083
-# CONFIG_STM32_CLOCK_REF_24M is not set
3084
-# CONFIG_STM32_CLOCK_REF_25M is not set
3085
-# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
3086
-CONFIG_CLOCK_REF_FREQ=8000000
3087
-CONFIG_STM32F0_TRIM=16
3088
-CONFIG_STM32_USB_PA11_PA12=y
3089
-# CONFIG_STM32_SERIAL_USART1 is not set
3090
-# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
3091
-# CONFIG_STM32_SERIAL_USART2 is not set
3092
-# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
3093
-# CONFIG_STM32_SERIAL_USART3 is not set
3094
-# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
3095
-# CONFIG_STM32_CANBUS_PA11_PA12 is not set
3096
-# CONFIG_STM32_CANBUS_PA11_PB9 is not set
3097
-# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
3098
-# CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set
3099
-# CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set
3100
-# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
3101
-# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
3102
-# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
3103
-CONFIG_USB=y
3104
-CONFIG_USB_VENDOR_ID=0x1d50
3105
-CONFIG_USB_DEVICE_ID=0x614e
3106
-CONFIG_USB_SERIAL_NUMBER_CHIPID=y
3107
-CONFIG_USB_SERIAL_NUMBER="12345"
3108
-
3109
-#
3110
-# USB ids
3111
-#
3112
-# end of USB ids
3113
-
3114
-CONFIG_WANT_GPIO_BITBANGING=y
3115
-CONFIG_WANT_DISPLAYS=y
3116
-CONFIG_WANT_SENSORS=y
3117
-CONFIG_WANT_LIS2DW=y
3118
-CONFIG_WANT_LDC1612=y
3119
-CONFIG_WANT_HX71X=y
3120
-CONFIG_WANT_ADS1220=y
3121
-CONFIG_WANT_SOFTWARE_I2C=y
3122
-CONFIG_WANT_SOFTWARE_SPI=y
3123
-CONFIG_NEED_SENSOR_BULK=y
3124
-CONFIG_CANBUS_FREQUENCY=1000000
3125
-CONFIG_INITIAL_PINS=""
3126
-CONFIG_HAVE_GPIO=y
3127
-CONFIG_HAVE_GPIO_ADC=y
3128
-CONFIG_HAVE_GPIO_SPI=y
3129
-CONFIG_HAVE_GPIO_SDIO=y
3130
-CONFIG_HAVE_GPIO_I2C=y
3131
-CONFIG_HAVE_GPIO_HARD_PWM=y
3132
-CONFIG_HAVE_STRICT_TIMING=y
3133
-CONFIG_HAVE_CHIPID=y
3134
-CONFIG_HAVE_STEPPER_BOTH_EDGE=y
3135
-CONFIG_HAVE_BOOTLOADER_REQUEST=y
3136
-CONFIG_INLINE_STEPPER_HACK=y
3137
-=======================
3138
-Build file /home/countcobolt/klipper/klippy/../out/klipper.dict(9334): Tue Dec 10 19:59:42 2024
3139
-Last MCU build version: v0.12.0-396-gb7233d119
3140
-Last MCU build tools: gcc: (15:12.2.rel1-1) 12.2.1 20221205 binutils: (2.40-2+18+b1) 2.40
3141
-Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c2a=PH4,PH5 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_i2c3a=PH7,PH8 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi2b=PI2,PI3,PI1 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 CLOCK_FREQ=168000000 MCU=stm32f407xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
3142
-Build file /home/countcobolt/klipper/klippy/../out/klipper.elf(1243184): Tue Dec 10 19:59:48 2024
3143
-Attempting MCU 'mcu' reset
3144
-Unhandled exception during post run
3145
-Traceback (most recent call last):
3146
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
3147
-    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
3148
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3149
-FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3150
-
3151
-During handling of the above exception, another exception occurred:
3152
-
3153
-Traceback (most recent call last):
3154
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
3155
-    self.send_event("klippy:firmware_restart")
3156
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
3157
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3158
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3159
-  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
3160
-    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3161
-            ^^^^^^^^^^^
3162
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
3163
-    self._restart_arduino()
3164
-  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
3165
-    serialhdl.arduino_reset(self._serialport, self._reactor)
3166
-  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
3167
-    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
3168
-          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3169
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
3170
-    self.open()
3171
-  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
3172
-    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
3173
-serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3174
-Restarting printer
3175
-Start printer at Wed Dec 11 08:58:27 2024 (1733903907.2 1476.2)
3176
-===== Config file =====
3177
-[virtual_sdcard]
3178
-path = /home/countcobolt/printer_data/gcodes
3179
-on_error_gcode = CANCEL_PRINT
3180
-
3181
-[pause_resume]
3182
-
3183
-[display_status]
3184
-
3185
-[respond]
3186
-
3187
-[gcode_macro CANCEL_PRINT]
3188
-description = Cancel the actual running print
3189
-rename_existing = CANCEL_PRINT_BASE
3190
-gcode = 
3191
-	
3192
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3193
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
3194
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
3195
-	
3196
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
3197
-	else "X=" ~ client.park_at_cancel_x %}
3198
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
3199
-	else "Y=" ~ client.park_at_cancel_y %}
3200
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
3201
-	
3202
-	
3203
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
3204
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
3205
-	{% endif %}
3206
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
3207
-	_CLIENT_RETRACT LENGTH={retract}
3208
-	TURN_OFF_HEATERS
3209
-	M106 S0
3210
-	{client.user_cancel_macro|default("")}
3211
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3212
-	
3213
-	SET_PAUSE_NEXT_LAYER ENABLE=0
3214
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
3215
-	CANCEL_PRINT_BASE
3216
-
3217
-[gcode_macro PAUSE]
3218
-description = Pause the actual running print
3219
-rename_existing = PAUSE_BASE
3220
-gcode = 
3221
-	
3222
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3223
-	{% set idle_timeout = client.idle_timeout|default(0) %}
3224
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
3225
-	{% set restore = False if printer.toolhead.extruder == ''
3226
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
3227
-	
3228
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
3229
-	
3230
-	{% if idle_timeout > 0 %}
3231
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
3232
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
3233
-	{% endif %}
3234
-	PAUSE_BASE
3235
-	{client.user_pause_macro|default("")}
3236
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
3237
-
3238
-[gcode_macro RESUME]
3239
-description = Resume the actual running print
3240
-rename_existing = RESUME_BASE
3241
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
3242
-variable_restore_idle_timeout = 0
3243
-variable_idle_state = False
3244
-gcode = 
3245
-	
3246
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3247
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3248
-	{% set sp_move = client.speed_move|default(velocity) %}
3249
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
3250
-	else True if not printer[client.runout_sensor].enabled
3251
-	else printer[client.runout_sensor].filament_detected %}
3252
-	{% set can_extrude = True if printer.toolhead.extruder == ''
3253
-	else printer[printer.toolhead.extruder].can_extrude %}
3254
-	{% set do_resume = False %}
3255
-	{% set prompt_txt = [] %}
3256
-	
3257
-	
3258
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
3259
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3260
-	{% if last_extruder_temp.restore %}
3261
-	
3262
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
3263
-	M109 S{last_extruder_temp.temp}
3264
-	{% set do_resume = True %}
3265
-	{% elif can_extrude %}
3266
-	{% set do_resume = True %}
3267
-	{% else %}
3268
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3269
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3270
-	{% endif %}
3271
-	
3272
-	{% elif can_extrude %}
3273
-	{% set do_resume = True %}
3274
-	{% else %}
3275
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3276
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3277
-	{% endif %}
3278
-	{% if runout_resume %}
3279
-	{% if do_resume %}
3280
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
3281
-	{client.user_resume_macro|default("")}
3282
-	_CLIENT_EXTRUDE
3283
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
3284
-	{% endif %}
3285
-	{% else %}
3286
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
3287
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
3288
-	{% endif %}
3289
-	
3290
-	{% if not (runout_resume and do_resume) %}
3291
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
3292
-	{% for element in prompt_txt %}
3293
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
3294
-	{% endfor %}
3295
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
3296
-	RESPOND TYPE=command MSG="action:prompt_show"
3297
-	{% endif %}
3298
-
3299
-[gcode_macro SET_PAUSE_NEXT_LAYER]
3300
-description = Enable a pause if the next layer is reached
3301
-gcode = 
3302
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
3303
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
3304
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
3305
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
3306
-
3307
-[gcode_macro SET_PAUSE_AT_LAYER]
3308
-description = Enable/disable a pause if a given layer number is reached
3309
-gcode = 
3310
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
3311
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
3312
-	else params.LAYER is defined %}
3313
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
3314
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
3315
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
3316
-
3317
-[gcode_macro SET_PRINT_STATS_INFO]
3318
-rename_existing = SET_PRINT_STATS_INFO_BASE
3319
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
3320
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
3321
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
3322
-gcode = 
3323
-	{% if pause_next_layer.enable %}
3324
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
3325
-	{pause_next_layer.call}
3326
-	SET_PAUSE_NEXT_LAYER ENABLE=0
3327
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
3328
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
3329
-	{pause_at_layer.call}
3330
-	SET_PAUSE_AT_LAYER ENABLE=0
3331
-	{% endif %}
3332
-	SET_PRINT_STATS_INFO_BASE {rawparams}
3333
-
3334
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
3335
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
3336
-gcode = 
3337
-	
3338
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3339
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3340
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
3341
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
3342
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
3343
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
3344
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
3345
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
3346
-	
3347
-	{% set origin    = printer.gcode_move.homing_origin %}
3348
-	{% set act       = printer.gcode_move.gcode_position %}
3349
-	{% set max       = printer.toolhead.axis_maximum %}
3350
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
3351
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
3352
-	else False %}
3353
-	
3354
-	{% set z_min = params.Z_MIN|default(0)|float %}
3355
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
3356
-	{% set x_park = params.X       if params.X is defined
3357
-	else custom_park_x  if use_custom
3358
-	else 0.0            if round_bed
3359
-	else (max.x - 5.0) %}
3360
-	{% set y_park = params.Y       if params.Y is defined
3361
-	else custom_park_y  if use_custom
3362
-	else (max.y - 5.0)  if round_bed and z_park < cone
3363
-	else 0.0            if round_bed
3364
-	else (max.y - 5.0) %}
3365
-	
3366
-	_CLIENT_RETRACT
3367
-	{% if "xyz" in printer.toolhead.homed_axes %}
3368
-	G90
3369
-	G1 Z{z_park} F{sp_hop}
3370
-	G1 X{x_park} Y{y_park} F{sp_move}
3371
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
3372
-	{% else %}
3373
-	RESPOND TYPE=echo MSG='Printer not homed'
3374
-	{% endif %}
3375
-
3376
-[gcode_macro _CLIENT_EXTRUDE]
3377
-description = Extrudes, if the extruder is hot enough
3378
-gcode = 
3379
-	
3380
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3381
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
3382
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
3383
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
3384
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
3385
-	
3386
-	{% if printer.toolhead.extruder != '' %}
3387
-	{% if printer[printer.toolhead.extruder].can_extrude %}
3388
-	{% if use_fw_retract %}
3389
-	{% if length < 0 %}
3390
-	G10
3391
-	{% else %}
3392
-	G11
3393
-	{% endif %}
3394
-	{% else %}
3395
-	M83
3396
-	G1 E{length} F{(speed|float|abs) * 60}
3397
-	{% if absolute_extrude %}
3398
-	M82
3399
-	{% endif %}
3400
-	{% endif %}
3401
-	{% else %}
3402
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
3403
-	{% endif %}
3404
-	{% endif %}
3405
-
3406
-[gcode_macro _CLIENT_RETRACT]
3407
-description = Retracts, if the extruder is hot enough
3408
-gcode = 
3409
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3410
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
3411
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
3412
-	
3413
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
3414
-
3415
-[gcode_macro _CLIENT_LINEAR_MOVE]
3416
-description = Linear move with save and restore of the gcode state
3417
-gcode = 
3418
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
3419
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
3420
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
3421
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
3422
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
3423
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
3424
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
3425
-	SAVE_GCODE_STATE NAME=_client_movement
3426
-	{% if x_move or y_move or z_move %}
3427
-	G9{ 0 if ABSOLUTE else 1 }
3428
-	{% endif %}
3429
-	{% if e_move %}
3430
-	M8{ 2 if ABSOLUTE_E else 3 }
3431
-	{% endif %}
3432
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
3433
-	RESTORE_GCODE_STATE NAME=_client_movement
3434
-
3435
-[mcu]
3436
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
3437
-
3438
-[stepper_x]
3439
-step_pin = PE3
3440
-dir_pin = !PE2
3441
-enable_pin = !PE4
3442
-microsteps = 16
3443
-rotation_distance = 40
3444
-endstop_pin = PA15
3445
-position_endstop = 0
3446
-position_max = 300
3447
-homing_speed = 50
3448
-
3449
-[stepper_y]
3450
-step_pin = PE0
3451
-dir_pin = !PB9
3452
-enable_pin = !PE1
3453
-microsteps = 16
3454
-rotation_distance = 40
3455
-endstop_pin = !PD2
3456
-position_endstop = 0
3457
-position_max = 300
3458
-homing_speed = 50
3459
-
3460
-[stepper_z]
3461
-step_pin = PB5
3462
-dir_pin = PB4
3463
-enable_pin = !PB8
3464
-microsteps = 16
3465
-rotation_distance = 8
3466
-endstop_pin = !PC8
3467
-position_endstop = 0.5
3468
-position_max = 200
3469
-
3470
-[stepper_z1]
3471
-step_pin = PD15
3472
-dir_pin = !PA1
3473
-enable_pin = !PA3
3474
-microsteps = 16
3475
-rotation_distance = 8
3476
-
3477
-[extruder]
3478
-step_pin = PD6
3479
-dir_pin = !PD3
3480
-enable_pin = !PB3
3481
-microsteps = 16
3482
-rotation_distance = 33.500
3483
-nozzle_diameter = 0.400
3484
-filament_diameter = 1.750
3485
-heater_pin = PE5
3486
-sensor_type = ATC Semitec 104GT-2
3487
-sensor_pin = PC1
3488
-control = pid
3489
-pid_kp = 14.669
3490
-pid_ki = 0.572
3491
-pid_kd = 94.068
3492
-min_temp = 0
3493
-max_temp = 250
3494
-
3495
-[heater_bed]
3496
-heater_pin = PA0
3497
-sensor_type = EPCOS 100K B57560G104F
3498
-sensor_pin = PC0
3499
-control = pid
3500
-pid_kp = 325.10
3501
-pid_ki = 63.35
3502
-pid_kd = 417.10
3503
-min_temp = 0
3504
-max_temp = 130
3505
-
3506
-[fan]
3507
-pin = PC14
3508
-
3509
-[printer]
3510
-kinematics = corexy
3511
-max_velocity = 300
3512
-max_accel = 3000
3513
-max_z_velocity = 25
3514
-max_z_accel = 30
3515
-
3516
-[board_pins]
3517
-aliases = 
3518
-	
3519
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
3520
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
3521
-	
3522
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
3523
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
3524
-=======================
3525
-Extruder max_extrude_ratio=0.266081
3526
-mcu 'mcu': Starting serial connect
3527
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3528
-webhooks client 547715463248: New connection
3529
-webhooks client 547715463248: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
3530
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3531
-webhooks client 547715463248: Disconnected
3532
-Restarting printer
3533
-Start printer at Wed Dec 11 08:58:37 2024 (1733903917.2 1486.2)
3534
-===== Config file =====
3535
-[virtual_sdcard]
3536
-path = /home/countcobolt/printer_data/gcodes
3537
-on_error_gcode = CANCEL_PRINT
3538
-
3539
-[pause_resume]
3540
-
3541
-[display_status]
3542
-
3543
-[respond]
3544
-
3545
-[gcode_macro CANCEL_PRINT]
3546
-description = Cancel the actual running print
3547
-rename_existing = CANCEL_PRINT_BASE
3548
-gcode = 
3549
-	
3550
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3551
-	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
3552
-	{% set retract = client.cancel_retract|default(5.0)|abs %}
3553
-	
3554
-	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
3555
-	else "X=" ~ client.park_at_cancel_x %}
3556
-	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
3557
-	else "Y=" ~ client.park_at_cancel_y %}
3558
-	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
3559
-	
3560
-	
3561
-	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
3562
-	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
3563
-	{% endif %}
3564
-	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
3565
-	_CLIENT_RETRACT LENGTH={retract}
3566
-	TURN_OFF_HEATERS
3567
-	M106 S0
3568
-	{client.user_cancel_macro|default("")}
3569
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3570
-	
3571
-	SET_PAUSE_NEXT_LAYER ENABLE=0
3572
-	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
3573
-	CANCEL_PRINT_BASE
3574
-
3575
-[gcode_macro PAUSE]
3576
-description = Pause the actual running print
3577
-rename_existing = PAUSE_BASE
3578
-gcode = 
3579
-	
3580
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3581
-	{% set idle_timeout = client.idle_timeout|default(0) %}
3582
-	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
3583
-	{% set restore = False if printer.toolhead.extruder == ''
3584
-	else True  if params.RESTORE|default(1)|int == 1 else False %}
3585
-	
3586
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
3587
-	
3588
-	{% if idle_timeout > 0 %}
3589
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
3590
-	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
3591
-	{% endif %}
3592
-	PAUSE_BASE
3593
-	{client.user_pause_macro|default("")}
3594
-	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
3595
-
3596
-[gcode_macro RESUME]
3597
-description = Resume the actual running print
3598
-rename_existing = RESUME_BASE
3599
-variable_last_extruder_temp = {'restore': False, 'temp': 0}
3600
-variable_restore_idle_timeout = 0
3601
-variable_idle_state = False
3602
-gcode = 
3603
-	
3604
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3605
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3606
-	{% set sp_move = client.speed_move|default(velocity) %}
3607
-	{% set runout_resume = True if client.runout_sensor|default("") == ""
3608
-	else True if not printer[client.runout_sensor].enabled
3609
-	else printer[client.runout_sensor].filament_detected %}
3610
-	{% set can_extrude = True if printer.toolhead.extruder == ''
3611
-	else printer[printer.toolhead.extruder].can_extrude %}
3612
-	{% set do_resume = False %}
3613
-	{% set prompt_txt = [] %}
3614
-	
3615
-	
3616
-	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
3617
-	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3618
-	{% if last_extruder_temp.restore %}
3619
-	
3620
-	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
3621
-	M109 S{last_extruder_temp.temp}
3622
-	{% set do_resume = True %}
3623
-	{% elif can_extrude %}
3624
-	{% set do_resume = True %}
3625
-	{% else %}
3626
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3627
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3628
-	{% endif %}
3629
-	
3630
-	{% elif can_extrude %}
3631
-	{% set do_resume = True %}
3632
-	{% else %}
3633
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3634
-	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3635
-	{% endif %}
3636
-	{% if runout_resume %}
3637
-	{% if do_resume %}
3638
-	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
3639
-	{client.user_resume_macro|default("")}
3640
-	_CLIENT_EXTRUDE
3641
-	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
3642
-	{% endif %}
3643
-	{% else %}
3644
-	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
3645
-	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
3646
-	{% endif %}
3647
-	
3648
-	{% if not (runout_resume and do_resume) %}
3649
-	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
3650
-	{% for element in prompt_txt %}
3651
-	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
3652
-	{% endfor %}
3653
-	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
3654
-	RESPOND TYPE=command MSG="action:prompt_show"
3655
-	{% endif %}
3656
-
3657
-[gcode_macro SET_PAUSE_NEXT_LAYER]
3658
-description = Enable a pause if the next layer is reached
3659
-gcode = 
3660
-	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
3661
-	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
3662
-	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
3663
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
3664
-
3665
-[gcode_macro SET_PAUSE_AT_LAYER]
3666
-description = Enable/disable a pause if a given layer number is reached
3667
-gcode = 
3668
-	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
3669
-	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
3670
-	else params.LAYER is defined %}
3671
-	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
3672
-	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
3673
-	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
3674
-
3675
-[gcode_macro SET_PRINT_STATS_INFO]
3676
-rename_existing = SET_PRINT_STATS_INFO_BASE
3677
-description = Overwrite, to get pause_next_layer and pause_at_layer feature
3678
-variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
3679
-variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
3680
-gcode = 
3681
-	{% if pause_next_layer.enable %}
3682
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
3683
-	{pause_next_layer.call}
3684
-	SET_PAUSE_NEXT_LAYER ENABLE=0
3685
-	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
3686
-	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
3687
-	{pause_at_layer.call}
3688
-	SET_PAUSE_AT_LAYER ENABLE=0
3689
-	{% endif %}
3690
-	SET_PRINT_STATS_INFO_BASE {rawparams}
3691
-
3692
-[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
3693
-description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
3694
-gcode = 
3695
-	
3696
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3697
-	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3698
-	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
3699
-	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
3700
-	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
3701
-	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
3702
-	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
3703
-	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
3704
-	
3705
-	{% set origin    = printer.gcode_move.homing_origin %}
3706
-	{% set act       = printer.gcode_move.gcode_position %}
3707
-	{% set max       = printer.toolhead.axis_maximum %}
3708
-	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
3709
-	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
3710
-	else False %}
3711
-	
3712
-	{% set z_min = params.Z_MIN|default(0)|float %}
3713
-	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
3714
-	{% set x_park = params.X       if params.X is defined
3715
-	else custom_park_x  if use_custom
3716
-	else 0.0            if round_bed
3717
-	else (max.x - 5.0) %}
3718
-	{% set y_park = params.Y       if params.Y is defined
3719
-	else custom_park_y  if use_custom
3720
-	else (max.y - 5.0)  if round_bed and z_park < cone
3721
-	else 0.0            if round_bed
3722
-	else (max.y - 5.0) %}
3723
-	
3724
-	_CLIENT_RETRACT
3725
-	{% if "xyz" in printer.toolhead.homed_axes %}
3726
-	G90
3727
-	G1 Z{z_park} F{sp_hop}
3728
-	G1 X{x_park} Y{y_park} F{sp_move}
3729
-	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
3730
-	{% else %}
3731
-	RESPOND TYPE=echo MSG='Printer not homed'
3732
-	{% endif %}
3733
-
3734
-[gcode_macro _CLIENT_EXTRUDE]
3735
-description = Extrudes, if the extruder is hot enough
3736
-gcode = 
3737
-	
3738
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3739
-	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
3740
-	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
3741
-	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
3742
-	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
3743
-	
3744
-	{% if printer.toolhead.extruder != '' %}
3745
-	{% if printer[printer.toolhead.extruder].can_extrude %}
3746
-	{% if use_fw_retract %}
3747
-	{% if length < 0 %}
3748
-	G10
3749
-	{% else %}
3750
-	G11
3751
-	{% endif %}
3752
-	{% else %}
3753
-	M83
3754
-	G1 E{length} F{(speed|float|abs) * 60}
3755
-	{% if absolute_extrude %}
3756
-	M82
3757
-	{% endif %}
3758
-	{% endif %}
3759
-	{% else %}
3760
-	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
3761
-	{% endif %}
3762
-	{% endif %}
3763
-
3764
-[gcode_macro _CLIENT_RETRACT]
3765
-description = Retracts, if the extruder is hot enough
3766
-gcode = 
3767
-	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3768
-	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
3769
-	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
3770
-	
3771
-	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
3772
-
3773
-[gcode_macro _CLIENT_LINEAR_MOVE]
3774
-description = Linear move with save and restore of the gcode state
3775
-gcode = 
3776
-	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
3777
-	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
3778
-	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
3779
-	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
3780
-	{% set rate = "F" ~ params.F if params.F is defined else "" %}
3781
-	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
3782
-	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
3783
-	SAVE_GCODE_STATE NAME=_client_movement
3784
-	{% if x_move or y_move or z_move %}
3785
-	G9{ 0 if ABSOLUTE else 1 }
3786
-	{% endif %}
3787
-	{% if e_move %}
3788
-	M8{ 2 if ABSOLUTE_E else 3 }
3789
-	{% endif %}
3790
-	G1 { x_move } { y_move } { z_move } { e_move } { rate }
3791
-	RESTORE_GCODE_STATE NAME=_client_movement
3792
-
3793
-[mcu]
3794
-serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
3795
-
3796
-[stepper_x]
3797
-step_pin = PE3
3798
-dir_pin = !PE2
3799
-enable_pin = !PE4
3800
-microsteps = 16
3801
-rotation_distance = 40
3802
-endstop_pin = PA15
3803
-position_endstop = 0
3804
-position_max = 300
3805
-homing_speed = 50
3806
-
3807
-[stepper_y]
3808
-step_pin = PE0
3809
-dir_pin = !PB9
3810
-enable_pin = !PE1
3811
-microsteps = 16
3812
-rotation_distance = 40
3813
-endstop_pin = !PD2
3814
-position_endstop = 0
3815
-position_max = 300
3816
-homing_speed = 50
3817
-
3818
-[stepper_z]
3819
-step_pin = PB5
3820
-dir_pin = PB4
3821
-enable_pin = !PB8
3822
-microsteps = 16
3823
-rotation_distance = 8
3824
-endstop_pin = !PC8
3825
-position_endstop = 0.5
3826
-position_max = 200
3827
-
3828
-[stepper_z1]
3829
-step_pin = PD15
3830
-dir_pin = !PA1
3831
-enable_pin = !PA3
3832
-microsteps = 16
3833
-rotation_distance = 8
3834
-
3835
-[extruder]
3836
-step_pin = PD6
3837
-dir_pin = !PD3
3838
-enable_pin = !PB3
3839
-microsteps = 16
3840
-rotation_distance = 33.500
3841
-nozzle_diameter = 0.400
3842
-filament_diameter = 1.750
3843
-heater_pin = PE5
3844
-sensor_type = ATC Semitec 104GT-2
3845
-sensor_pin = PC1
3846
-control = pid
3847
-pid_kp = 14.669
3848
-pid_ki = 0.572
3849
-pid_kd = 94.068
3850
-min_temp = 0
3851
-max_temp = 250
3852
-
3853
-[heater_bed]
3854
-heater_pin = PA0
3855
-sensor_type = EPCOS 100K B57560G104F
3856
-sensor_pin = PC0
3857
-control = pid
3858
-pid_kp = 325.10
3859
-pid_ki = 63.35
3860
-pid_kd = 417.10
3861
-min_temp = 0
3862
-max_temp = 130
3863
-
3864
-[fan]
3865
-pin = PC14
3866
-
3867
-[printer]
3868
-kinematics = corexy
3869
-max_velocity = 300
3870
-max_accel = 3000
3871
-max_z_velocity = 25
3872
-max_z_accel = 30
3873
-
3874
-[board_pins]
3875
-aliases = 
3876
-	
3877
-	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
3878
-	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
3879
-	
3880
-	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
3881
-	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
3882
-=======================
3883
-Extruder max_extrude_ratio=0.266081
3884
-mcu 'mcu': Starting serial connect
3885
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3886
-webhooks client 547723709136: New connection
3887
-webhooks client 547723709136: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
3888
-mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
Browse code

merge from laptop

Steve Caster authored on14/12/2024 12:28:56
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,3888 @@
1
+=============== Log rollover at Wed Dec 11 08:06:04 2024 ===============
2
+Starting Klippy...
3
+Args: ['/home/countcobolt/klipper/klippy/klippy.py', '/home/countcobolt/printer_data/config/printer.cfg', '-I', '/home/countcobolt/printer_data/comms/klippy.serial', '-l', '/home/countcobolt/printer_data/logs/klippy.log', '-a', '/home/countcobolt/printer_data/comms/klippy.sock']
4
+Git version: 'v0.12.0-396-gb7233d119'
5
+Branch: master
6
+Remote: origin
7
+Tracked URL: https://github.com/Klipper3d/klipper
8
+CPU: 4 core ?
9
+Python: '3.11.2 (main, Sep 14 2024, 03:00:30) [GCC 12.2.0]'
10
+Start printer at Wed Dec 11 08:06:05 2024 (1733900765.9 26.5)
11
+===== Config file =====
12
+[virtual_sdcard]
13
+path = /home/countcobolt/printer_data/gcodes
14
+on_error_gcode = CANCEL_PRINT
15
+
16
+[pause_resume]
17
+
18
+[display_status]
19
+
20
+[respond]
21
+
22
+[gcode_macro CANCEL_PRINT]
23
+description = Cancel the actual running print
24
+rename_existing = CANCEL_PRINT_BASE
25
+gcode = 
26
+	
27
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
28
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
29
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
30
+	
31
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
32
+	else "X=" ~ client.park_at_cancel_x %}
33
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
34
+	else "Y=" ~ client.park_at_cancel_y %}
35
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
36
+	
37
+	
38
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
39
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
40
+	{% endif %}
41
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
42
+	_CLIENT_RETRACT LENGTH={retract}
43
+	TURN_OFF_HEATERS
44
+	M106 S0
45
+	{client.user_cancel_macro|default("")}
46
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
47
+	
48
+	SET_PAUSE_NEXT_LAYER ENABLE=0
49
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
50
+	CANCEL_PRINT_BASE
51
+
52
+[gcode_macro PAUSE]
53
+description = Pause the actual running print
54
+rename_existing = PAUSE_BASE
55
+gcode = 
56
+	
57
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
58
+	{% set idle_timeout = client.idle_timeout|default(0) %}
59
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
60
+	{% set restore = False if printer.toolhead.extruder == ''
61
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
62
+	
63
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
64
+	
65
+	{% if idle_timeout > 0 %}
66
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
67
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
68
+	{% endif %}
69
+	PAUSE_BASE
70
+	{client.user_pause_macro|default("")}
71
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
72
+
73
+[gcode_macro RESUME]
74
+description = Resume the actual running print
75
+rename_existing = RESUME_BASE
76
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
77
+variable_restore_idle_timeout = 0
78
+variable_idle_state = False
79
+gcode = 
80
+	
81
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
82
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
83
+	{% set sp_move = client.speed_move|default(velocity) %}
84
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
85
+	else True if not printer[client.runout_sensor].enabled
86
+	else printer[client.runout_sensor].filament_detected %}
87
+	{% set can_extrude = True if printer.toolhead.extruder == ''
88
+	else printer[printer.toolhead.extruder].can_extrude %}
89
+	{% set do_resume = False %}
90
+	{% set prompt_txt = [] %}
91
+	
92
+	
93
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
94
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
95
+	{% if last_extruder_temp.restore %}
96
+	
97
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
98
+	M109 S{last_extruder_temp.temp}
99
+	{% set do_resume = True %}
100
+	{% elif can_extrude %}
101
+	{% set do_resume = True %}
102
+	{% else %}
103
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
104
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
105
+	{% endif %}
106
+	
107
+	{% elif can_extrude %}
108
+	{% set do_resume = True %}
109
+	{% else %}
110
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
111
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
112
+	{% endif %}
113
+	{% if runout_resume %}
114
+	{% if do_resume %}
115
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
116
+	{client.user_resume_macro|default("")}
117
+	_CLIENT_EXTRUDE
118
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
119
+	{% endif %}
120
+	{% else %}
121
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
122
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
123
+	{% endif %}
124
+	
125
+	{% if not (runout_resume and do_resume) %}
126
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
127
+	{% for element in prompt_txt %}
128
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
129
+	{% endfor %}
130
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
131
+	RESPOND TYPE=command MSG="action:prompt_show"
132
+	{% endif %}
133
+
134
+[gcode_macro SET_PAUSE_NEXT_LAYER]
135
+description = Enable a pause if the next layer is reached
136
+gcode = 
137
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
138
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
139
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
140
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
141
+
142
+[gcode_macro SET_PAUSE_AT_LAYER]
143
+description = Enable/disable a pause if a given layer number is reached
144
+gcode = 
145
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
146
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
147
+	else params.LAYER is defined %}
148
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
149
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
150
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
151
+
152
+[gcode_macro SET_PRINT_STATS_INFO]
153
+rename_existing = SET_PRINT_STATS_INFO_BASE
154
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
155
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
156
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
157
+gcode = 
158
+	{% if pause_next_layer.enable %}
159
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
160
+	{pause_next_layer.call}
161
+	SET_PAUSE_NEXT_LAYER ENABLE=0
162
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
163
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
164
+	{pause_at_layer.call}
165
+	SET_PAUSE_AT_LAYER ENABLE=0
166
+	{% endif %}
167
+	SET_PRINT_STATS_INFO_BASE {rawparams}
168
+
169
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
170
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
171
+gcode = 
172
+	
173
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
174
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
175
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
176
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
177
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
178
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
179
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
180
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
181
+	
182
+	{% set origin    = printer.gcode_move.homing_origin %}
183
+	{% set act       = printer.gcode_move.gcode_position %}
184
+	{% set max       = printer.toolhead.axis_maximum %}
185
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
186
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
187
+	else False %}
188
+	
189
+	{% set z_min = params.Z_MIN|default(0)|float %}
190
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
191
+	{% set x_park = params.X       if params.X is defined
192
+	else custom_park_x  if use_custom
193
+	else 0.0            if round_bed
194
+	else (max.x - 5.0) %}
195
+	{% set y_park = params.Y       if params.Y is defined
196
+	else custom_park_y  if use_custom
197
+	else (max.y - 5.0)  if round_bed and z_park < cone
198
+	else 0.0            if round_bed
199
+	else (max.y - 5.0) %}
200
+	
201
+	_CLIENT_RETRACT
202
+	{% if "xyz" in printer.toolhead.homed_axes %}
203
+	G90
204
+	G1 Z{z_park} F{sp_hop}
205
+	G1 X{x_park} Y{y_park} F{sp_move}
206
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
207
+	{% else %}
208
+	RESPOND TYPE=echo MSG='Printer not homed'
209
+	{% endif %}
210
+
211
+[gcode_macro _CLIENT_EXTRUDE]
212
+description = Extrudes, if the extruder is hot enough
213
+gcode = 
214
+	
215
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
216
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
217
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
218
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
219
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
220
+	
221
+	{% if printer.toolhead.extruder != '' %}
222
+	{% if printer[printer.toolhead.extruder].can_extrude %}
223
+	{% if use_fw_retract %}
224
+	{% if length < 0 %}
225
+	G10
226
+	{% else %}
227
+	G11
228
+	{% endif %}
229
+	{% else %}
230
+	M83
231
+	G1 E{length} F{(speed|float|abs) * 60}
232
+	{% if absolute_extrude %}
233
+	M82
234
+	{% endif %}
235
+	{% endif %}
236
+	{% else %}
237
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
238
+	{% endif %}
239
+	{% endif %}
240
+
241
+[gcode_macro _CLIENT_RETRACT]
242
+description = Retracts, if the extruder is hot enough
243
+gcode = 
244
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
245
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
246
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
247
+	
248
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
249
+
250
+[gcode_macro _CLIENT_LINEAR_MOVE]
251
+description = Linear move with save and restore of the gcode state
252
+gcode = 
253
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
254
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
255
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
256
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
257
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
258
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
259
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
260
+	SAVE_GCODE_STATE NAME=_client_movement
261
+	{% if x_move or y_move or z_move %}
262
+	G9{ 0 if ABSOLUTE else 1 }
263
+	{% endif %}
264
+	{% if e_move %}
265
+	M8{ 2 if ABSOLUTE_E else 3 }
266
+	{% endif %}
267
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
268
+	RESTORE_GCODE_STATE NAME=_client_movement
269
+
270
+[mcu]
271
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
272
+
273
+[stepper_x]
274
+step_pin = PE3
275
+dir_pin = !PE2
276
+enable_pin = !PE4
277
+microsteps = 16
278
+rotation_distance = 40
279
+endstop_pin = PA15
280
+position_endstop = 0
281
+position_max = 300
282
+homing_speed = 50
283
+
284
+[stepper_y]
285
+step_pin = PE0
286
+dir_pin = !PB9
287
+enable_pin = !PE1
288
+microsteps = 16
289
+rotation_distance = 40
290
+endstop_pin = !PD2
291
+position_endstop = 0
292
+position_max = 300
293
+homing_speed = 50
294
+
295
+[stepper_z]
296
+step_pin = PB5
297
+dir_pin = PB4
298
+enable_pin = !PB8
299
+microsteps = 16
300
+rotation_distance = 8
301
+endstop_pin = !PC8
302
+position_endstop = 0.5
303
+position_max = 200
304
+
305
+[stepper_z1]
306
+step_pin = PD15
307
+dir_pin = !PA1
308
+enable_pin = !PA3
309
+microsteps = 16
310
+rotation_distance = 8
311
+endstop_pin = !PC8
312
+position_endstop = 0.5
313
+position_max = 200
314
+
315
+[extruder]
316
+step_pin = PD6
317
+dir_pin = !PD3
318
+enable_pin = !PB3
319
+microsteps = 16
320
+rotation_distance = 33.500
321
+nozzle_diameter = 0.400
322
+filament_diameter = 1.750
323
+heater_pin = PE5
324
+sensor_type = ATC Semitec 104GT-2
325
+sensor_pin = PC1
326
+control = pid
327
+pid_kp = 14.669
328
+pid_ki = 0.572
329
+pid_kd = 94.068
330
+min_temp = 0
331
+max_temp = 250
332
+
333
+[heater_bed]
334
+heater_pin = PA0
335
+sensor_type = EPCOS 100K B57560G104F
336
+sensor_pin = PC0
337
+control = pid
338
+pid_kp = 325.10
339
+pid_ki = 63.35
340
+pid_kd = 417.10
341
+min_temp = 0
342
+max_temp = 130
343
+
344
+[fan]
345
+pin = PC14
346
+
347
+[printer]
348
+kinematics = corexy
349
+max_velocity = 300
350
+max_accel = 3000
351
+max_z_velocity = 25
352
+max_z_accel = 30
353
+
354
+[board_pins]
355
+aliases = 
356
+	
357
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
358
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
359
+	
360
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
361
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
362
+=======================
363
+Extruder max_extrude_ratio=0.266081
364
+Config error
365
+Traceback (most recent call last):
366
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 130, in _connect
367
+    self._read_config()
368
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 127, in _read_config
369
+    pconfig.check_unused_options(config)
370
+  File "/home/countcobolt/klipper/klippy/configfile.py", line 497, in check_unused_options
371
+    self.validate.check_unused(config.fileconfig)
372
+  File "/home/countcobolt/klipper/klippy/configfile.py", line 446, in check_unused
373
+    raise error("Option '%s' is not valid in section '%s'"
374
+configparser.Error: Option 'position_endstop' is not valid in section 'stepper_z1'
375
+webhooks client 548583637904: New connection
376
+webhooks client 548583637904: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
377
+webhooks client 548583637904: Disconnected
378
+Restarting printer
379
+Start printer at Wed Dec 11 08:23:00 2024 (1733901780.0 851.4)
380
+===== Config file =====
381
+[virtual_sdcard]
382
+path = /home/countcobolt/printer_data/gcodes
383
+on_error_gcode = CANCEL_PRINT
384
+
385
+[pause_resume]
386
+
387
+[display_status]
388
+
389
+[respond]
390
+
391
+[gcode_macro CANCEL_PRINT]
392
+description = Cancel the actual running print
393
+rename_existing = CANCEL_PRINT_BASE
394
+gcode = 
395
+	
396
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
397
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
398
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
399
+	
400
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
401
+	else "X=" ~ client.park_at_cancel_x %}
402
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
403
+	else "Y=" ~ client.park_at_cancel_y %}
404
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
405
+	
406
+	
407
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
408
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
409
+	{% endif %}
410
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
411
+	_CLIENT_RETRACT LENGTH={retract}
412
+	TURN_OFF_HEATERS
413
+	M106 S0
414
+	{client.user_cancel_macro|default("")}
415
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
416
+	
417
+	SET_PAUSE_NEXT_LAYER ENABLE=0
418
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
419
+	CANCEL_PRINT_BASE
420
+
421
+[gcode_macro PAUSE]
422
+description = Pause the actual running print
423
+rename_existing = PAUSE_BASE
424
+gcode = 
425
+	
426
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
427
+	{% set idle_timeout = client.idle_timeout|default(0) %}
428
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
429
+	{% set restore = False if printer.toolhead.extruder == ''
430
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
431
+	
432
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
433
+	
434
+	{% if idle_timeout > 0 %}
435
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
436
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
437
+	{% endif %}
438
+	PAUSE_BASE
439
+	{client.user_pause_macro|default("")}
440
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
441
+
442
+[gcode_macro RESUME]
443
+description = Resume the actual running print
444
+rename_existing = RESUME_BASE
445
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
446
+variable_restore_idle_timeout = 0
447
+variable_idle_state = False
448
+gcode = 
449
+	
450
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
451
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
452
+	{% set sp_move = client.speed_move|default(velocity) %}
453
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
454
+	else True if not printer[client.runout_sensor].enabled
455
+	else printer[client.runout_sensor].filament_detected %}
456
+	{% set can_extrude = True if printer.toolhead.extruder == ''
457
+	else printer[printer.toolhead.extruder].can_extrude %}
458
+	{% set do_resume = False %}
459
+	{% set prompt_txt = [] %}
460
+	
461
+	
462
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
463
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
464
+	{% if last_extruder_temp.restore %}
465
+	
466
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
467
+	M109 S{last_extruder_temp.temp}
468
+	{% set do_resume = True %}
469
+	{% elif can_extrude %}
470
+	{% set do_resume = True %}
471
+	{% else %}
472
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
473
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
474
+	{% endif %}
475
+	
476
+	{% elif can_extrude %}
477
+	{% set do_resume = True %}
478
+	{% else %}
479
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
480
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
481
+	{% endif %}
482
+	{% if runout_resume %}
483
+	{% if do_resume %}
484
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
485
+	{client.user_resume_macro|default("")}
486
+	_CLIENT_EXTRUDE
487
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
488
+	{% endif %}
489
+	{% else %}
490
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
491
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
492
+	{% endif %}
493
+	
494
+	{% if not (runout_resume and do_resume) %}
495
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
496
+	{% for element in prompt_txt %}
497
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
498
+	{% endfor %}
499
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
500
+	RESPOND TYPE=command MSG="action:prompt_show"
501
+	{% endif %}
502
+
503
+[gcode_macro SET_PAUSE_NEXT_LAYER]
504
+description = Enable a pause if the next layer is reached
505
+gcode = 
506
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
507
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
508
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
509
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
510
+
511
+[gcode_macro SET_PAUSE_AT_LAYER]
512
+description = Enable/disable a pause if a given layer number is reached
513
+gcode = 
514
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
515
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
516
+	else params.LAYER is defined %}
517
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
518
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
519
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
520
+
521
+[gcode_macro SET_PRINT_STATS_INFO]
522
+rename_existing = SET_PRINT_STATS_INFO_BASE
523
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
524
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
525
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
526
+gcode = 
527
+	{% if pause_next_layer.enable %}
528
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
529
+	{pause_next_layer.call}
530
+	SET_PAUSE_NEXT_LAYER ENABLE=0
531
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
532
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
533
+	{pause_at_layer.call}
534
+	SET_PAUSE_AT_LAYER ENABLE=0
535
+	{% endif %}
536
+	SET_PRINT_STATS_INFO_BASE {rawparams}
537
+
538
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
539
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
540
+gcode = 
541
+	
542
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
543
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
544
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
545
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
546
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
547
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
548
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
549
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
550
+	
551
+	{% set origin    = printer.gcode_move.homing_origin %}
552
+	{% set act       = printer.gcode_move.gcode_position %}
553
+	{% set max       = printer.toolhead.axis_maximum %}
554
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
555
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
556
+	else False %}
557
+	
558
+	{% set z_min = params.Z_MIN|default(0)|float %}
559
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
560
+	{% set x_park = params.X       if params.X is defined
561
+	else custom_park_x  if use_custom
562
+	else 0.0            if round_bed
563
+	else (max.x - 5.0) %}
564
+	{% set y_park = params.Y       if params.Y is defined
565
+	else custom_park_y  if use_custom
566
+	else (max.y - 5.0)  if round_bed and z_park < cone
567
+	else 0.0            if round_bed
568
+	else (max.y - 5.0) %}
569
+	
570
+	_CLIENT_RETRACT
571
+	{% if "xyz" in printer.toolhead.homed_axes %}
572
+	G90
573
+	G1 Z{z_park} F{sp_hop}
574
+	G1 X{x_park} Y{y_park} F{sp_move}
575
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
576
+	{% else %}
577
+	RESPOND TYPE=echo MSG='Printer not homed'
578
+	{% endif %}
579
+
580
+[gcode_macro _CLIENT_EXTRUDE]
581
+description = Extrudes, if the extruder is hot enough
582
+gcode = 
583
+	
584
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
585
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
586
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
587
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
588
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
589
+	
590
+	{% if printer.toolhead.extruder != '' %}
591
+	{% if printer[printer.toolhead.extruder].can_extrude %}
592
+	{% if use_fw_retract %}
593
+	{% if length < 0 %}
594
+	G10
595
+	{% else %}
596
+	G11
597
+	{% endif %}
598
+	{% else %}
599
+	M83
600
+	G1 E{length} F{(speed|float|abs) * 60}
601
+	{% if absolute_extrude %}
602
+	M82
603
+	{% endif %}
604
+	{% endif %}
605
+	{% else %}
606
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
607
+	{% endif %}
608
+	{% endif %}
609
+
610
+[gcode_macro _CLIENT_RETRACT]
611
+description = Retracts, if the extruder is hot enough
612
+gcode = 
613
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
614
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
615
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
616
+	
617
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
618
+
619
+[gcode_macro _CLIENT_LINEAR_MOVE]
620
+description = Linear move with save and restore of the gcode state
621
+gcode = 
622
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
623
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
624
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
625
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
626
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
627
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
628
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
629
+	SAVE_GCODE_STATE NAME=_client_movement
630
+	{% if x_move or y_move or z_move %}
631
+	G9{ 0 if ABSOLUTE else 1 }
632
+	{% endif %}
633
+	{% if e_move %}
634
+	M8{ 2 if ABSOLUTE_E else 3 }
635
+	{% endif %}
636
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
637
+	RESTORE_GCODE_STATE NAME=_client_movement
638
+
639
+[mcu]
640
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
641
+
642
+[stepper_x]
643
+step_pin = PE3
644
+dir_pin = !PE2
645
+enable_pin = !PE4
646
+microsteps = 16
647
+rotation_distance = 40
648
+endstop_pin = PA15
649
+position_endstop = 0
650
+position_max = 300
651
+homing_speed = 50
652
+
653
+[stepper_y]
654
+step_pin = PE0
655
+dir_pin = !PB9
656
+enable_pin = !PE1
657
+microsteps = 16
658
+rotation_distance = 40
659
+endstop_pin = !PD2
660
+position_endstop = 0
661
+position_max = 300
662
+homing_speed = 50
663
+
664
+[stepper_z]
665
+step_pin = PB5
666
+dir_pin = PB4
667
+enable_pin = !PB8
668
+microsteps = 16
669
+rotation_distance = 8
670
+endstop_pin = !PC8
671
+position_endstop = 0.5
672
+position_max = 200
673
+
674
+[stepper_z1]
675
+step_pin = PD15
676
+dir_pin = !PA1
677
+enable_pin = !PA3
678
+microsteps = 16
679
+rotation_distance = 8
680
+
681
+[extruder]
682
+step_pin = PD6
683
+dir_pin = !PD3
684
+enable_pin = !PB3
685
+microsteps = 16
686
+rotation_distance = 33.500
687
+nozzle_diameter = 0.400
688
+filament_diameter = 1.750
689
+heater_pin = PE5
690
+sensor_type = ATC Semitec 104GT-2
691
+sensor_pin = PC1
692
+control = pid
693
+pid_kp = 14.669
694
+pid_ki = 0.572
695
+pid_kd = 94.068
696
+min_temp = 0
697
+max_temp = 250
698
+
699
+[heater_bed]
700
+heater_pin = PA0
701
+sensor_type = EPCOS 100K B57560G104F
702
+sensor_pin = PC0
703
+control = pid
704
+pid_kp = 325.10
705
+pid_ki = 63.35
706
+pid_kd = 417.10
707
+min_temp = 0
708
+max_temp = 130
709
+
710
+[fan]
711
+pin = PC14
712
+
713
+[printer]
714
+kinematics = corexy
715
+max_velocity = 300
716
+max_accel = 3000
717
+max_z_velocity = 25
718
+max_z_accel = 30
719
+
720
+[board_pins]
721
+aliases = 
722
+	
723
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
724
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
725
+	
726
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
727
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
728
+=======================
729
+Extruder max_extrude_ratio=0.266081
730
+mcu 'mcu': Starting serial connect
731
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
732
+webhooks client 548576811024: New connection
733
+webhooks client 548576811024: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
734
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
735
+Attempting MCU 'mcu' reset
736
+Unhandled exception during post run
737
+Traceback (most recent call last):
738
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
739
+    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
740
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
741
+FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
742
+
743
+During handling of the above exception, another exception occurred:
744
+
745
+Traceback (most recent call last):
746
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
747
+    self.send_event("klippy:firmware_restart")
748
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
749
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
750
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
751
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
752
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
753
+            ^^^^^^^^^^^
754
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
755
+    self._restart_arduino()
756
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
757
+    serialhdl.arduino_reset(self._serialport, self._reactor)
758
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
759
+    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
760
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
761
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
762
+    self.open()
763
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
764
+    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
765
+serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
766
+Restarting printer
767
+Start printer at Wed Dec 11 08:23:11 2024 (1733901791.1 862.6)
768
+===== Config file =====
769
+[virtual_sdcard]
770
+path = /home/countcobolt/printer_data/gcodes
771
+on_error_gcode = CANCEL_PRINT
772
+
773
+[pause_resume]
774
+
775
+[display_status]
776
+
777
+[respond]
778
+
779
+[gcode_macro CANCEL_PRINT]
780
+description = Cancel the actual running print
781
+rename_existing = CANCEL_PRINT_BASE
782
+gcode = 
783
+	
784
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
785
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
786
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
787
+	
788
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
789
+	else "X=" ~ client.park_at_cancel_x %}
790
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
791
+	else "Y=" ~ client.park_at_cancel_y %}
792
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
793
+	
794
+	
795
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
796
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
797
+	{% endif %}
798
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
799
+	_CLIENT_RETRACT LENGTH={retract}
800
+	TURN_OFF_HEATERS
801
+	M106 S0
802
+	{client.user_cancel_macro|default("")}
803
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
804
+	
805
+	SET_PAUSE_NEXT_LAYER ENABLE=0
806
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
807
+	CANCEL_PRINT_BASE
808
+
809
+[gcode_macro PAUSE]
810
+description = Pause the actual running print
811
+rename_existing = PAUSE_BASE
812
+gcode = 
813
+	
814
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
815
+	{% set idle_timeout = client.idle_timeout|default(0) %}
816
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
817
+	{% set restore = False if printer.toolhead.extruder == ''
818
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
819
+	
820
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
821
+	
822
+	{% if idle_timeout > 0 %}
823
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
824
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
825
+	{% endif %}
826
+	PAUSE_BASE
827
+	{client.user_pause_macro|default("")}
828
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
829
+
830
+[gcode_macro RESUME]
831
+description = Resume the actual running print
832
+rename_existing = RESUME_BASE
833
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
834
+variable_restore_idle_timeout = 0
835
+variable_idle_state = False
836
+gcode = 
837
+	
838
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
839
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
840
+	{% set sp_move = client.speed_move|default(velocity) %}
841
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
842
+	else True if not printer[client.runout_sensor].enabled
843
+	else printer[client.runout_sensor].filament_detected %}
844
+	{% set can_extrude = True if printer.toolhead.extruder == ''
845
+	else printer[printer.toolhead.extruder].can_extrude %}
846
+	{% set do_resume = False %}
847
+	{% set prompt_txt = [] %}
848
+	
849
+	
850
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
851
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
852
+	{% if last_extruder_temp.restore %}
853
+	
854
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
855
+	M109 S{last_extruder_temp.temp}
856
+	{% set do_resume = True %}
857
+	{% elif can_extrude %}
858
+	{% set do_resume = True %}
859
+	{% else %}
860
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
861
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
862
+	{% endif %}
863
+	
864
+	{% elif can_extrude %}
865
+	{% set do_resume = True %}
866
+	{% else %}
867
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
868
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
869
+	{% endif %}
870
+	{% if runout_resume %}
871
+	{% if do_resume %}
872
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
873
+	{client.user_resume_macro|default("")}
874
+	_CLIENT_EXTRUDE
875
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
876
+	{% endif %}
877
+	{% else %}
878
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
879
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
880
+	{% endif %}
881
+	
882
+	{% if not (runout_resume and do_resume) %}
883
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
884
+	{% for element in prompt_txt %}
885
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
886
+	{% endfor %}
887
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
888
+	RESPOND TYPE=command MSG="action:prompt_show"
889
+	{% endif %}
890
+
891
+[gcode_macro SET_PAUSE_NEXT_LAYER]
892
+description = Enable a pause if the next layer is reached
893
+gcode = 
894
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
895
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
896
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
897
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
898
+
899
+[gcode_macro SET_PAUSE_AT_LAYER]
900
+description = Enable/disable a pause if a given layer number is reached
901
+gcode = 
902
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
903
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
904
+	else params.LAYER is defined %}
905
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
906
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
907
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
908
+
909
+[gcode_macro SET_PRINT_STATS_INFO]
910
+rename_existing = SET_PRINT_STATS_INFO_BASE
911
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
912
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
913
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
914
+gcode = 
915
+	{% if pause_next_layer.enable %}
916
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
917
+	{pause_next_layer.call}
918
+	SET_PAUSE_NEXT_LAYER ENABLE=0
919
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
920
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
921
+	{pause_at_layer.call}
922
+	SET_PAUSE_AT_LAYER ENABLE=0
923
+	{% endif %}
924
+	SET_PRINT_STATS_INFO_BASE {rawparams}
925
+
926
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
927
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
928
+gcode = 
929
+	
930
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
931
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
932
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
933
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
934
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
935
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
936
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
937
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
938
+	
939
+	{% set origin    = printer.gcode_move.homing_origin %}
940
+	{% set act       = printer.gcode_move.gcode_position %}
941
+	{% set max       = printer.toolhead.axis_maximum %}
942
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
943
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
944
+	else False %}
945
+	
946
+	{% set z_min = params.Z_MIN|default(0)|float %}
947
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
948
+	{% set x_park = params.X       if params.X is defined
949
+	else custom_park_x  if use_custom
950
+	else 0.0            if round_bed
951
+	else (max.x - 5.0) %}
952
+	{% set y_park = params.Y       if params.Y is defined
953
+	else custom_park_y  if use_custom
954
+	else (max.y - 5.0)  if round_bed and z_park < cone
955
+	else 0.0            if round_bed
956
+	else (max.y - 5.0) %}
957
+	
958
+	_CLIENT_RETRACT
959
+	{% if "xyz" in printer.toolhead.homed_axes %}
960
+	G90
961
+	G1 Z{z_park} F{sp_hop}
962
+	G1 X{x_park} Y{y_park} F{sp_move}
963
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
964
+	{% else %}
965
+	RESPOND TYPE=echo MSG='Printer not homed'
966
+	{% endif %}
967
+
968
+[gcode_macro _CLIENT_EXTRUDE]
969
+description = Extrudes, if the extruder is hot enough
970
+gcode = 
971
+	
972
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
973
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
974
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
975
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
976
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
977
+	
978
+	{% if printer.toolhead.extruder != '' %}
979
+	{% if printer[printer.toolhead.extruder].can_extrude %}
980
+	{% if use_fw_retract %}
981
+	{% if length < 0 %}
982
+	G10
983
+	{% else %}
984
+	G11
985
+	{% endif %}
986
+	{% else %}
987
+	M83
988
+	G1 E{length} F{(speed|float|abs) * 60}
989
+	{% if absolute_extrude %}
990
+	M82
991
+	{% endif %}
992
+	{% endif %}
993
+	{% else %}
994
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
995
+	{% endif %}
996
+	{% endif %}
997
+
998
+[gcode_macro _CLIENT_RETRACT]
999
+description = Retracts, if the extruder is hot enough
1000
+gcode = 
1001
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1002
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
1003
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
1004
+	
1005
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
1006
+
1007
+[gcode_macro _CLIENT_LINEAR_MOVE]
1008
+description = Linear move with save and restore of the gcode state
1009
+gcode = 
1010
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
1011
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
1012
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
1013
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
1014
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
1015
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
1016
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
1017
+	SAVE_GCODE_STATE NAME=_client_movement
1018
+	{% if x_move or y_move or z_move %}
1019
+	G9{ 0 if ABSOLUTE else 1 }
1020
+	{% endif %}
1021
+	{% if e_move %}
1022
+	M8{ 2 if ABSOLUTE_E else 3 }
1023
+	{% endif %}
1024
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
1025
+	RESTORE_GCODE_STATE NAME=_client_movement
1026
+
1027
+[mcu]
1028
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
1029
+
1030
+[stepper_x]
1031
+step_pin = PE3
1032
+dir_pin = !PE2
1033
+enable_pin = !PE4
1034
+microsteps = 16
1035
+rotation_distance = 40
1036
+endstop_pin = PA15
1037
+position_endstop = 0
1038
+position_max = 300
1039
+homing_speed = 50
1040
+
1041
+[stepper_y]
1042
+step_pin = PE0
1043
+dir_pin = !PB9
1044
+enable_pin = !PE1
1045
+microsteps = 16
1046
+rotation_distance = 40
1047
+endstop_pin = !PD2
1048
+position_endstop = 0
1049
+position_max = 300
1050
+homing_speed = 50
1051
+
1052
+[stepper_z]
1053
+step_pin = PB5
1054
+dir_pin = PB4
1055
+enable_pin = !PB8
1056
+microsteps = 16
1057
+rotation_distance = 8
1058
+endstop_pin = !PC8
1059
+position_endstop = 0.5
1060
+position_max = 200
1061
+
1062
+[stepper_z1]
1063
+step_pin = PD15
1064
+dir_pin = !PA1
1065
+enable_pin = !PA3
1066
+microsteps = 16
1067
+rotation_distance = 8
1068
+
1069
+[extruder]
1070
+step_pin = PD6
1071
+dir_pin = !PD3
1072
+enable_pin = !PB3
1073
+microsteps = 16
1074
+rotation_distance = 33.500
1075
+nozzle_diameter = 0.400
1076
+filament_diameter = 1.750
1077
+heater_pin = PE5
1078
+sensor_type = ATC Semitec 104GT-2
1079
+sensor_pin = PC1
1080
+control = pid
1081
+pid_kp = 14.669
1082
+pid_ki = 0.572
1083
+pid_kd = 94.068
1084
+min_temp = 0
1085
+max_temp = 250
1086
+
1087
+[heater_bed]
1088
+heater_pin = PA0
1089
+sensor_type = EPCOS 100K B57560G104F
1090
+sensor_pin = PC0
1091
+control = pid
1092
+pid_kp = 325.10
1093
+pid_ki = 63.35
1094
+pid_kd = 417.10
1095
+min_temp = 0
1096
+max_temp = 130
1097
+
1098
+[fan]
1099
+pin = PC14
1100
+
1101
+[printer]
1102
+kinematics = corexy
1103
+max_velocity = 300
1104
+max_accel = 3000
1105
+max_z_velocity = 25
1106
+max_z_accel = 30
1107
+
1108
+[board_pins]
1109
+aliases = 
1110
+	
1111
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
1112
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
1113
+	
1114
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
1115
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
1116
+=======================
1117
+Extruder max_extrude_ratio=0.266081
1118
+mcu 'mcu': Starting serial connect
1119
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1120
+webhooks client 548575050192: New connection
1121
+webhooks client 548575050192: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
1122
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1123
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1124
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1125
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1126
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1127
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1128
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1129
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1130
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1131
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1132
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1133
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1134
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1135
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1136
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1137
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1138
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1139
+MCU error during connect
1140
+Traceback (most recent call last):
1141
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 793, in _mcu_identify
1142
+    self._serial.connect_uart(self._serialport, self._baud, rts)
1143
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 183, in connect_uart
1144
+    self._error("Unable to connect")
1145
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 61, in _error
1146
+    raise error(self.warn_prefix + (msg % params))
1147
+serialhdl.error: mcu 'mcu': Unable to connect
1148
+
1149
+During handling of the above exception, another exception occurred:
1150
+
1151
+Traceback (most recent call last):
1152
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 131, in _connect
1153
+    self.send_event("klippy:mcu_identify")
1154
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
1155
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1156
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1157
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
1158
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1159
+            ^^^^^^^^^^^
1160
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 798, in _mcu_identify
1161
+    raise error(str(e))
1162
+mcu.error: mcu 'mcu': Unable to connect
1163
+mcu 'mcu': Unable to connect
1164
+Once the underlying issue is corrected, use the
1165
+"FIRMWARE_RESTART" command to reset the firmware, reload the
1166
+config, and restart the host software.
1167
+Error configuring printer
1168
+
1169
+Build file /home/countcobolt/klipper/klippy/../.config(3654): Tue Dec 10 19:59:19 2024
1170
+========= Last MCU build config =========
1171
+CONFIG_LOW_LEVEL_OPTIONS=y
1172
+# CONFIG_MACH_AVR is not set
1173
+# CONFIG_MACH_ATSAM is not set
1174
+# CONFIG_MACH_ATSAMD is not set
1175
+# CONFIG_MACH_LPC176X is not set
1176
+CONFIG_MACH_STM32=y
1177
+# CONFIG_MACH_HC32F460 is not set
1178
+# CONFIG_MACH_RPXXXX is not set
1179
+# CONFIG_MACH_PRU is not set
1180
+# CONFIG_MACH_AR100 is not set
1181
+# CONFIG_MACH_LINUX is not set
1182
+# CONFIG_MACH_SIMU is not set
1183
+CONFIG_BOARD_DIRECTORY="stm32"
1184
+CONFIG_MCU="stm32f407xx"
1185
+CONFIG_CLOCK_FREQ=168000000
1186
+CONFIG_USBSERIAL=y
1187
+CONFIG_FLASH_SIZE=0x80000
1188
+CONFIG_FLASH_BOOT_ADDRESS=0x8000000
1189
+CONFIG_RAM_START=0x20000000
1190
+CONFIG_RAM_SIZE=0x20000
1191
+CONFIG_STACK_SIZE=512
1192
+CONFIG_FLASH_APPLICATION_ADDRESS=0x800C000
1193
+CONFIG_STM32_SELECT=y
1194
+# CONFIG_MACH_STM32F103 is not set
1195
+# CONFIG_MACH_STM32F207 is not set
1196
+# CONFIG_MACH_STM32F401 is not set
1197
+# CONFIG_MACH_STM32F405 is not set
1198
+CONFIG_MACH_STM32F407=y
1199
+# CONFIG_MACH_STM32F429 is not set
1200
+# CONFIG_MACH_STM32F446 is not set
1201
+# CONFIG_MACH_STM32F765 is not set
1202
+# CONFIG_MACH_STM32F031 is not set
1203
+# CONFIG_MACH_STM32F042 is not set
1204
+# CONFIG_MACH_STM32F070 is not set
1205
+# CONFIG_MACH_STM32F072 is not set
1206
+# CONFIG_MACH_STM32G070 is not set
1207
+# CONFIG_MACH_STM32G071 is not set
1208
+# CONFIG_MACH_STM32G0B0 is not set
1209
+# CONFIG_MACH_STM32G0B1 is not set
1210
+# CONFIG_MACH_STM32G431 is not set
1211
+# CONFIG_MACH_STM32G474 is not set
1212
+# CONFIG_MACH_STM32H723 is not set
1213
+# CONFIG_MACH_STM32H743 is not set
1214
+# CONFIG_MACH_STM32H750 is not set
1215
+# CONFIG_MACH_STM32L412 is not set
1216
+# CONFIG_MACH_N32G452 is not set
1217
+# CONFIG_MACH_N32G455 is not set
1218
+CONFIG_MACH_STM32F4=y
1219
+CONFIG_MACH_STM32F4x5=y
1220
+CONFIG_HAVE_STM32_USBOTG=y
1221
+CONFIG_HAVE_STM32_CANBUS=y
1222
+CONFIG_HAVE_STM32_USBCANBUS=y
1223
+CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000
1224
+# CONFIG_STM32_FLASH_START_8000 is not set
1225
+# CONFIG_STM32_FLASH_START_20200 is not set
1226
+CONFIG_STM32_FLASH_START_C000=y
1227
+# CONFIG_STM32_FLASH_START_10000 is not set
1228
+# CONFIG_STM32_FLASH_START_4000 is not set
1229
+# CONFIG_STM32_FLASH_START_0000 is not set
1230
+CONFIG_STM32_CLOCK_REF_8M=y
1231
+# CONFIG_STM32_CLOCK_REF_12M is not set
1232
+# CONFIG_STM32_CLOCK_REF_16M is not set
1233
+# CONFIG_STM32_CLOCK_REF_20M is not set
1234
+# CONFIG_STM32_CLOCK_REF_24M is not set
1235
+# CONFIG_STM32_CLOCK_REF_25M is not set
1236
+# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
1237
+CONFIG_CLOCK_REF_FREQ=8000000
1238
+CONFIG_STM32F0_TRIM=16
1239
+CONFIG_STM32_USB_PA11_PA12=y
1240
+# CONFIG_STM32_SERIAL_USART1 is not set
1241
+# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
1242
+# CONFIG_STM32_SERIAL_USART2 is not set
1243
+# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
1244
+# CONFIG_STM32_SERIAL_USART3 is not set
1245
+# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
1246
+# CONFIG_STM32_CANBUS_PA11_PA12 is not set
1247
+# CONFIG_STM32_CANBUS_PA11_PB9 is not set
1248
+# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
1249
+# CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set
1250
+# CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set
1251
+# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
1252
+# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
1253
+# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
1254
+CONFIG_USB=y
1255
+CONFIG_USB_VENDOR_ID=0x1d50
1256
+CONFIG_USB_DEVICE_ID=0x614e
1257
+CONFIG_USB_SERIAL_NUMBER_CHIPID=y
1258
+CONFIG_USB_SERIAL_NUMBER="12345"
1259
+
1260
+#
1261
+# USB ids
1262
+#
1263
+# end of USB ids
1264
+
1265
+CONFIG_WANT_GPIO_BITBANGING=y
1266
+CONFIG_WANT_DISPLAYS=y
1267
+CONFIG_WANT_SENSORS=y
1268
+CONFIG_WANT_LIS2DW=y
1269
+CONFIG_WANT_LDC1612=y
1270
+CONFIG_WANT_HX71X=y
1271
+CONFIG_WANT_ADS1220=y
1272
+CONFIG_WANT_SOFTWARE_I2C=y
1273
+CONFIG_WANT_SOFTWARE_SPI=y
1274
+CONFIG_NEED_SENSOR_BULK=y
1275
+CONFIG_CANBUS_FREQUENCY=1000000
1276
+CONFIG_INITIAL_PINS=""
1277
+CONFIG_HAVE_GPIO=y
1278
+CONFIG_HAVE_GPIO_ADC=y
1279
+CONFIG_HAVE_GPIO_SPI=y
1280
+CONFIG_HAVE_GPIO_SDIO=y
1281
+CONFIG_HAVE_GPIO_I2C=y
1282
+CONFIG_HAVE_GPIO_HARD_PWM=y
1283
+CONFIG_HAVE_STRICT_TIMING=y
1284
+CONFIG_HAVE_CHIPID=y
1285
+CONFIG_HAVE_STEPPER_BOTH_EDGE=y
1286
+CONFIG_HAVE_BOOTLOADER_REQUEST=y
1287
+CONFIG_INLINE_STEPPER_HACK=y
1288
+=======================
1289
+Build file /home/countcobolt/klipper/klippy/../out/klipper.dict(9334): Tue Dec 10 19:59:42 2024
1290
+Last MCU build version: v0.12.0-396-gb7233d119
1291
+Last MCU build tools: gcc: (15:12.2.rel1-1) 12.2.1 20221205 binutils: (2.40-2+18+b1) 2.40
1292
+Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c2a=PH4,PH5 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_i2c3a=PH7,PH8 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi2b=PI2,PI3,PI1 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 CLOCK_FREQ=168000000 MCU=stm32f407xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
1293
+Build file /home/countcobolt/klipper/klippy/../out/klipper.elf(1243184): Tue Dec 10 19:59:48 2024
1294
+Starting Klippy...
1295
+Args: ['/home/countcobolt/klipper/klippy/klippy.py', '/home/countcobolt/printer_data/config/printer.cfg', '-I', '/home/countcobolt/printer_data/comms/klippy.serial', '-l', '/home/countcobolt/printer_data/logs/klippy.log', '-a', '/home/countcobolt/printer_data/comms/klippy.sock']
1296
+Git version: 'v0.12.0-396-gb7233d119'
1297
+Branch: master
1298
+Remote: origin
1299
+Tracked URL: https://github.com/Klipper3d/klipper
1300
+CPU: 4 core ?
1301
+Python: '3.11.2 (main, Sep 14 2024, 03:00:30) [GCC 12.2.0]'
1302
+Start printer at Wed Dec 11 08:28:25 2024 (1733902105.1 18.7)
1303
+===== Config file =====
1304
+[virtual_sdcard]
1305
+path = /home/countcobolt/printer_data/gcodes
1306
+on_error_gcode = CANCEL_PRINT
1307
+
1308
+[pause_resume]
1309
+
1310
+[display_status]
1311
+
1312
+[respond]
1313
+
1314
+[gcode_macro CANCEL_PRINT]
1315
+description = Cancel the actual running print
1316
+rename_existing = CANCEL_PRINT_BASE
1317
+gcode = 
1318
+	
1319
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1320
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
1321
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
1322
+	
1323
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
1324
+	else "X=" ~ client.park_at_cancel_x %}
1325
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
1326
+	else "Y=" ~ client.park_at_cancel_y %}
1327
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
1328
+	
1329
+	
1330
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
1331
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
1332
+	{% endif %}
1333
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
1334
+	_CLIENT_RETRACT LENGTH={retract}
1335
+	TURN_OFF_HEATERS
1336
+	M106 S0
1337
+	{client.user_cancel_macro|default("")}
1338
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1339
+	
1340
+	SET_PAUSE_NEXT_LAYER ENABLE=0
1341
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
1342
+	CANCEL_PRINT_BASE
1343
+
1344
+[gcode_macro PAUSE]
1345
+description = Pause the actual running print
1346
+rename_existing = PAUSE_BASE
1347
+gcode = 
1348
+	
1349
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1350
+	{% set idle_timeout = client.idle_timeout|default(0) %}
1351
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
1352
+	{% set restore = False if printer.toolhead.extruder == ''
1353
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
1354
+	
1355
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
1356
+	
1357
+	{% if idle_timeout > 0 %}
1358
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
1359
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
1360
+	{% endif %}
1361
+	PAUSE_BASE
1362
+	{client.user_pause_macro|default("")}
1363
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
1364
+
1365
+[gcode_macro RESUME]
1366
+description = Resume the actual running print
1367
+rename_existing = RESUME_BASE
1368
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
1369
+variable_restore_idle_timeout = 0
1370
+variable_idle_state = False
1371
+gcode = 
1372
+	
1373
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1374
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
1375
+	{% set sp_move = client.speed_move|default(velocity) %}
1376
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
1377
+	else True if not printer[client.runout_sensor].enabled
1378
+	else printer[client.runout_sensor].filament_detected %}
1379
+	{% set can_extrude = True if printer.toolhead.extruder == ''
1380
+	else printer[printer.toolhead.extruder].can_extrude %}
1381
+	{% set do_resume = False %}
1382
+	{% set prompt_txt = [] %}
1383
+	
1384
+	
1385
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
1386
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1387
+	{% if last_extruder_temp.restore %}
1388
+	
1389
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
1390
+	M109 S{last_extruder_temp.temp}
1391
+	{% set do_resume = True %}
1392
+	{% elif can_extrude %}
1393
+	{% set do_resume = True %}
1394
+	{% else %}
1395
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1396
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1397
+	{% endif %}
1398
+	
1399
+	{% elif can_extrude %}
1400
+	{% set do_resume = True %}
1401
+	{% else %}
1402
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1403
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1404
+	{% endif %}
1405
+	{% if runout_resume %}
1406
+	{% if do_resume %}
1407
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
1408
+	{client.user_resume_macro|default("")}
1409
+	_CLIENT_EXTRUDE
1410
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
1411
+	{% endif %}
1412
+	{% else %}
1413
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
1414
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
1415
+	{% endif %}
1416
+	
1417
+	{% if not (runout_resume and do_resume) %}
1418
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
1419
+	{% for element in prompt_txt %}
1420
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
1421
+	{% endfor %}
1422
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
1423
+	RESPOND TYPE=command MSG="action:prompt_show"
1424
+	{% endif %}
1425
+
1426
+[gcode_macro SET_PAUSE_NEXT_LAYER]
1427
+description = Enable a pause if the next layer is reached
1428
+gcode = 
1429
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
1430
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
1431
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
1432
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
1433
+
1434
+[gcode_macro SET_PAUSE_AT_LAYER]
1435
+description = Enable/disable a pause if a given layer number is reached
1436
+gcode = 
1437
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
1438
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
1439
+	else params.LAYER is defined %}
1440
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
1441
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
1442
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
1443
+
1444
+[gcode_macro SET_PRINT_STATS_INFO]
1445
+rename_existing = SET_PRINT_STATS_INFO_BASE
1446
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
1447
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
1448
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
1449
+gcode = 
1450
+	{% if pause_next_layer.enable %}
1451
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
1452
+	{pause_next_layer.call}
1453
+	SET_PAUSE_NEXT_LAYER ENABLE=0
1454
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
1455
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
1456
+	{pause_at_layer.call}
1457
+	SET_PAUSE_AT_LAYER ENABLE=0
1458
+	{% endif %}
1459
+	SET_PRINT_STATS_INFO_BASE {rawparams}
1460
+
1461
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
1462
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
1463
+gcode = 
1464
+	
1465
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1466
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
1467
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
1468
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
1469
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
1470
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
1471
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
1472
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
1473
+	
1474
+	{% set origin    = printer.gcode_move.homing_origin %}
1475
+	{% set act       = printer.gcode_move.gcode_position %}
1476
+	{% set max       = printer.toolhead.axis_maximum %}
1477
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
1478
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
1479
+	else False %}
1480
+	
1481
+	{% set z_min = params.Z_MIN|default(0)|float %}
1482
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
1483
+	{% set x_park = params.X       if params.X is defined
1484
+	else custom_park_x  if use_custom
1485
+	else 0.0            if round_bed
1486
+	else (max.x - 5.0) %}
1487
+	{% set y_park = params.Y       if params.Y is defined
1488
+	else custom_park_y  if use_custom
1489
+	else (max.y - 5.0)  if round_bed and z_park < cone
1490
+	else 0.0            if round_bed
1491
+	else (max.y - 5.0) %}
1492
+	
1493
+	_CLIENT_RETRACT
1494
+	{% if "xyz" in printer.toolhead.homed_axes %}
1495
+	G90
1496
+	G1 Z{z_park} F{sp_hop}
1497
+	G1 X{x_park} Y{y_park} F{sp_move}
1498
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
1499
+	{% else %}
1500
+	RESPOND TYPE=echo MSG='Printer not homed'
1501
+	{% endif %}
1502
+
1503
+[gcode_macro _CLIENT_EXTRUDE]
1504
+description = Extrudes, if the extruder is hot enough
1505
+gcode = 
1506
+	
1507
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1508
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
1509
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
1510
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
1511
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
1512
+	
1513
+	{% if printer.toolhead.extruder != '' %}
1514
+	{% if printer[printer.toolhead.extruder].can_extrude %}
1515
+	{% if use_fw_retract %}
1516
+	{% if length < 0 %}
1517
+	G10
1518
+	{% else %}
1519
+	G11
1520
+	{% endif %}
1521
+	{% else %}
1522
+	M83
1523
+	G1 E{length} F{(speed|float|abs) * 60}
1524
+	{% if absolute_extrude %}
1525
+	M82
1526
+	{% endif %}
1527
+	{% endif %}
1528
+	{% else %}
1529
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
1530
+	{% endif %}
1531
+	{% endif %}
1532
+
1533
+[gcode_macro _CLIENT_RETRACT]
1534
+description = Retracts, if the extruder is hot enough
1535
+gcode = 
1536
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1537
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
1538
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
1539
+	
1540
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
1541
+
1542
+[gcode_macro _CLIENT_LINEAR_MOVE]
1543
+description = Linear move with save and restore of the gcode state
1544
+gcode = 
1545
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
1546
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
1547
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
1548
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
1549
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
1550
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
1551
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
1552
+	SAVE_GCODE_STATE NAME=_client_movement
1553
+	{% if x_move or y_move or z_move %}
1554
+	G9{ 0 if ABSOLUTE else 1 }
1555
+	{% endif %}
1556
+	{% if e_move %}
1557
+	M8{ 2 if ABSOLUTE_E else 3 }
1558
+	{% endif %}
1559
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
1560
+	RESTORE_GCODE_STATE NAME=_client_movement
1561
+
1562
+[mcu]
1563
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
1564
+
1565
+[stepper_x]
1566
+step_pin = PE3
1567
+dir_pin = !PE2
1568
+enable_pin = !PE4
1569
+microsteps = 16
1570
+rotation_distance = 40
1571
+endstop_pin = PA15
1572
+position_endstop = 0
1573
+position_max = 300
1574
+homing_speed = 50
1575
+
1576
+[stepper_y]
1577
+step_pin = PE0
1578
+dir_pin = !PB9
1579
+enable_pin = !PE1
1580
+microsteps = 16
1581
+rotation_distance = 40
1582
+endstop_pin = !PD2
1583
+position_endstop = 0
1584
+position_max = 300
1585
+homing_speed = 50
1586
+
1587
+[stepper_z]
1588
+step_pin = PB5
1589
+dir_pin = PB4
1590
+enable_pin = !PB8
1591
+microsteps = 16
1592
+rotation_distance = 8
1593
+endstop_pin = !PC8
1594
+position_endstop = 0.5
1595
+position_max = 200
1596
+
1597
+[stepper_z1]
1598
+step_pin = PD15
1599
+dir_pin = !PA1
1600
+enable_pin = !PA3
1601
+microsteps = 16
1602
+rotation_distance = 8
1603
+
1604
+[extruder]
1605
+step_pin = PD6
1606
+dir_pin = !PD3
1607
+enable_pin = !PB3
1608
+microsteps = 16
1609
+rotation_distance = 33.500
1610
+nozzle_diameter = 0.400
1611
+filament_diameter = 1.750
1612
+heater_pin = PE5
1613
+sensor_type = ATC Semitec 104GT-2
1614
+sensor_pin = PC1
1615
+control = pid
1616
+pid_kp = 14.669
1617
+pid_ki = 0.572
1618
+pid_kd = 94.068
1619
+min_temp = 0
1620
+max_temp = 250
1621
+
1622
+[heater_bed]
1623
+heater_pin = PA0
1624
+sensor_type = EPCOS 100K B57560G104F
1625
+sensor_pin = PC0
1626
+control = pid
1627
+pid_kp = 325.10
1628
+pid_ki = 63.35
1629
+pid_kd = 417.10
1630
+min_temp = 0
1631
+max_temp = 130
1632
+
1633
+[fan]
1634
+pin = PC14
1635
+
1636
+[printer]
1637
+kinematics = corexy
1638
+max_velocity = 300
1639
+max_accel = 3000
1640
+max_z_velocity = 25
1641
+max_z_accel = 30
1642
+
1643
+[board_pins]
1644
+aliases = 
1645
+	
1646
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
1647
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
1648
+	
1649
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
1650
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
1651
+=======================
1652
+Extruder max_extrude_ratio=0.266081
1653
+mcu 'mcu': Starting serial connect
1654
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1655
+webhooks client 547739626384: New connection
1656
+webhooks client 547739626384: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
1657
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1658
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1659
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1660
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1661
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1662
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1663
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1664
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1665
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1666
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1667
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1668
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1669
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1670
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1671
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1672
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1673
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1674
+MCU error during connect
1675
+Traceback (most recent call last):
1676
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 793, in _mcu_identify
1677
+    self._serial.connect_uart(self._serialport, self._baud, rts)
1678
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 183, in connect_uart
1679
+    self._error("Unable to connect")
1680
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 61, in _error
1681
+    raise error(self.warn_prefix + (msg % params))
1682
+serialhdl.error: mcu 'mcu': Unable to connect
1683
+
1684
+During handling of the above exception, another exception occurred:
1685
+
1686
+Traceback (most recent call last):
1687
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 131, in _connect
1688
+    self.send_event("klippy:mcu_identify")
1689
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
1690
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1691
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1692
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
1693
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1694
+            ^^^^^^^^^^^
1695
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 798, in _mcu_identify
1696
+    raise error(str(e))
1697
+mcu.error: mcu 'mcu': Unable to connect
1698
+mcu 'mcu': Unable to connect
1699
+Once the underlying issue is corrected, use the
1700
+"FIRMWARE_RESTART" command to reset the firmware, reload the
1701
+config, and restart the host software.
1702
+Error configuring printer
1703
+
1704
+Build file /home/countcobolt/klipper/klippy/../.config(3654): Tue Dec 10 19:59:19 2024
1705
+========= Last MCU build config =========
1706
+CONFIG_LOW_LEVEL_OPTIONS=y
1707
+# CONFIG_MACH_AVR is not set
1708
+# CONFIG_MACH_ATSAM is not set
1709
+# CONFIG_MACH_ATSAMD is not set
1710
+# CONFIG_MACH_LPC176X is not set
1711
+CONFIG_MACH_STM32=y
1712
+# CONFIG_MACH_HC32F460 is not set
1713
+# CONFIG_MACH_RPXXXX is not set
1714
+# CONFIG_MACH_PRU is not set
1715
+# CONFIG_MACH_AR100 is not set
1716
+# CONFIG_MACH_LINUX is not set
1717
+# CONFIG_MACH_SIMU is not set
1718
+CONFIG_BOARD_DIRECTORY="stm32"
1719
+CONFIG_MCU="stm32f407xx"
1720
+CONFIG_CLOCK_FREQ=168000000
1721
+CONFIG_USBSERIAL=y
1722
+CONFIG_FLASH_SIZE=0x80000
1723
+CONFIG_FLASH_BOOT_ADDRESS=0x8000000
1724
+CONFIG_RAM_START=0x20000000
1725
+CONFIG_RAM_SIZE=0x20000
1726
+CONFIG_STACK_SIZE=512
1727
+CONFIG_FLASH_APPLICATION_ADDRESS=0x800C000
1728
+CONFIG_STM32_SELECT=y
1729
+# CONFIG_MACH_STM32F103 is not set
1730
+# CONFIG_MACH_STM32F207 is not set
1731
+# CONFIG_MACH_STM32F401 is not set
1732
+# CONFIG_MACH_STM32F405 is not set
1733
+CONFIG_MACH_STM32F407=y
1734
+# CONFIG_MACH_STM32F429 is not set
1735
+# CONFIG_MACH_STM32F446 is not set
1736
+# CONFIG_MACH_STM32F765 is not set
1737
+# CONFIG_MACH_STM32F031 is not set
1738
+# CONFIG_MACH_STM32F042 is not set
1739
+# CONFIG_MACH_STM32F070 is not set
1740
+# CONFIG_MACH_STM32F072 is not set
1741
+# CONFIG_MACH_STM32G070 is not set
1742
+# CONFIG_MACH_STM32G071 is not set
1743
+# CONFIG_MACH_STM32G0B0 is not set
1744
+# CONFIG_MACH_STM32G0B1 is not set
1745
+# CONFIG_MACH_STM32G431 is not set
1746
+# CONFIG_MACH_STM32G474 is not set
1747
+# CONFIG_MACH_STM32H723 is not set
1748
+# CONFIG_MACH_STM32H743 is not set
1749
+# CONFIG_MACH_STM32H750 is not set
1750
+# CONFIG_MACH_STM32L412 is not set
1751
+# CONFIG_MACH_N32G452 is not set
1752
+# CONFIG_MACH_N32G455 is not set
1753
+CONFIG_MACH_STM32F4=y
1754
+CONFIG_MACH_STM32F4x5=y
1755
+CONFIG_HAVE_STM32_USBOTG=y
1756
+CONFIG_HAVE_STM32_CANBUS=y
1757
+CONFIG_HAVE_STM32_USBCANBUS=y
1758
+CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000
1759
+# CONFIG_STM32_FLASH_START_8000 is not set
1760
+# CONFIG_STM32_FLASH_START_20200 is not set
1761
+CONFIG_STM32_FLASH_START_C000=y
1762
+# CONFIG_STM32_FLASH_START_10000 is not set
1763
+# CONFIG_STM32_FLASH_START_4000 is not set
1764
+# CONFIG_STM32_FLASH_START_0000 is not set
1765
+CONFIG_STM32_CLOCK_REF_8M=y
1766
+# CONFIG_STM32_CLOCK_REF_12M is not set
1767
+# CONFIG_STM32_CLOCK_REF_16M is not set
1768
+# CONFIG_STM32_CLOCK_REF_20M is not set
1769
+# CONFIG_STM32_CLOCK_REF_24M is not set
1770
+# CONFIG_STM32_CLOCK_REF_25M is not set
1771
+# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
1772
+CONFIG_CLOCK_REF_FREQ=8000000
1773
+CONFIG_STM32F0_TRIM=16
1774
+CONFIG_STM32_USB_PA11_PA12=y
1775
+# CONFIG_STM32_SERIAL_USART1 is not set
1776
+# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
1777
+# CONFIG_STM32_SERIAL_USART2 is not set
1778
+# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
1779
+# CONFIG_STM32_SERIAL_USART3 is not set
1780
+# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
1781
+# CONFIG_STM32_CANBUS_PA11_PA12 is not set
1782
+# CONFIG_STM32_CANBUS_PA11_PB9 is not set
1783
+# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
1784
+# CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set
1785
+# CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set
1786
+# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
1787
+# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
1788
+# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
1789
+CONFIG_USB=y
1790
+CONFIG_USB_VENDOR_ID=0x1d50
1791
+CONFIG_USB_DEVICE_ID=0x614e
1792
+CONFIG_USB_SERIAL_NUMBER_CHIPID=y
1793
+CONFIG_USB_SERIAL_NUMBER="12345"
1794
+
1795
+#
1796
+# USB ids
1797
+#
1798
+# end of USB ids
1799
+
1800
+CONFIG_WANT_GPIO_BITBANGING=y
1801
+CONFIG_WANT_DISPLAYS=y
1802
+CONFIG_WANT_SENSORS=y
1803
+CONFIG_WANT_LIS2DW=y
1804
+CONFIG_WANT_LDC1612=y
1805
+CONFIG_WANT_HX71X=y
1806
+CONFIG_WANT_ADS1220=y
1807
+CONFIG_WANT_SOFTWARE_I2C=y
1808
+CONFIG_WANT_SOFTWARE_SPI=y
1809
+CONFIG_NEED_SENSOR_BULK=y
1810
+CONFIG_CANBUS_FREQUENCY=1000000
1811
+CONFIG_INITIAL_PINS=""
1812
+CONFIG_HAVE_GPIO=y
1813
+CONFIG_HAVE_GPIO_ADC=y
1814
+CONFIG_HAVE_GPIO_SPI=y
1815
+CONFIG_HAVE_GPIO_SDIO=y
1816
+CONFIG_HAVE_GPIO_I2C=y
1817
+CONFIG_HAVE_GPIO_HARD_PWM=y
1818
+CONFIG_HAVE_STRICT_TIMING=y
1819
+CONFIG_HAVE_CHIPID=y
1820
+CONFIG_HAVE_STEPPER_BOTH_EDGE=y
1821
+CONFIG_HAVE_BOOTLOADER_REQUEST=y
1822
+CONFIG_INLINE_STEPPER_HACK=y
1823
+=======================
1824
+Build file /home/countcobolt/klipper/klippy/../out/klipper.dict(9334): Tue Dec 10 19:59:42 2024
1825
+Last MCU build version: v0.12.0-396-gb7233d119
1826
+Last MCU build tools: gcc: (15:12.2.rel1-1) 12.2.1 20221205 binutils: (2.40-2+18+b1) 2.40
1827
+Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c2a=PH4,PH5 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_i2c3a=PH7,PH8 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi2b=PI2,PI3,PI1 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 CLOCK_FREQ=168000000 MCU=stm32f407xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
1828
+Build file /home/countcobolt/klipper/klippy/../out/klipper.elf(1243184): Tue Dec 10 19:59:48 2024
1829
+Attempting MCU 'mcu' reset
1830
+Unhandled exception during post run
1831
+Traceback (most recent call last):
1832
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
1833
+    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
1834
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1835
+FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1836
+
1837
+During handling of the above exception, another exception occurred:
1838
+
1839
+Traceback (most recent call last):
1840
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
1841
+    self.send_event("klippy:firmware_restart")
1842
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
1843
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1844
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1845
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
1846
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
1847
+            ^^^^^^^^^^^
1848
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
1849
+    self._restart_arduino()
1850
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
1851
+    serialhdl.arduino_reset(self._serialport, self._reactor)
1852
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
1853
+    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
1854
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1855
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
1856
+    self.open()
1857
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
1858
+    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
1859
+serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
1860
+Restarting printer
1861
+Start printer at Wed Dec 11 08:43:45 2024 (1733903025.1 594.1)
1862
+===== Config file =====
1863
+[virtual_sdcard]
1864
+path = /home/countcobolt/printer_data/gcodes
1865
+on_error_gcode = CANCEL_PRINT
1866
+
1867
+[pause_resume]
1868
+
1869
+[display_status]
1870
+
1871
+[respond]
1872
+
1873
+[gcode_macro CANCEL_PRINT]
1874
+description = Cancel the actual running print
1875
+rename_existing = CANCEL_PRINT_BASE
1876
+gcode = 
1877
+	
1878
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1879
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
1880
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
1881
+	
1882
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
1883
+	else "X=" ~ client.park_at_cancel_x %}
1884
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
1885
+	else "Y=" ~ client.park_at_cancel_y %}
1886
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
1887
+	
1888
+	
1889
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
1890
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
1891
+	{% endif %}
1892
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
1893
+	_CLIENT_RETRACT LENGTH={retract}
1894
+	TURN_OFF_HEATERS
1895
+	M106 S0
1896
+	{client.user_cancel_macro|default("")}
1897
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1898
+	
1899
+	SET_PAUSE_NEXT_LAYER ENABLE=0
1900
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
1901
+	CANCEL_PRINT_BASE
1902
+
1903
+[gcode_macro PAUSE]
1904
+description = Pause the actual running print
1905
+rename_existing = PAUSE_BASE
1906
+gcode = 
1907
+	
1908
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1909
+	{% set idle_timeout = client.idle_timeout|default(0) %}
1910
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
1911
+	{% set restore = False if printer.toolhead.extruder == ''
1912
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
1913
+	
1914
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
1915
+	
1916
+	{% if idle_timeout > 0 %}
1917
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
1918
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
1919
+	{% endif %}
1920
+	PAUSE_BASE
1921
+	{client.user_pause_macro|default("")}
1922
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
1923
+
1924
+[gcode_macro RESUME]
1925
+description = Resume the actual running print
1926
+rename_existing = RESUME_BASE
1927
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
1928
+variable_restore_idle_timeout = 0
1929
+variable_idle_state = False
1930
+gcode = 
1931
+	
1932
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
1933
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
1934
+	{% set sp_move = client.speed_move|default(velocity) %}
1935
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
1936
+	else True if not printer[client.runout_sensor].enabled
1937
+	else printer[client.runout_sensor].filament_detected %}
1938
+	{% set can_extrude = True if printer.toolhead.extruder == ''
1939
+	else printer[printer.toolhead.extruder].can_extrude %}
1940
+	{% set do_resume = False %}
1941
+	{% set prompt_txt = [] %}
1942
+	
1943
+	
1944
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
1945
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
1946
+	{% if last_extruder_temp.restore %}
1947
+	
1948
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
1949
+	M109 S{last_extruder_temp.temp}
1950
+	{% set do_resume = True %}
1951
+	{% elif can_extrude %}
1952
+	{% set do_resume = True %}
1953
+	{% else %}
1954
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1955
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1956
+	{% endif %}
1957
+	
1958
+	{% elif can_extrude %}
1959
+	{% set do_resume = True %}
1960
+	{% else %}
1961
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
1962
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
1963
+	{% endif %}
1964
+	{% if runout_resume %}
1965
+	{% if do_resume %}
1966
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
1967
+	{client.user_resume_macro|default("")}
1968
+	_CLIENT_EXTRUDE
1969
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
1970
+	{% endif %}
1971
+	{% else %}
1972
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
1973
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
1974
+	{% endif %}
1975
+	
1976
+	{% if not (runout_resume and do_resume) %}
1977
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
1978
+	{% for element in prompt_txt %}
1979
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
1980
+	{% endfor %}
1981
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
1982
+	RESPOND TYPE=command MSG="action:prompt_show"
1983
+	{% endif %}
1984
+
1985
+[gcode_macro SET_PAUSE_NEXT_LAYER]
1986
+description = Enable a pause if the next layer is reached
1987
+gcode = 
1988
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
1989
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
1990
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
1991
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
1992
+
1993
+[gcode_macro SET_PAUSE_AT_LAYER]
1994
+description = Enable/disable a pause if a given layer number is reached
1995
+gcode = 
1996
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
1997
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
1998
+	else params.LAYER is defined %}
1999
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
2000
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
2001
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
2002
+
2003
+[gcode_macro SET_PRINT_STATS_INFO]
2004
+rename_existing = SET_PRINT_STATS_INFO_BASE
2005
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
2006
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
2007
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
2008
+gcode = 
2009
+	{% if pause_next_layer.enable %}
2010
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
2011
+	{pause_next_layer.call}
2012
+	SET_PAUSE_NEXT_LAYER ENABLE=0
2013
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
2014
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
2015
+	{pause_at_layer.call}
2016
+	SET_PAUSE_AT_LAYER ENABLE=0
2017
+	{% endif %}
2018
+	SET_PRINT_STATS_INFO_BASE {rawparams}
2019
+
2020
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
2021
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
2022
+gcode = 
2023
+	
2024
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2025
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2026
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
2027
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
2028
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
2029
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
2030
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
2031
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
2032
+	
2033
+	{% set origin    = printer.gcode_move.homing_origin %}
2034
+	{% set act       = printer.gcode_move.gcode_position %}
2035
+	{% set max       = printer.toolhead.axis_maximum %}
2036
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
2037
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
2038
+	else False %}
2039
+	
2040
+	{% set z_min = params.Z_MIN|default(0)|float %}
2041
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
2042
+	{% set x_park = params.X       if params.X is defined
2043
+	else custom_park_x  if use_custom
2044
+	else 0.0            if round_bed
2045
+	else (max.x - 5.0) %}
2046
+	{% set y_park = params.Y       if params.Y is defined
2047
+	else custom_park_y  if use_custom
2048
+	else (max.y - 5.0)  if round_bed and z_park < cone
2049
+	else 0.0            if round_bed
2050
+	else (max.y - 5.0) %}
2051
+	
2052
+	_CLIENT_RETRACT
2053
+	{% if "xyz" in printer.toolhead.homed_axes %}
2054
+	G90
2055
+	G1 Z{z_park} F{sp_hop}
2056
+	G1 X{x_park} Y{y_park} F{sp_move}
2057
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
2058
+	{% else %}
2059
+	RESPOND TYPE=echo MSG='Printer not homed'
2060
+	{% endif %}
2061
+
2062
+[gcode_macro _CLIENT_EXTRUDE]
2063
+description = Extrudes, if the extruder is hot enough
2064
+gcode = 
2065
+	
2066
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2067
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
2068
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
2069
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
2070
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
2071
+	
2072
+	{% if printer.toolhead.extruder != '' %}
2073
+	{% if printer[printer.toolhead.extruder].can_extrude %}
2074
+	{% if use_fw_retract %}
2075
+	{% if length < 0 %}
2076
+	G10
2077
+	{% else %}
2078
+	G11
2079
+	{% endif %}
2080
+	{% else %}
2081
+	M83
2082
+	G1 E{length} F{(speed|float|abs) * 60}
2083
+	{% if absolute_extrude %}
2084
+	M82
2085
+	{% endif %}
2086
+	{% endif %}
2087
+	{% else %}
2088
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
2089
+	{% endif %}
2090
+	{% endif %}
2091
+
2092
+[gcode_macro _CLIENT_RETRACT]
2093
+description = Retracts, if the extruder is hot enough
2094
+gcode = 
2095
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2096
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
2097
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
2098
+	
2099
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
2100
+
2101
+[gcode_macro _CLIENT_LINEAR_MOVE]
2102
+description = Linear move with save and restore of the gcode state
2103
+gcode = 
2104
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
2105
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
2106
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
2107
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
2108
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
2109
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
2110
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
2111
+	SAVE_GCODE_STATE NAME=_client_movement
2112
+	{% if x_move or y_move or z_move %}
2113
+	G9{ 0 if ABSOLUTE else 1 }
2114
+	{% endif %}
2115
+	{% if e_move %}
2116
+	M8{ 2 if ABSOLUTE_E else 3 }
2117
+	{% endif %}
2118
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
2119
+	RESTORE_GCODE_STATE NAME=_client_movement
2120
+
2121
+[mcu]
2122
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
2123
+
2124
+[stepper_x]
2125
+step_pin = PE3
2126
+dir_pin = !PE2
2127
+enable_pin = !PE4
2128
+microsteps = 16
2129
+rotation_distance = 40
2130
+endstop_pin = PA15
2131
+position_endstop = 0
2132
+position_max = 300
2133
+homing_speed = 50
2134
+
2135
+[stepper_y]
2136
+step_pin = PE0
2137
+dir_pin = !PB9
2138
+enable_pin = !PE1
2139
+microsteps = 16
2140
+rotation_distance = 40
2141
+endstop_pin = !PD2
2142
+position_endstop = 0
2143
+position_max = 300
2144
+homing_speed = 50
2145
+
2146
+[stepper_z]
2147
+step_pin = PB5
2148
+dir_pin = PB4
2149
+enable_pin = !PB8
2150
+microsteps = 16
2151
+rotation_distance = 8
2152
+endstop_pin = !PC8
2153
+position_endstop = 0.5
2154
+position_max = 200
2155
+
2156
+[stepper_z1]
2157
+step_pin = PD15
2158
+dir_pin = !PA1
2159
+enable_pin = !PA3
2160
+microsteps = 16
2161
+rotation_distance = 8
2162
+
2163
+[extruder]
2164
+step_pin = PD6
2165
+dir_pin = !PD3
2166
+enable_pin = !PB3
2167
+microsteps = 16
2168
+rotation_distance = 33.500
2169
+nozzle_diameter = 0.400
2170
+filament_diameter = 1.750
2171
+heater_pin = PE5
2172
+sensor_type = ATC Semitec 104GT-2
2173
+sensor_pin = PC1
2174
+control = pid
2175
+pid_kp = 14.669
2176
+pid_ki = 0.572
2177
+pid_kd = 94.068
2178
+min_temp = 0
2179
+max_temp = 250
2180
+
2181
+[heater_bed]
2182
+heater_pin = PA0
2183
+sensor_type = EPCOS 100K B57560G104F
2184
+sensor_pin = PC0
2185
+control = pid
2186
+pid_kp = 325.10
2187
+pid_ki = 63.35
2188
+pid_kd = 417.10
2189
+min_temp = 0
2190
+max_temp = 130
2191
+
2192
+[fan]
2193
+pin = PC14
2194
+
2195
+[printer]
2196
+kinematics = corexy
2197
+max_velocity = 300
2198
+max_accel = 3000
2199
+max_z_velocity = 25
2200
+max_z_accel = 30
2201
+
2202
+[board_pins]
2203
+aliases = 
2204
+	
2205
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
2206
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
2207
+	
2208
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
2209
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
2210
+=======================
2211
+Extruder max_extrude_ratio=0.266081
2212
+mcu 'mcu': Starting serial connect
2213
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2214
+webhooks client 547723684112: New connection
2215
+webhooks client 547723684112: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
2216
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2217
+webhooks client 547723684112: Disconnected
2218
+Restarting printer
2219
+Start printer at Wed Dec 11 08:43:53 2024 (1733903033.5 602.5)
2220
+===== Config file =====
2221
+[virtual_sdcard]
2222
+path = /home/countcobolt/printer_data/gcodes
2223
+on_error_gcode = CANCEL_PRINT
2224
+
2225
+[pause_resume]
2226
+
2227
+[display_status]
2228
+
2229
+[respond]
2230
+
2231
+[gcode_macro CANCEL_PRINT]
2232
+description = Cancel the actual running print
2233
+rename_existing = CANCEL_PRINT_BASE
2234
+gcode = 
2235
+	
2236
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2237
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
2238
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
2239
+	
2240
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
2241
+	else "X=" ~ client.park_at_cancel_x %}
2242
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
2243
+	else "Y=" ~ client.park_at_cancel_y %}
2244
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
2245
+	
2246
+	
2247
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
2248
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
2249
+	{% endif %}
2250
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
2251
+	_CLIENT_RETRACT LENGTH={retract}
2252
+	TURN_OFF_HEATERS
2253
+	M106 S0
2254
+	{client.user_cancel_macro|default("")}
2255
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2256
+	
2257
+	SET_PAUSE_NEXT_LAYER ENABLE=0
2258
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
2259
+	CANCEL_PRINT_BASE
2260
+
2261
+[gcode_macro PAUSE]
2262
+description = Pause the actual running print
2263
+rename_existing = PAUSE_BASE
2264
+gcode = 
2265
+	
2266
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2267
+	{% set idle_timeout = client.idle_timeout|default(0) %}
2268
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
2269
+	{% set restore = False if printer.toolhead.extruder == ''
2270
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
2271
+	
2272
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
2273
+	
2274
+	{% if idle_timeout > 0 %}
2275
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
2276
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
2277
+	{% endif %}
2278
+	PAUSE_BASE
2279
+	{client.user_pause_macro|default("")}
2280
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
2281
+
2282
+[gcode_macro RESUME]
2283
+description = Resume the actual running print
2284
+rename_existing = RESUME_BASE
2285
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
2286
+variable_restore_idle_timeout = 0
2287
+variable_idle_state = False
2288
+gcode = 
2289
+	
2290
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2291
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2292
+	{% set sp_move = client.speed_move|default(velocity) %}
2293
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
2294
+	else True if not printer[client.runout_sensor].enabled
2295
+	else printer[client.runout_sensor].filament_detected %}
2296
+	{% set can_extrude = True if printer.toolhead.extruder == ''
2297
+	else printer[printer.toolhead.extruder].can_extrude %}
2298
+	{% set do_resume = False %}
2299
+	{% set prompt_txt = [] %}
2300
+	
2301
+	
2302
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
2303
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2304
+	{% if last_extruder_temp.restore %}
2305
+	
2306
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
2307
+	M109 S{last_extruder_temp.temp}
2308
+	{% set do_resume = True %}
2309
+	{% elif can_extrude %}
2310
+	{% set do_resume = True %}
2311
+	{% else %}
2312
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2313
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2314
+	{% endif %}
2315
+	
2316
+	{% elif can_extrude %}
2317
+	{% set do_resume = True %}
2318
+	{% else %}
2319
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2320
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2321
+	{% endif %}
2322
+	{% if runout_resume %}
2323
+	{% if do_resume %}
2324
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
2325
+	{client.user_resume_macro|default("")}
2326
+	_CLIENT_EXTRUDE
2327
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
2328
+	{% endif %}
2329
+	{% else %}
2330
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
2331
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
2332
+	{% endif %}
2333
+	
2334
+	{% if not (runout_resume and do_resume) %}
2335
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
2336
+	{% for element in prompt_txt %}
2337
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
2338
+	{% endfor %}
2339
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
2340
+	RESPOND TYPE=command MSG="action:prompt_show"
2341
+	{% endif %}
2342
+
2343
+[gcode_macro SET_PAUSE_NEXT_LAYER]
2344
+description = Enable a pause if the next layer is reached
2345
+gcode = 
2346
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
2347
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
2348
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
2349
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
2350
+
2351
+[gcode_macro SET_PAUSE_AT_LAYER]
2352
+description = Enable/disable a pause if a given layer number is reached
2353
+gcode = 
2354
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
2355
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
2356
+	else params.LAYER is defined %}
2357
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
2358
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
2359
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
2360
+
2361
+[gcode_macro SET_PRINT_STATS_INFO]
2362
+rename_existing = SET_PRINT_STATS_INFO_BASE
2363
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
2364
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
2365
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
2366
+gcode = 
2367
+	{% if pause_next_layer.enable %}
2368
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
2369
+	{pause_next_layer.call}
2370
+	SET_PAUSE_NEXT_LAYER ENABLE=0
2371
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
2372
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
2373
+	{pause_at_layer.call}
2374
+	SET_PAUSE_AT_LAYER ENABLE=0
2375
+	{% endif %}
2376
+	SET_PRINT_STATS_INFO_BASE {rawparams}
2377
+
2378
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
2379
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
2380
+gcode = 
2381
+	
2382
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2383
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2384
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
2385
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
2386
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
2387
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
2388
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
2389
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
2390
+	
2391
+	{% set origin    = printer.gcode_move.homing_origin %}
2392
+	{% set act       = printer.gcode_move.gcode_position %}
2393
+	{% set max       = printer.toolhead.axis_maximum %}
2394
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
2395
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
2396
+	else False %}
2397
+	
2398
+	{% set z_min = params.Z_MIN|default(0)|float %}
2399
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
2400
+	{% set x_park = params.X       if params.X is defined
2401
+	else custom_park_x  if use_custom
2402
+	else 0.0            if round_bed
2403
+	else (max.x - 5.0) %}
2404
+	{% set y_park = params.Y       if params.Y is defined
2405
+	else custom_park_y  if use_custom
2406
+	else (max.y - 5.0)  if round_bed and z_park < cone
2407
+	else 0.0            if round_bed
2408
+	else (max.y - 5.0) %}
2409
+	
2410
+	_CLIENT_RETRACT
2411
+	{% if "xyz" in printer.toolhead.homed_axes %}
2412
+	G90
2413
+	G1 Z{z_park} F{sp_hop}
2414
+	G1 X{x_park} Y{y_park} F{sp_move}
2415
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
2416
+	{% else %}
2417
+	RESPOND TYPE=echo MSG='Printer not homed'
2418
+	{% endif %}
2419
+
2420
+[gcode_macro _CLIENT_EXTRUDE]
2421
+description = Extrudes, if the extruder is hot enough
2422
+gcode = 
2423
+	
2424
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2425
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
2426
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
2427
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
2428
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
2429
+	
2430
+	{% if printer.toolhead.extruder != '' %}
2431
+	{% if printer[printer.toolhead.extruder].can_extrude %}
2432
+	{% if use_fw_retract %}
2433
+	{% if length < 0 %}
2434
+	G10
2435
+	{% else %}
2436
+	G11
2437
+	{% endif %}
2438
+	{% else %}
2439
+	M83
2440
+	G1 E{length} F{(speed|float|abs) * 60}
2441
+	{% if absolute_extrude %}
2442
+	M82
2443
+	{% endif %}
2444
+	{% endif %}
2445
+	{% else %}
2446
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
2447
+	{% endif %}
2448
+	{% endif %}
2449
+
2450
+[gcode_macro _CLIENT_RETRACT]
2451
+description = Retracts, if the extruder is hot enough
2452
+gcode = 
2453
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2454
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
2455
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
2456
+	
2457
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
2458
+
2459
+[gcode_macro _CLIENT_LINEAR_MOVE]
2460
+description = Linear move with save and restore of the gcode state
2461
+gcode = 
2462
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
2463
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
2464
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
2465
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
2466
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
2467
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
2468
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
2469
+	SAVE_GCODE_STATE NAME=_client_movement
2470
+	{% if x_move or y_move or z_move %}
2471
+	G9{ 0 if ABSOLUTE else 1 }
2472
+	{% endif %}
2473
+	{% if e_move %}
2474
+	M8{ 2 if ABSOLUTE_E else 3 }
2475
+	{% endif %}
2476
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
2477
+	RESTORE_GCODE_STATE NAME=_client_movement
2478
+
2479
+[mcu]
2480
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
2481
+
2482
+[stepper_x]
2483
+step_pin = PE3
2484
+dir_pin = !PE2
2485
+enable_pin = !PE4
2486
+microsteps = 16
2487
+rotation_distance = 40
2488
+endstop_pin = PA15
2489
+position_endstop = 0
2490
+position_max = 300
2491
+homing_speed = 50
2492
+
2493
+[stepper_y]
2494
+step_pin = PE0
2495
+dir_pin = !PB9
2496
+enable_pin = !PE1
2497
+microsteps = 16
2498
+rotation_distance = 40
2499
+endstop_pin = !PD2
2500
+position_endstop = 0
2501
+position_max = 300
2502
+homing_speed = 50
2503
+
2504
+[stepper_z]
2505
+step_pin = PB5
2506
+dir_pin = PB4
2507
+enable_pin = !PB8
2508
+microsteps = 16
2509
+rotation_distance = 8
2510
+endstop_pin = !PC8
2511
+position_endstop = 0.5
2512
+position_max = 200
2513
+
2514
+[stepper_z1]
2515
+step_pin = PD15
2516
+dir_pin = !PA1
2517
+enable_pin = !PA3
2518
+microsteps = 16
2519
+rotation_distance = 8
2520
+
2521
+[extruder]
2522
+step_pin = PD6
2523
+dir_pin = !PD3
2524
+enable_pin = !PB3
2525
+microsteps = 16
2526
+rotation_distance = 33.500
2527
+nozzle_diameter = 0.400
2528
+filament_diameter = 1.750
2529
+heater_pin = PE5
2530
+sensor_type = ATC Semitec 104GT-2
2531
+sensor_pin = PC1
2532
+control = pid
2533
+pid_kp = 14.669
2534
+pid_ki = 0.572
2535
+pid_kd = 94.068
2536
+min_temp = 0
2537
+max_temp = 250
2538
+
2539
+[heater_bed]
2540
+heater_pin = PA0
2541
+sensor_type = EPCOS 100K B57560G104F
2542
+sensor_pin = PC0
2543
+control = pid
2544
+pid_kp = 325.10
2545
+pid_ki = 63.35
2546
+pid_kd = 417.10
2547
+min_temp = 0
2548
+max_temp = 130
2549
+
2550
+[fan]
2551
+pin = PC14
2552
+
2553
+[printer]
2554
+kinematics = corexy
2555
+max_velocity = 300
2556
+max_accel = 3000
2557
+max_z_velocity = 25
2558
+max_z_accel = 30
2559
+
2560
+[board_pins]
2561
+aliases = 
2562
+	
2563
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
2564
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
2565
+	
2566
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
2567
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
2568
+=======================
2569
+Extruder max_extrude_ratio=0.266081
2570
+mcu 'mcu': Starting serial connect
2571
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2572
+webhooks client 547723426512: New connection
2573
+webhooks client 547723426512: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
2574
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2575
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2576
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2577
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2578
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2579
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2580
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2581
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2582
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2583
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2584
+Attempting MCU 'mcu' reset
2585
+Unhandled exception during post run
2586
+Traceback (most recent call last):
2587
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
2588
+    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
2589
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2590
+FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2591
+
2592
+During handling of the above exception, another exception occurred:
2593
+
2594
+Traceback (most recent call last):
2595
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
2596
+    self.send_event("klippy:firmware_restart")
2597
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
2598
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
2599
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2600
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
2601
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
2602
+            ^^^^^^^^^^^
2603
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
2604
+    self._restart_arduino()
2605
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
2606
+    serialhdl.arduino_reset(self._serialport, self._reactor)
2607
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
2608
+    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
2609
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2610
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
2611
+    self.open()
2612
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
2613
+    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
2614
+serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2615
+Restarting printer
2616
+Start printer at Wed Dec 11 08:44:47 2024 (1733903087.9 656.9)
2617
+===== Config file =====
2618
+[virtual_sdcard]
2619
+path = /home/countcobolt/printer_data/gcodes
2620
+on_error_gcode = CANCEL_PRINT
2621
+
2622
+[pause_resume]
2623
+
2624
+[display_status]
2625
+
2626
+[respond]
2627
+
2628
+[gcode_macro CANCEL_PRINT]
2629
+description = Cancel the actual running print
2630
+rename_existing = CANCEL_PRINT_BASE
2631
+gcode = 
2632
+	
2633
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2634
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
2635
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
2636
+	
2637
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
2638
+	else "X=" ~ client.park_at_cancel_x %}
2639
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
2640
+	else "Y=" ~ client.park_at_cancel_y %}
2641
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
2642
+	
2643
+	
2644
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
2645
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
2646
+	{% endif %}
2647
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
2648
+	_CLIENT_RETRACT LENGTH={retract}
2649
+	TURN_OFF_HEATERS
2650
+	M106 S0
2651
+	{client.user_cancel_macro|default("")}
2652
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2653
+	
2654
+	SET_PAUSE_NEXT_LAYER ENABLE=0
2655
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
2656
+	CANCEL_PRINT_BASE
2657
+
2658
+[gcode_macro PAUSE]
2659
+description = Pause the actual running print
2660
+rename_existing = PAUSE_BASE
2661
+gcode = 
2662
+	
2663
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2664
+	{% set idle_timeout = client.idle_timeout|default(0) %}
2665
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
2666
+	{% set restore = False if printer.toolhead.extruder == ''
2667
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
2668
+	
2669
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
2670
+	
2671
+	{% if idle_timeout > 0 %}
2672
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
2673
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
2674
+	{% endif %}
2675
+	PAUSE_BASE
2676
+	{client.user_pause_macro|default("")}
2677
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
2678
+
2679
+[gcode_macro RESUME]
2680
+description = Resume the actual running print
2681
+rename_existing = RESUME_BASE
2682
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
2683
+variable_restore_idle_timeout = 0
2684
+variable_idle_state = False
2685
+gcode = 
2686
+	
2687
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2688
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2689
+	{% set sp_move = client.speed_move|default(velocity) %}
2690
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
2691
+	else True if not printer[client.runout_sensor].enabled
2692
+	else printer[client.runout_sensor].filament_detected %}
2693
+	{% set can_extrude = True if printer.toolhead.extruder == ''
2694
+	else printer[printer.toolhead.extruder].can_extrude %}
2695
+	{% set do_resume = False %}
2696
+	{% set prompt_txt = [] %}
2697
+	
2698
+	
2699
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
2700
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
2701
+	{% if last_extruder_temp.restore %}
2702
+	
2703
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
2704
+	M109 S{last_extruder_temp.temp}
2705
+	{% set do_resume = True %}
2706
+	{% elif can_extrude %}
2707
+	{% set do_resume = True %}
2708
+	{% else %}
2709
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2710
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2711
+	{% endif %}
2712
+	
2713
+	{% elif can_extrude %}
2714
+	{% set do_resume = True %}
2715
+	{% else %}
2716
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
2717
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
2718
+	{% endif %}
2719
+	{% if runout_resume %}
2720
+	{% if do_resume %}
2721
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
2722
+	{client.user_resume_macro|default("")}
2723
+	_CLIENT_EXTRUDE
2724
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
2725
+	{% endif %}
2726
+	{% else %}
2727
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
2728
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
2729
+	{% endif %}
2730
+	
2731
+	{% if not (runout_resume and do_resume) %}
2732
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
2733
+	{% for element in prompt_txt %}
2734
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
2735
+	{% endfor %}
2736
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
2737
+	RESPOND TYPE=command MSG="action:prompt_show"
2738
+	{% endif %}
2739
+
2740
+[gcode_macro SET_PAUSE_NEXT_LAYER]
2741
+description = Enable a pause if the next layer is reached
2742
+gcode = 
2743
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
2744
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
2745
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
2746
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
2747
+
2748
+[gcode_macro SET_PAUSE_AT_LAYER]
2749
+description = Enable/disable a pause if a given layer number is reached
2750
+gcode = 
2751
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
2752
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
2753
+	else params.LAYER is defined %}
2754
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
2755
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
2756
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
2757
+
2758
+[gcode_macro SET_PRINT_STATS_INFO]
2759
+rename_existing = SET_PRINT_STATS_INFO_BASE
2760
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
2761
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
2762
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
2763
+gcode = 
2764
+	{% if pause_next_layer.enable %}
2765
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
2766
+	{pause_next_layer.call}
2767
+	SET_PAUSE_NEXT_LAYER ENABLE=0
2768
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
2769
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
2770
+	{pause_at_layer.call}
2771
+	SET_PAUSE_AT_LAYER ENABLE=0
2772
+	{% endif %}
2773
+	SET_PRINT_STATS_INFO_BASE {rawparams}
2774
+
2775
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
2776
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
2777
+gcode = 
2778
+	
2779
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2780
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
2781
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
2782
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
2783
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
2784
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
2785
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
2786
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
2787
+	
2788
+	{% set origin    = printer.gcode_move.homing_origin %}
2789
+	{% set act       = printer.gcode_move.gcode_position %}
2790
+	{% set max       = printer.toolhead.axis_maximum %}
2791
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
2792
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
2793
+	else False %}
2794
+	
2795
+	{% set z_min = params.Z_MIN|default(0)|float %}
2796
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
2797
+	{% set x_park = params.X       if params.X is defined
2798
+	else custom_park_x  if use_custom
2799
+	else 0.0            if round_bed
2800
+	else (max.x - 5.0) %}
2801
+	{% set y_park = params.Y       if params.Y is defined
2802
+	else custom_park_y  if use_custom
2803
+	else (max.y - 5.0)  if round_bed and z_park < cone
2804
+	else 0.0            if round_bed
2805
+	else (max.y - 5.0) %}
2806
+	
2807
+	_CLIENT_RETRACT
2808
+	{% if "xyz" in printer.toolhead.homed_axes %}
2809
+	G90
2810
+	G1 Z{z_park} F{sp_hop}
2811
+	G1 X{x_park} Y{y_park} F{sp_move}
2812
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
2813
+	{% else %}
2814
+	RESPOND TYPE=echo MSG='Printer not homed'
2815
+	{% endif %}
2816
+
2817
+[gcode_macro _CLIENT_EXTRUDE]
2818
+description = Extrudes, if the extruder is hot enough
2819
+gcode = 
2820
+	
2821
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2822
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
2823
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
2824
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
2825
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
2826
+	
2827
+	{% if printer.toolhead.extruder != '' %}
2828
+	{% if printer[printer.toolhead.extruder].can_extrude %}
2829
+	{% if use_fw_retract %}
2830
+	{% if length < 0 %}
2831
+	G10
2832
+	{% else %}
2833
+	G11
2834
+	{% endif %}
2835
+	{% else %}
2836
+	M83
2837
+	G1 E{length} F{(speed|float|abs) * 60}
2838
+	{% if absolute_extrude %}
2839
+	M82
2840
+	{% endif %}
2841
+	{% endif %}
2842
+	{% else %}
2843
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
2844
+	{% endif %}
2845
+	{% endif %}
2846
+
2847
+[gcode_macro _CLIENT_RETRACT]
2848
+description = Retracts, if the extruder is hot enough
2849
+gcode = 
2850
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
2851
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
2852
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
2853
+	
2854
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
2855
+
2856
+[gcode_macro _CLIENT_LINEAR_MOVE]
2857
+description = Linear move with save and restore of the gcode state
2858
+gcode = 
2859
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
2860
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
2861
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
2862
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
2863
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
2864
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
2865
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
2866
+	SAVE_GCODE_STATE NAME=_client_movement
2867
+	{% if x_move or y_move or z_move %}
2868
+	G9{ 0 if ABSOLUTE else 1 }
2869
+	{% endif %}
2870
+	{% if e_move %}
2871
+	M8{ 2 if ABSOLUTE_E else 3 }
2872
+	{% endif %}
2873
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
2874
+	RESTORE_GCODE_STATE NAME=_client_movement
2875
+
2876
+[mcu]
2877
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
2878
+
2879
+[stepper_x]
2880
+step_pin = PE3
2881
+dir_pin = !PE2
2882
+enable_pin = !PE4
2883
+microsteps = 16
2884
+rotation_distance = 40
2885
+endstop_pin = PA15
2886
+position_endstop = 0
2887
+position_max = 300
2888
+homing_speed = 50
2889
+
2890
+[stepper_y]
2891
+step_pin = PE0
2892
+dir_pin = !PB9
2893
+enable_pin = !PE1
2894
+microsteps = 16
2895
+rotation_distance = 40
2896
+endstop_pin = !PD2
2897
+position_endstop = 0
2898
+position_max = 300
2899
+homing_speed = 50
2900
+
2901
+[stepper_z]
2902
+step_pin = PB5
2903
+dir_pin = PB4
2904
+enable_pin = !PB8
2905
+microsteps = 16
2906
+rotation_distance = 8
2907
+endstop_pin = !PC8
2908
+position_endstop = 0.5
2909
+position_max = 200
2910
+
2911
+[stepper_z1]
2912
+step_pin = PD15
2913
+dir_pin = !PA1
2914
+enable_pin = !PA3
2915
+microsteps = 16
2916
+rotation_distance = 8
2917
+
2918
+[extruder]
2919
+step_pin = PD6
2920
+dir_pin = !PD3
2921
+enable_pin = !PB3
2922
+microsteps = 16
2923
+rotation_distance = 33.500
2924
+nozzle_diameter = 0.400
2925
+filament_diameter = 1.750
2926
+heater_pin = PE5
2927
+sensor_type = ATC Semitec 104GT-2
2928
+sensor_pin = PC1
2929
+control = pid
2930
+pid_kp = 14.669
2931
+pid_ki = 0.572
2932
+pid_kd = 94.068
2933
+min_temp = 0
2934
+max_temp = 250
2935
+
2936
+[heater_bed]
2937
+heater_pin = PA0
2938
+sensor_type = EPCOS 100K B57560G104F
2939
+sensor_pin = PC0
2940
+control = pid
2941
+pid_kp = 325.10
2942
+pid_ki = 63.35
2943
+pid_kd = 417.10
2944
+min_temp = 0
2945
+max_temp = 130
2946
+
2947
+[fan]
2948
+pin = PC14
2949
+
2950
+[printer]
2951
+kinematics = corexy
2952
+max_velocity = 300
2953
+max_accel = 3000
2954
+max_z_velocity = 25
2955
+max_z_accel = 30
2956
+
2957
+[board_pins]
2958
+aliases = 
2959
+	
2960
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
2961
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
2962
+	
2963
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
2964
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
2965
+=======================
2966
+Extruder max_extrude_ratio=0.266081
2967
+mcu 'mcu': Starting serial connect
2968
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2969
+webhooks client 547723688528: New connection
2970
+webhooks client 547723688528: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
2971
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2972
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2973
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2974
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2975
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2976
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2977
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2978
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2979
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2980
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2981
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2982
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2983
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2984
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2985
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2986
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2987
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
2988
+MCU error during connect
2989
+Traceback (most recent call last):
2990
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 793, in _mcu_identify
2991
+    self._serial.connect_uart(self._serialport, self._baud, rts)
2992
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 183, in connect_uart
2993
+    self._error("Unable to connect")
2994
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 61, in _error
2995
+    raise error(self.warn_prefix + (msg % params))
2996
+serialhdl.error: mcu 'mcu': Unable to connect
2997
+
2998
+During handling of the above exception, another exception occurred:
2999
+
3000
+Traceback (most recent call last):
3001
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 131, in _connect
3002
+    self.send_event("klippy:mcu_identify")
3003
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
3004
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3005
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3006
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
3007
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3008
+            ^^^^^^^^^^^
3009
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 798, in _mcu_identify
3010
+    raise error(str(e))
3011
+mcu.error: mcu 'mcu': Unable to connect
3012
+mcu 'mcu': Unable to connect
3013
+Once the underlying issue is corrected, use the
3014
+"FIRMWARE_RESTART" command to reset the firmware, reload the
3015
+config, and restart the host software.
3016
+Error configuring printer
3017
+
3018
+Build file /home/countcobolt/klipper/klippy/../.config(3654): Tue Dec 10 19:59:19 2024
3019
+========= Last MCU build config =========
3020
+CONFIG_LOW_LEVEL_OPTIONS=y
3021
+# CONFIG_MACH_AVR is not set
3022
+# CONFIG_MACH_ATSAM is not set
3023
+# CONFIG_MACH_ATSAMD is not set
3024
+# CONFIG_MACH_LPC176X is not set
3025
+CONFIG_MACH_STM32=y
3026
+# CONFIG_MACH_HC32F460 is not set
3027
+# CONFIG_MACH_RPXXXX is not set
3028
+# CONFIG_MACH_PRU is not set
3029
+# CONFIG_MACH_AR100 is not set
3030
+# CONFIG_MACH_LINUX is not set
3031
+# CONFIG_MACH_SIMU is not set
3032
+CONFIG_BOARD_DIRECTORY="stm32"
3033
+CONFIG_MCU="stm32f407xx"
3034
+CONFIG_CLOCK_FREQ=168000000
3035
+CONFIG_USBSERIAL=y
3036
+CONFIG_FLASH_SIZE=0x80000
3037
+CONFIG_FLASH_BOOT_ADDRESS=0x8000000
3038
+CONFIG_RAM_START=0x20000000
3039
+CONFIG_RAM_SIZE=0x20000
3040
+CONFIG_STACK_SIZE=512
3041
+CONFIG_FLASH_APPLICATION_ADDRESS=0x800C000
3042
+CONFIG_STM32_SELECT=y
3043
+# CONFIG_MACH_STM32F103 is not set
3044
+# CONFIG_MACH_STM32F207 is not set
3045
+# CONFIG_MACH_STM32F401 is not set
3046
+# CONFIG_MACH_STM32F405 is not set
3047
+CONFIG_MACH_STM32F407=y
3048
+# CONFIG_MACH_STM32F429 is not set
3049
+# CONFIG_MACH_STM32F446 is not set
3050
+# CONFIG_MACH_STM32F765 is not set
3051
+# CONFIG_MACH_STM32F031 is not set
3052
+# CONFIG_MACH_STM32F042 is not set
3053
+# CONFIG_MACH_STM32F070 is not set
3054
+# CONFIG_MACH_STM32F072 is not set
3055
+# CONFIG_MACH_STM32G070 is not set
3056
+# CONFIG_MACH_STM32G071 is not set
3057
+# CONFIG_MACH_STM32G0B0 is not set
3058
+# CONFIG_MACH_STM32G0B1 is not set
3059
+# CONFIG_MACH_STM32G431 is not set
3060
+# CONFIG_MACH_STM32G474 is not set
3061
+# CONFIG_MACH_STM32H723 is not set
3062
+# CONFIG_MACH_STM32H743 is not set
3063
+# CONFIG_MACH_STM32H750 is not set
3064
+# CONFIG_MACH_STM32L412 is not set
3065
+# CONFIG_MACH_N32G452 is not set
3066
+# CONFIG_MACH_N32G455 is not set
3067
+CONFIG_MACH_STM32F4=y
3068
+CONFIG_MACH_STM32F4x5=y
3069
+CONFIG_HAVE_STM32_USBOTG=y
3070
+CONFIG_HAVE_STM32_CANBUS=y
3071
+CONFIG_HAVE_STM32_USBCANBUS=y
3072
+CONFIG_STM32_DFU_ROM_ADDRESS=0x1fff0000
3073
+# CONFIG_STM32_FLASH_START_8000 is not set
3074
+# CONFIG_STM32_FLASH_START_20200 is not set
3075
+CONFIG_STM32_FLASH_START_C000=y
3076
+# CONFIG_STM32_FLASH_START_10000 is not set
3077
+# CONFIG_STM32_FLASH_START_4000 is not set
3078
+# CONFIG_STM32_FLASH_START_0000 is not set
3079
+CONFIG_STM32_CLOCK_REF_8M=y
3080
+# CONFIG_STM32_CLOCK_REF_12M is not set
3081
+# CONFIG_STM32_CLOCK_REF_16M is not set
3082
+# CONFIG_STM32_CLOCK_REF_20M is not set
3083
+# CONFIG_STM32_CLOCK_REF_24M is not set
3084
+# CONFIG_STM32_CLOCK_REF_25M is not set
3085
+# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
3086
+CONFIG_CLOCK_REF_FREQ=8000000
3087
+CONFIG_STM32F0_TRIM=16
3088
+CONFIG_STM32_USB_PA11_PA12=y
3089
+# CONFIG_STM32_SERIAL_USART1 is not set
3090
+# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
3091
+# CONFIG_STM32_SERIAL_USART2 is not set
3092
+# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
3093
+# CONFIG_STM32_SERIAL_USART3 is not set
3094
+# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
3095
+# CONFIG_STM32_CANBUS_PA11_PA12 is not set
3096
+# CONFIG_STM32_CANBUS_PA11_PB9 is not set
3097
+# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
3098
+# CONFIG_STM32_MMENU_CANBUS_PI9_PH13 is not set
3099
+# CONFIG_STM32_MMENU_CANBUS_PB5_PB6 is not set
3100
+# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
3101
+# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
3102
+# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
3103
+CONFIG_USB=y
3104
+CONFIG_USB_VENDOR_ID=0x1d50
3105
+CONFIG_USB_DEVICE_ID=0x614e
3106
+CONFIG_USB_SERIAL_NUMBER_CHIPID=y
3107
+CONFIG_USB_SERIAL_NUMBER="12345"
3108
+
3109
+#
3110
+# USB ids
3111
+#
3112
+# end of USB ids
3113
+
3114
+CONFIG_WANT_GPIO_BITBANGING=y
3115
+CONFIG_WANT_DISPLAYS=y
3116
+CONFIG_WANT_SENSORS=y
3117
+CONFIG_WANT_LIS2DW=y
3118
+CONFIG_WANT_LDC1612=y
3119
+CONFIG_WANT_HX71X=y
3120
+CONFIG_WANT_ADS1220=y
3121
+CONFIG_WANT_SOFTWARE_I2C=y
3122
+CONFIG_WANT_SOFTWARE_SPI=y
3123
+CONFIG_NEED_SENSOR_BULK=y
3124
+CONFIG_CANBUS_FREQUENCY=1000000
3125
+CONFIG_INITIAL_PINS=""
3126
+CONFIG_HAVE_GPIO=y
3127
+CONFIG_HAVE_GPIO_ADC=y
3128
+CONFIG_HAVE_GPIO_SPI=y
3129
+CONFIG_HAVE_GPIO_SDIO=y
3130
+CONFIG_HAVE_GPIO_I2C=y
3131
+CONFIG_HAVE_GPIO_HARD_PWM=y
3132
+CONFIG_HAVE_STRICT_TIMING=y
3133
+CONFIG_HAVE_CHIPID=y
3134
+CONFIG_HAVE_STEPPER_BOTH_EDGE=y
3135
+CONFIG_HAVE_BOOTLOADER_REQUEST=y
3136
+CONFIG_INLINE_STEPPER_HACK=y
3137
+=======================
3138
+Build file /home/countcobolt/klipper/klippy/../out/klipper.dict(9334): Tue Dec 10 19:59:42 2024
3139
+Last MCU build version: v0.12.0-396-gb7233d119
3140
+Last MCU build tools: gcc: (15:12.2.rel1-1) 12.2.1 20221205 binutils: (2.40-2+18+b1) 2.40
3141
+Last MCU build config: ADC_MAX=4095 BUS_PINS_i2c1=PB6,PB7 BUS_PINS_i2c1a=PB8,PB9 BUS_PINS_i2c2=PB10,PB11 BUS_PINS_i2c2a=PH4,PH5 BUS_PINS_i2c3=PA8,PC9 BUS_PINS_i2c3a=PH7,PH8 BUS_PINS_sdio=PC12,PD2,PC8,PC9,PC10,PC11 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_spi1a=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi2a=PC2,PC3,PB10 BUS_PINS_spi2b=PI2,PI3,PI1 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi3a=PC11,PC12,PC10 CLOCK_FREQ=168000000 MCU=stm32f407xx PWM_MAX=255 RESERVE_PINS_USB=PA11,PA12 RESERVE_PINS_crystal=PH0,PH1 STATS_SUMSQ_BASE=256 STEPPER_BOTH_EDGE=1
3142
+Build file /home/countcobolt/klipper/klippy/../out/klipper.elf(1243184): Tue Dec 10 19:59:48 2024
3143
+Attempting MCU 'mcu' reset
3144
+Unhandled exception during post run
3145
+Traceback (most recent call last):
3146
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 265, in open
3147
+    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
3148
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3149
+FileNotFoundError: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3150
+
3151
+During handling of the above exception, another exception occurred:
3152
+
3153
+Traceback (most recent call last):
3154
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 193, in run
3155
+    self.send_event("klippy:firmware_restart")
3156
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in send_event
3157
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3158
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3159
+  File "/home/countcobolt/klipper/klippy/klippy.py", line 223, in <listcomp>
3160
+    return [cb(*params) for cb in self.event_handlers.get(event, [])]
3161
+            ^^^^^^^^^^^
3162
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 956, in _firmware_restart
3163
+    self._restart_arduino()
3164
+  File "/home/countcobolt/klipper/klippy/mcu.py", line 916, in _restart_arduino
3165
+    serialhdl.arduino_reset(self._serialport, self._reactor)
3166
+  File "/home/countcobolt/klipper/klippy/serialhdl.py", line 380, in arduino_reset
3167
+    ser = serial.Serial(serialport, 2400, timeout=0, exclusive=True)
3168
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3169
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialutil.py", line 240, in __init__
3170
+    self.open()
3171
+  File "/home/countcobolt/klippy-env/lib/python3.11/site-packages/serial/serialposix.py", line 268, in open
3172
+    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
3173
+serial.serialutil.SerialException: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3174
+Restarting printer
3175
+Start printer at Wed Dec 11 08:58:27 2024 (1733903907.2 1476.2)
3176
+===== Config file =====
3177
+[virtual_sdcard]
3178
+path = /home/countcobolt/printer_data/gcodes
3179
+on_error_gcode = CANCEL_PRINT
3180
+
3181
+[pause_resume]
3182
+
3183
+[display_status]
3184
+
3185
+[respond]
3186
+
3187
+[gcode_macro CANCEL_PRINT]
3188
+description = Cancel the actual running print
3189
+rename_existing = CANCEL_PRINT_BASE
3190
+gcode = 
3191
+	
3192
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3193
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
3194
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
3195
+	
3196
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
3197
+	else "X=" ~ client.park_at_cancel_x %}
3198
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
3199
+	else "Y=" ~ client.park_at_cancel_y %}
3200
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
3201
+	
3202
+	
3203
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
3204
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
3205
+	{% endif %}
3206
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
3207
+	_CLIENT_RETRACT LENGTH={retract}
3208
+	TURN_OFF_HEATERS
3209
+	M106 S0
3210
+	{client.user_cancel_macro|default("")}
3211
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3212
+	
3213
+	SET_PAUSE_NEXT_LAYER ENABLE=0
3214
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
3215
+	CANCEL_PRINT_BASE
3216
+
3217
+[gcode_macro PAUSE]
3218
+description = Pause the actual running print
3219
+rename_existing = PAUSE_BASE
3220
+gcode = 
3221
+	
3222
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3223
+	{% set idle_timeout = client.idle_timeout|default(0) %}
3224
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
3225
+	{% set restore = False if printer.toolhead.extruder == ''
3226
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
3227
+	
3228
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
3229
+	
3230
+	{% if idle_timeout > 0 %}
3231
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
3232
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
3233
+	{% endif %}
3234
+	PAUSE_BASE
3235
+	{client.user_pause_macro|default("")}
3236
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
3237
+
3238
+[gcode_macro RESUME]
3239
+description = Resume the actual running print
3240
+rename_existing = RESUME_BASE
3241
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
3242
+variable_restore_idle_timeout = 0
3243
+variable_idle_state = False
3244
+gcode = 
3245
+	
3246
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3247
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3248
+	{% set sp_move = client.speed_move|default(velocity) %}
3249
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
3250
+	else True if not printer[client.runout_sensor].enabled
3251
+	else printer[client.runout_sensor].filament_detected %}
3252
+	{% set can_extrude = True if printer.toolhead.extruder == ''
3253
+	else printer[printer.toolhead.extruder].can_extrude %}
3254
+	{% set do_resume = False %}
3255
+	{% set prompt_txt = [] %}
3256
+	
3257
+	
3258
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
3259
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3260
+	{% if last_extruder_temp.restore %}
3261
+	
3262
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
3263
+	M109 S{last_extruder_temp.temp}
3264
+	{% set do_resume = True %}
3265
+	{% elif can_extrude %}
3266
+	{% set do_resume = True %}
3267
+	{% else %}
3268
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3269
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3270
+	{% endif %}
3271
+	
3272
+	{% elif can_extrude %}
3273
+	{% set do_resume = True %}
3274
+	{% else %}
3275
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3276
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3277
+	{% endif %}
3278
+	{% if runout_resume %}
3279
+	{% if do_resume %}
3280
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
3281
+	{client.user_resume_macro|default("")}
3282
+	_CLIENT_EXTRUDE
3283
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
3284
+	{% endif %}
3285
+	{% else %}
3286
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
3287
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
3288
+	{% endif %}
3289
+	
3290
+	{% if not (runout_resume and do_resume) %}
3291
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
3292
+	{% for element in prompt_txt %}
3293
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
3294
+	{% endfor %}
3295
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
3296
+	RESPOND TYPE=command MSG="action:prompt_show"
3297
+	{% endif %}
3298
+
3299
+[gcode_macro SET_PAUSE_NEXT_LAYER]
3300
+description = Enable a pause if the next layer is reached
3301
+gcode = 
3302
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
3303
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
3304
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
3305
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
3306
+
3307
+[gcode_macro SET_PAUSE_AT_LAYER]
3308
+description = Enable/disable a pause if a given layer number is reached
3309
+gcode = 
3310
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
3311
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
3312
+	else params.LAYER is defined %}
3313
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
3314
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
3315
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
3316
+
3317
+[gcode_macro SET_PRINT_STATS_INFO]
3318
+rename_existing = SET_PRINT_STATS_INFO_BASE
3319
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
3320
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
3321
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
3322
+gcode = 
3323
+	{% if pause_next_layer.enable %}
3324
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
3325
+	{pause_next_layer.call}
3326
+	SET_PAUSE_NEXT_LAYER ENABLE=0
3327
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
3328
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
3329
+	{pause_at_layer.call}
3330
+	SET_PAUSE_AT_LAYER ENABLE=0
3331
+	{% endif %}
3332
+	SET_PRINT_STATS_INFO_BASE {rawparams}
3333
+
3334
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
3335
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
3336
+gcode = 
3337
+	
3338
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3339
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3340
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
3341
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
3342
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
3343
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
3344
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
3345
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
3346
+	
3347
+	{% set origin    = printer.gcode_move.homing_origin %}
3348
+	{% set act       = printer.gcode_move.gcode_position %}
3349
+	{% set max       = printer.toolhead.axis_maximum %}
3350
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
3351
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
3352
+	else False %}
3353
+	
3354
+	{% set z_min = params.Z_MIN|default(0)|float %}
3355
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
3356
+	{% set x_park = params.X       if params.X is defined
3357
+	else custom_park_x  if use_custom
3358
+	else 0.0            if round_bed
3359
+	else (max.x - 5.0) %}
3360
+	{% set y_park = params.Y       if params.Y is defined
3361
+	else custom_park_y  if use_custom
3362
+	else (max.y - 5.0)  if round_bed and z_park < cone
3363
+	else 0.0            if round_bed
3364
+	else (max.y - 5.0) %}
3365
+	
3366
+	_CLIENT_RETRACT
3367
+	{% if "xyz" in printer.toolhead.homed_axes %}
3368
+	G90
3369
+	G1 Z{z_park} F{sp_hop}
3370
+	G1 X{x_park} Y{y_park} F{sp_move}
3371
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
3372
+	{% else %}
3373
+	RESPOND TYPE=echo MSG='Printer not homed'
3374
+	{% endif %}
3375
+
3376
+[gcode_macro _CLIENT_EXTRUDE]
3377
+description = Extrudes, if the extruder is hot enough
3378
+gcode = 
3379
+	
3380
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3381
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
3382
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
3383
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
3384
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
3385
+	
3386
+	{% if printer.toolhead.extruder != '' %}
3387
+	{% if printer[printer.toolhead.extruder].can_extrude %}
3388
+	{% if use_fw_retract %}
3389
+	{% if length < 0 %}
3390
+	G10
3391
+	{% else %}
3392
+	G11
3393
+	{% endif %}
3394
+	{% else %}
3395
+	M83
3396
+	G1 E{length} F{(speed|float|abs) * 60}
3397
+	{% if absolute_extrude %}
3398
+	M82
3399
+	{% endif %}
3400
+	{% endif %}
3401
+	{% else %}
3402
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
3403
+	{% endif %}
3404
+	{% endif %}
3405
+
3406
+[gcode_macro _CLIENT_RETRACT]
3407
+description = Retracts, if the extruder is hot enough
3408
+gcode = 
3409
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3410
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
3411
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
3412
+	
3413
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
3414
+
3415
+[gcode_macro _CLIENT_LINEAR_MOVE]
3416
+description = Linear move with save and restore of the gcode state
3417
+gcode = 
3418
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
3419
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
3420
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
3421
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
3422
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
3423
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
3424
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
3425
+	SAVE_GCODE_STATE NAME=_client_movement
3426
+	{% if x_move or y_move or z_move %}
3427
+	G9{ 0 if ABSOLUTE else 1 }
3428
+	{% endif %}
3429
+	{% if e_move %}
3430
+	M8{ 2 if ABSOLUTE_E else 3 }
3431
+	{% endif %}
3432
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
3433
+	RESTORE_GCODE_STATE NAME=_client_movement
3434
+
3435
+[mcu]
3436
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
3437
+
3438
+[stepper_x]
3439
+step_pin = PE3
3440
+dir_pin = !PE2
3441
+enable_pin = !PE4
3442
+microsteps = 16
3443
+rotation_distance = 40
3444
+endstop_pin = PA15
3445
+position_endstop = 0
3446
+position_max = 300
3447
+homing_speed = 50
3448
+
3449
+[stepper_y]
3450
+step_pin = PE0
3451
+dir_pin = !PB9
3452
+enable_pin = !PE1
3453
+microsteps = 16
3454
+rotation_distance = 40
3455
+endstop_pin = !PD2
3456
+position_endstop = 0
3457
+position_max = 300
3458
+homing_speed = 50
3459
+
3460
+[stepper_z]
3461
+step_pin = PB5
3462
+dir_pin = PB4
3463
+enable_pin = !PB8
3464
+microsteps = 16
3465
+rotation_distance = 8
3466
+endstop_pin = !PC8
3467
+position_endstop = 0.5
3468
+position_max = 200
3469
+
3470
+[stepper_z1]
3471
+step_pin = PD15
3472
+dir_pin = !PA1
3473
+enable_pin = !PA3
3474
+microsteps = 16
3475
+rotation_distance = 8
3476
+
3477
+[extruder]
3478
+step_pin = PD6
3479
+dir_pin = !PD3
3480
+enable_pin = !PB3
3481
+microsteps = 16
3482
+rotation_distance = 33.500
3483
+nozzle_diameter = 0.400
3484
+filament_diameter = 1.750
3485
+heater_pin = PE5
3486
+sensor_type = ATC Semitec 104GT-2
3487
+sensor_pin = PC1
3488
+control = pid
3489
+pid_kp = 14.669
3490
+pid_ki = 0.572
3491
+pid_kd = 94.068
3492
+min_temp = 0
3493
+max_temp = 250
3494
+
3495
+[heater_bed]
3496
+heater_pin = PA0
3497
+sensor_type = EPCOS 100K B57560G104F
3498
+sensor_pin = PC0
3499
+control = pid
3500
+pid_kp = 325.10
3501
+pid_ki = 63.35
3502
+pid_kd = 417.10
3503
+min_temp = 0
3504
+max_temp = 130
3505
+
3506
+[fan]
3507
+pin = PC14
3508
+
3509
+[printer]
3510
+kinematics = corexy
3511
+max_velocity = 300
3512
+max_accel = 3000
3513
+max_z_velocity = 25
3514
+max_z_accel = 30
3515
+
3516
+[board_pins]
3517
+aliases = 
3518
+	
3519
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
3520
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
3521
+	
3522
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
3523
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
3524
+=======================
3525
+Extruder max_extrude_ratio=0.266081
3526
+mcu 'mcu': Starting serial connect
3527
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3528
+webhooks client 547715463248: New connection
3529
+webhooks client 547715463248: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
3530
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3531
+webhooks client 547715463248: Disconnected
3532
+Restarting printer
3533
+Start printer at Wed Dec 11 08:58:37 2024 (1733903917.2 1486.2)
3534
+===== Config file =====
3535
+[virtual_sdcard]
3536
+path = /home/countcobolt/printer_data/gcodes
3537
+on_error_gcode = CANCEL_PRINT
3538
+
3539
+[pause_resume]
3540
+
3541
+[display_status]
3542
+
3543
+[respond]
3544
+
3545
+[gcode_macro CANCEL_PRINT]
3546
+description = Cancel the actual running print
3547
+rename_existing = CANCEL_PRINT_BASE
3548
+gcode = 
3549
+	
3550
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3551
+	{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
3552
+	{% set retract = client.cancel_retract|default(5.0)|abs %}
3553
+	
3554
+	{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
3555
+	else "X=" ~ client.park_at_cancel_x %}
3556
+	{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
3557
+	else "Y=" ~ client.park_at_cancel_y %}
3558
+	{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
3559
+	
3560
+	
3561
+	{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
3562
+	SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
3563
+	{% endif %}
3564
+	{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
3565
+	_CLIENT_RETRACT LENGTH={retract}
3566
+	TURN_OFF_HEATERS
3567
+	M106 S0
3568
+	{client.user_cancel_macro|default("")}
3569
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3570
+	
3571
+	SET_PAUSE_NEXT_LAYER ENABLE=0
3572
+	SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
3573
+	CANCEL_PRINT_BASE
3574
+
3575
+[gcode_macro PAUSE]
3576
+description = Pause the actual running print
3577
+rename_existing = PAUSE_BASE
3578
+gcode = 
3579
+	
3580
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3581
+	{% set idle_timeout = client.idle_timeout|default(0) %}
3582
+	{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
3583
+	{% set restore = False if printer.toolhead.extruder == ''
3584
+	else True  if params.RESTORE|default(1)|int == 1 else False %}
3585
+	
3586
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
3587
+	
3588
+	{% if idle_timeout > 0 %}
3589
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
3590
+	SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
3591
+	{% endif %}
3592
+	PAUSE_BASE
3593
+	{client.user_pause_macro|default("")}
3594
+	_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
3595
+
3596
+[gcode_macro RESUME]
3597
+description = Resume the actual running print
3598
+rename_existing = RESUME_BASE
3599
+variable_last_extruder_temp = {'restore': False, 'temp': 0}
3600
+variable_restore_idle_timeout = 0
3601
+variable_idle_state = False
3602
+gcode = 
3603
+	
3604
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3605
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3606
+	{% set sp_move = client.speed_move|default(velocity) %}
3607
+	{% set runout_resume = True if client.runout_sensor|default("") == ""
3608
+	else True if not printer[client.runout_sensor].enabled
3609
+	else printer[client.runout_sensor].filament_detected %}
3610
+	{% set can_extrude = True if printer.toolhead.extruder == ''
3611
+	else printer[printer.toolhead.extruder].can_extrude %}
3612
+	{% set do_resume = False %}
3613
+	{% set prompt_txt = [] %}
3614
+	
3615
+	
3616
+	{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
3617
+	SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
3618
+	{% if last_extruder_temp.restore %}
3619
+	
3620
+	RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
3621
+	M109 S{last_extruder_temp.temp}
3622
+	{% set do_resume = True %}
3623
+	{% elif can_extrude %}
3624
+	{% set do_resume = True %}
3625
+	{% else %}
3626
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3627
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3628
+	{% endif %}
3629
+	
3630
+	{% elif can_extrude %}
3631
+	{% set do_resume = True %}
3632
+	{% else %}
3633
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
3634
+	{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
3635
+	{% endif %}
3636
+	{% if runout_resume %}
3637
+	{% if do_resume %}
3638
+	{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
3639
+	{client.user_resume_macro|default("")}
3640
+	_CLIENT_EXTRUDE
3641
+	RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
3642
+	{% endif %}
3643
+	{% else %}
3644
+	RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
3645
+	{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
3646
+	{% endif %}
3647
+	
3648
+	{% if not (runout_resume and do_resume) %}
3649
+	RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
3650
+	{% for element in prompt_txt %}
3651
+	RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
3652
+	{% endfor %}
3653
+	RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
3654
+	RESPOND TYPE=command MSG="action:prompt_show"
3655
+	{% endif %}
3656
+
3657
+[gcode_macro SET_PAUSE_NEXT_LAYER]
3658
+description = Enable a pause if the next layer is reached
3659
+gcode = 
3660
+	{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
3661
+	{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
3662
+	{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
3663
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
3664
+
3665
+[gcode_macro SET_PAUSE_AT_LAYER]
3666
+description = Enable/disable a pause if a given layer number is reached
3667
+gcode = 
3668
+	{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
3669
+	{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
3670
+	else params.LAYER is defined %}
3671
+	{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
3672
+	{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
3673
+	SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
3674
+
3675
+[gcode_macro SET_PRINT_STATS_INFO]
3676
+rename_existing = SET_PRINT_STATS_INFO_BASE
3677
+description = Overwrite, to get pause_next_layer and pause_at_layer feature
3678
+variable_pause_next_layer = { 'enable': False, 'call': "PAUSE" }
3679
+variable_pause_at_layer = { 'enable': False, 'layer': 0, 'call': "PAUSE" }
3680
+gcode = 
3681
+	{% if pause_next_layer.enable %}
3682
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
3683
+	{pause_next_layer.call}
3684
+	SET_PAUSE_NEXT_LAYER ENABLE=0
3685
+	{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
3686
+	RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
3687
+	{pause_at_layer.call}
3688
+	SET_PAUSE_AT_LAYER ENABLE=0
3689
+	{% endif %}
3690
+	SET_PRINT_STATS_INFO_BASE {rawparams}
3691
+
3692
+[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
3693
+description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
3694
+gcode = 
3695
+	
3696
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3697
+	{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
3698
+	{% set use_custom     = client.use_custom_pos|default(false)|lower == 'true' %}
3699
+	{% set custom_park_x  = client.custom_park_x|default(0.0) %}
3700
+	{% set custom_park_y  = client.custom_park_y|default(0.0) %}
3701
+	{% set park_dz        = client.custom_park_dz|default(2.0)|abs %}
3702
+	{% set sp_hop         = client.speed_hop|default(15) * 60 %}
3703
+	{% set sp_move        = client.speed_move|default(velocity) * 60 %}
3704
+	
3705
+	{% set origin    = printer.gcode_move.homing_origin %}
3706
+	{% set act       = printer.gcode_move.gcode_position %}
3707
+	{% set max       = printer.toolhead.axis_maximum %}
3708
+	{% set cone      = printer.toolhead.cone_start_z|default(max.z) %}
3709
+	{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
3710
+	else False %}
3711
+	
3712
+	{% set z_min = params.Z_MIN|default(0)|float %}
3713
+	{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
3714
+	{% set x_park = params.X       if params.X is defined
3715
+	else custom_park_x  if use_custom
3716
+	else 0.0            if round_bed
3717
+	else (max.x - 5.0) %}
3718
+	{% set y_park = params.Y       if params.Y is defined
3719
+	else custom_park_y  if use_custom
3720
+	else (max.y - 5.0)  if round_bed and z_park < cone
3721
+	else 0.0            if round_bed
3722
+	else (max.y - 5.0) %}
3723
+	
3724
+	_CLIENT_RETRACT
3725
+	{% if "xyz" in printer.toolhead.homed_axes %}
3726
+	G90
3727
+	G1 Z{z_park} F{sp_hop}
3728
+	G1 X{x_park} Y{y_park} F{sp_move}
3729
+	{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
3730
+	{% else %}
3731
+	RESPOND TYPE=echo MSG='Printer not homed'
3732
+	{% endif %}
3733
+
3734
+[gcode_macro _CLIENT_EXTRUDE]
3735
+description = Extrudes, if the extruder is hot enough
3736
+gcode = 
3737
+	
3738
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3739
+	{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
3740
+	{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
3741
+	{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
3742
+	{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
3743
+	
3744
+	{% if printer.toolhead.extruder != '' %}
3745
+	{% if printer[printer.toolhead.extruder].can_extrude %}
3746
+	{% if use_fw_retract %}
3747
+	{% if length < 0 %}
3748
+	G10
3749
+	{% else %}
3750
+	G11
3751
+	{% endif %}
3752
+	{% else %}
3753
+	M83
3754
+	G1 E{length} F{(speed|float|abs) * 60}
3755
+	{% if absolute_extrude %}
3756
+	M82
3757
+	{% endif %}
3758
+	{% endif %}
3759
+	{% else %}
3760
+	RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
3761
+	{% endif %}
3762
+	{% endif %}
3763
+
3764
+[gcode_macro _CLIENT_RETRACT]
3765
+description = Retracts, if the extruder is hot enough
3766
+gcode = 
3767
+	{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
3768
+	{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
3769
+	{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
3770
+	
3771
+	_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
3772
+
3773
+[gcode_macro _CLIENT_LINEAR_MOVE]
3774
+description = Linear move with save and restore of the gcode state
3775
+gcode = 
3776
+	{% set x_move = "X" ~ params.X if params.X is defined else "" %}
3777
+	{% set y_move = "Y" ~ params.Y if params.Y is defined else "" %}
3778
+	{% set z_move = "Z" ~ params.Z if params.Z is defined else "" %}
3779
+	{% set e_move = "E" ~ params.E if params.E is defined else "" %}
3780
+	{% set rate = "F" ~ params.F if params.F is defined else "" %}
3781
+	{% set ABSOLUTE = params.ABSOLUTE | default(0) | int != 0 %}
3782
+	{% set ABSOLUTE_E = params.ABSOLUTE_E | default(0) | int != 0 %}
3783
+	SAVE_GCODE_STATE NAME=_client_movement
3784
+	{% if x_move or y_move or z_move %}
3785
+	G9{ 0 if ABSOLUTE else 1 }
3786
+	{% endif %}
3787
+	{% if e_move %}
3788
+	M8{ 2 if ABSOLUTE_E else 3 }
3789
+	{% endif %}
3790
+	G1 { x_move } { y_move } { z_move } { e_move } { rate }
3791
+	RESTORE_GCODE_STATE NAME=_client_movement
3792
+
3793
+[mcu]
3794
+serial = /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00
3795
+
3796
+[stepper_x]
3797
+step_pin = PE3
3798
+dir_pin = !PE2
3799
+enable_pin = !PE4
3800
+microsteps = 16
3801
+rotation_distance = 40
3802
+endstop_pin = PA15
3803
+position_endstop = 0
3804
+position_max = 300
3805
+homing_speed = 50
3806
+
3807
+[stepper_y]
3808
+step_pin = PE0
3809
+dir_pin = !PB9
3810
+enable_pin = !PE1
3811
+microsteps = 16
3812
+rotation_distance = 40
3813
+endstop_pin = !PD2
3814
+position_endstop = 0
3815
+position_max = 300
3816
+homing_speed = 50
3817
+
3818
+[stepper_z]
3819
+step_pin = PB5
3820
+dir_pin = PB4
3821
+enable_pin = !PB8
3822
+microsteps = 16
3823
+rotation_distance = 8
3824
+endstop_pin = !PC8
3825
+position_endstop = 0.5
3826
+position_max = 200
3827
+
3828
+[stepper_z1]
3829
+step_pin = PD15
3830
+dir_pin = !PA1
3831
+enable_pin = !PA3
3832
+microsteps = 16
3833
+rotation_distance = 8
3834
+
3835
+[extruder]
3836
+step_pin = PD6
3837
+dir_pin = !PD3
3838
+enable_pin = !PB3
3839
+microsteps = 16
3840
+rotation_distance = 33.500
3841
+nozzle_diameter = 0.400
3842
+filament_diameter = 1.750
3843
+heater_pin = PE5
3844
+sensor_type = ATC Semitec 104GT-2
3845
+sensor_pin = PC1
3846
+control = pid
3847
+pid_kp = 14.669
3848
+pid_ki = 0.572
3849
+pid_kd = 94.068
3850
+min_temp = 0
3851
+max_temp = 250
3852
+
3853
+[heater_bed]
3854
+heater_pin = PA0
3855
+sensor_type = EPCOS 100K B57560G104F
3856
+sensor_pin = PC0
3857
+control = pid
3858
+pid_kp = 325.10
3859
+pid_ki = 63.35
3860
+pid_kd = 417.10
3861
+min_temp = 0
3862
+max_temp = 130
3863
+
3864
+[fan]
3865
+pin = PC14
3866
+
3867
+[printer]
3868
+kinematics = corexy
3869
+max_velocity = 300
3870
+max_accel = 3000
3871
+max_z_velocity = 25
3872
+max_z_accel = 30
3873
+
3874
+[board_pins]
3875
+aliases = 
3876
+	
3877
+	EXP1_1=PC5,  EXP1_3=PD13, EXP1_5=PE14, EXP1_7=PD11, EXP1_9=<GND>,
3878
+	EXP1_2=PE13, EXP1_4=PC6,  EXP1_6=PE15, EXP1_8=PD10, EXP1_10=<5V>,
3879
+	
3880
+	EXP2_1=PA6, EXP2_3=PE8, EXP2_5=PE11, EXP2_7=PE12,  EXP2_9=<GND>,
3881
+	EXP2_2=PA5, EXP2_4=PE10, EXP2_6=PA7, EXP2_8=<RST>, EXP2_10=<3.3v>
3882
+=======================
3883
+Extruder max_extrude_ratio=0.266081
3884
+mcu 'mcu': Starting serial connect
3885
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'
3886
+webhooks client 547723709136: New connection
3887
+webhooks client 547723709136: Client info {'program': 'Moonraker', 'version': 'v0.9.3-3-gccfe32f'}
3888
+mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-Klipper_stm32f407xx_000000000000000000000000-if00'