Aller au contenu

Anycubic Kobra 3 Combo

Messages recommandés

il y a 31 minutes, darkness a dit :

mon pb c'est que mon imprimante ne se connecte pa au pi et que il y a une erreur l'erreur  c'es /home/pi/printer_data/config/variables.cfg 

Si tu veux de l'aide efficace :

* met ton fichier klipper.log

* explique nous exactement le contexte : ça déjà marché ? ça n'a jamais marché ? tu as fais quoi ? ... quelle imprimante ?, ...

Modifié (le) par Savate
  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

il y a 30 minutes, Savate a dit :

Si tu veux de l'aide efficace :

* met ton fichier klipper.log

* explique nous exactement le contexte : ça déjà marché ? ça n'a jamais marché ? tu as fais quoi ? ... quelle imprimante ?, ...

voici les log 
 

Citation

Starting Klippy...
Args: ['/home/loic/klipper/klippy/klippy.py', '/home/loic/printer_data/config/printer.cfg', '-I', '/home/loic/printer_data/comms/klippy.serial', '-l', '/home/loic/printer_data/logs/klippy.log', '-a', '/home/loic/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-88-g2e8b54ae'
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper
CPU: 4 core ?
Python: '3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]'
Building C code module c_helper.so
Start printer at Tue Jan 23 17:12:55 2024 (1706026375.5 1063.9)
===== Config file =====
[mcu]
serial = /dev/serial/by-id/<your-mcu-id>

[virtual_sdcard]
path = /home/loic/printer_data/gcodes
on_error_gcode = CANCEL_PRINT

[printer]
kinematics = none
max_velocity = 1000
max_accel = 1000
=======================
mcu 'mcu': Starting serial connect
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
mcu 'mcu': Unable to open serial port: [Errno 2] could not open port /dev/serial/by-id/<your-mcu-id>: [Errno 2] No such file or directory: '/dev/serial/by-id/<your-mcu-id>'
MCU error during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/mcu.py", line 809, in _mcu_identify
    self._serial.connect_uart(self._serialport, self._baud, rts)
  File "/home/loic/klipper/klippy/serialhdl.py", line 182, in connect_uart
    self._error("Unable to connect")
  File "/home/loic/klipper/klippy/serialhdl.py", line 61, in _error
    raise error(self.warn_prefix + (msg % params))
serialhdl.error: mcu 'mcu': Unable to connect

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 176, in _connect
    self.send_event("klippy:mcu_identify")
  File "/home/loic/klipper/klippy/klippy.py", line 263, in send_event
    return [cb(*params) for cb in self.event_handlers.get(event, [])]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/klippy.py", line 263, in <listcomp>
    return [cb(*params) for cb in self.event_handlers.get(event, [])]
            ^^^^^^^^^^^
  File "/home/loic/klipper/klippy/mcu.py", line 814, in _mcu_identify
    raise error(str(e))
mcu.error: mcu 'mcu': Unable to connect
No build file /home/loic/klipper/klippy/../.config
No build file /home/loic/klipper/klippy/../out/klipper.dict
No build file /home/loic/klipper/klippy/../out/klipper.elf
webhooks client 548364026320: New connection
webhooks client 548364026320: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
webhooks client 548364026320: Disconnected
webhooks client 548371563600: New connection
webhooks client 548371563600: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Starting Klippy...
Args: ['/home/loic/klipper/klippy/klippy.py', '/home/loic/printer_data/config/printer.cfg', '-I', '/home/loic/printer_data/comms/klippy.serial', '-l', '/home/loic/printer_data/logs/klippy.log', '-a', '/home/loic/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-88-g2e8b54ae'
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper
CPU: 4 core ?
Python: '3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]'
Start printer at Tue Jan 23 17:46:22 2024 (1706028382.4 18.3)
===== Config file =====
[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[pause_resume]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547893275408: New connection
webhooks client 547893275408: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547893275408: Disconnected
Restarting printer
Start printer at Tue Jan 23 17:49:09 2024 (1706028550.0 147.1)
===== Config file =====
[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[pause_resume]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547886285328: New connection
webhooks client 547886285328: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547886285328: Disconnected
Restarting printer
Start printer at Tue Jan 23 17:51:08 2024 (1706028668.5 265.6)
===== Config file =====
[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[pause_resume]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547893957136: New connection
webhooks client 547893957136: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

Transition to shutdown state: Shutdown due to webhooks request
Dumping 20 requests for client 547893957136
Received 925.358763: b'{"id": 548052054608, "method": "info", "params": {}}'
Received 927.361640: b'{"id": 548052044880, "method": "info", "params": {}}'
Received 929.354837: b'{"id": 548052048976, "method": "info", "params": {}}'
Received 931.356639: b'{"id": 548052054224, "method": "info", "params": {}}'
Received 933.358756: b'{"id": 548052047312, "method": "info", "params": {}}'
Received 935.362456: b'{"id": 548052054480, "method": "info", "params": {}}'
Received 937.357288: b'{"id": 548052050768, "method": "info", "params": {}}'
Received 939.358803: b'{"id": 548052051024, "method": "info", "params": {}}'
Received 941.361324: b'{"id": 548052049360, "method": "info", "params": {}}'
Received 943.356196: b'{"id": 548052044880, "method": "info", "params": {}}'
Received 945.357848: b'{"id": 548052048976, "method": "info", "params": {}}'
Received 947.360025: b'{"id": 548052054224, "method": "info", "params": {}}'
Received 949.363359: b'{"id": 548052047312, "method": "info", "params": {}}'
Received 951.357652: b'{"id": 548052054480, "method": "info", "params": {}}'
Received 953.359247: b'{"id": 548052049040, "method": "info", "params": {}}'
Received 955.361296: b'{"id": 548052051024, "method": "info", "params": {}}'
Received 957.357148: b'{"id": 548052049360, "method": "info", "params": {}}'
Received 959.358893: b'{"id": 548052052048, "method": "info", "params": {}}'
Received 961.360697: b'{"id": 548052048976, "method": "info", "params": {}}'
Received 962.271880: b'{"id": 548052050192, "method": "emergency_stop", "params": {}}'
Reactor garbage collection: (843.354604886, 0.0, 0.0)
Unable to issue reset command on MCU 'mcu'
webhooks client 547893957136: Disconnected
Restarting printer
Start printer at Tue Jan 23 18:02:53 2024 (1706029373.5 970.6)
===== Config file =====
[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[pause_resume]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547892608336: New connection
webhooks client 547892608336: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547892608336: Disconnected
Restarting printer
Start printer at Tue Jan 23 18:11:45 2024 (1706029905.5 1502.6)
===== Config file =====
[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[pause_resume]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547893957328: New connection
webhooks client 547893957328: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Starting Klippy...
Args: ['/home/loic/klipper/klippy/klippy.py', '/home/loic/printer_data/config/printer.cfg', '-I', '/home/loic/printer_data/comms/klippy.serial', '-l', '/home/loic/printer_data/logs/klippy.log', '-a', '/home/loic/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-88-g2e8b54ae'
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper
CPU: 4 core ?
Python: '3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]'
Start printer at Tue Jan 23 18:19:11 2024 (1706030351.9 19.2)
===== Config file =====
[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[pause_resume]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547735561680: New connection
webhooks client 547735561680: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}

mon imprimante wanhao d12/230

ca na pas fonctionner 

j'ai changer le firmwar avec le bin et je l'ai connecter au pi et rien ne se passe

Modifié (le) par fran6p
Lien vers le commentaire
Partager sur d’autres sites

il y a 3 minutes, darkness a dit :

mon imprimante wanhao d12/230

ca na pas fonctionner 

j'ai changer le firmwar avec le bin et je l'ai connecter au pi et rien ne se passe

tu as clairement oublié une étape ...

/dev/serial/by-id/<your-mcu-id>

dans la console ssh : tapes la commande

ls /dev/serial/by-id/*

et montre nous le résultat

Lien vers le commentaire
Partager sur d’autres sites

@darkness

J'ai édité ton post pour placer le journal dans une balise citation. Why? Sinon c'est indigeste et ne facilite pas la lecture.

🙂

  • Merci ! 1
Lien vers le commentaire
Partager sur d’autres sites

il y a 10 minutes, darkness a dit :

c'est un pb avec les variable

non, pas de problème de variables (en tout cas pour le moment ...)

ta carte mère n'est pas 'vue' par le pi.
elle est bien branchée en usb sur le pi ?
le câble est bon ? (essaye avec un autre)

tu peux aussi essayer un lsusb pour être sur que ce n'est pas un bug d'une maj de linux.

 

Modifié (le) par Savate
Lien vers le commentaire
Partager sur d’autres sites

Le problème vient du fait que ton raspberry de détecte rien de connecté au port USB. Tu as sûrement un problème physique au niveau de la connexion usb. Or, tu as besoin de récupérer l'identifiant du microprocesseur de l'imprimante pour pouvoir t'y connecter. Pour cela, tu peux aussi passer par Kiauh.

Une fois que tu as ouvert kiauh, tu vas dans advanced > get MCU id > usb. Si tu as un message d'erreur, il faut que tu changes de câble, ou que tu vérifies les connexions. Sinon, tu copies l'id et tu le mets dans la config, comme te disait @Savate

Lien vers le commentaire
Partager sur d’autres sites

Il y a 9 heures, darkness a dit :

je ne comprend pas

Qu'est-ce que tu ne comprends pas ?

1) non, ce n'est pas un problème de variables ?

2) ta carte mère n'est pas vue par le pi ?

3) elle est bien branchée en usb dur le pi ?

4) le câble est bon ? essaye avec un autre câble usb

en ssh tapes la commande

lsusb

et montre nous ce qu'elle retourne

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

"No such file or directory /home/pi/printer_data/config/fichier variables.cfg " signifie qu'il n'y a pas de fichier ou dossier (fichier dans ton cas) qui s'appelle variables.cfg dans le dossier /home/pi/printer_data/config.

Il te faut donc copier le fichier variables.cfg du tuto que tu as suivi dans le dossier /home/pi/printer_data/config

PS: n'hésite pas à ajouter le nom de ton imprimante dans ton profil, c'est pratique pour te répondre. (voir ce message pour plus d'explications)

  • +1 2
Lien vers le commentaire
Partager sur d’autres sites

Il y a 9 heures, darkness a dit :

c'est un pb de  variable

oups je me suis arrêté au début du log, ou il était indiqué que tu n'avais pas mis ton id de mcu ...

@pommeverte a tout dit 🙂 

Lien vers le commentaire
Partager sur d’autres sites

Normalement quand la section  [save_variables] est correctement paramétrée (le paramètre filename: pointant vers un emplacement indiquant  le nom à utiliser pour stocker les variables), quand ce fichier n'existe pas encore, il est automatiquement créé 😉

Lien vers le commentaire
Partager sur d’autres sites

Il y a 21 heures, pommeverte a dit :

Salut,

"No such file or directory /home/pi/printer_data/config/fichier variables.cfg " signifie qu'il n'y a pas de fichier ou dossier (fichier dans ton cas) qui s'appelle variables.cfg dans le dossier /home/pi/printer_data/config.

Il te faut donc copier le fichier variables.cfg du tuto que tu as suivi dans le dossier /home/pi/printer_data/config

PS: n'hésite pas à ajouter le nom de ton imprimante dans ton profil, c'est pratique pour te répondre. (voir ce message pour plus d'explications)

le truc c'est qu'il y est deja

 

Capture.PNG

c'est encor pire 

Include file '/home/loic/printer_data/config/varables.cfg' does not exist

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

il ne me trouve pas le fichier de variable alor que je l'ai 

wanhao d12/230

 

Il y a 8 heures, fran6p a dit :

Normalement quand la section  [save_variables] est correctement paramétrée (le paramètre filename: pointant vers un emplacement indiquant  le nom à utiliser pour stocker les variables), quand ce fichier n'existe pas encore, il est automatiquement créé 😉

comment on la paramétre bien 

Lien vers le commentaire
Partager sur d’autres sites

il y a 12 minutes, darkness a dit :

/home/pi/printer_data/config/fichier variables.cfg

Avec ce paramètre pour filename: ça ne peut pas fonctionner 😉 … sauf si le fichier contenant les variables à enregistrer se nomme "fichier variables.cfg" (et encore, je ne pense pas que Klipper acceptera un nom de fichier contenant un espace).

Le paramètre filename: doit pointer vers le fichier en utilisant le chemin d'accès complet ( /home/pi/printer_data/variables.cfg ) ou raccourci ( ~/printer_data/variables.cfg ).

🙂

Lien vers le commentaire
Partager sur d’autres sites

il y a 3 minutes, fran6p a dit :

Avec ce paramètre pour filename: ça ne peut pas fonctionner 😉 … sauf si le fichier contenant les variables à enregistrer se nomme "fichier variables.cfg" (et encore, je ne pense pas que Klipper acceptera un nom de fichier contenant un espace).

Le paramètre filename: doit pointer vers le fichier en utilisant le chemin d'accès complet ( /home/pi/printer_data/variables.cfg ) ou raccourci ( ~/printer_data/variables.cfg ).

🙂

merci mai ca ne fonctionne toujours pas

Lien vers le commentaire
Partager sur d’autres sites

Salut,

il y a 5 minutes, fran6p a dit :
il y a 20 minutes, darkness a dit :

/home/pi/printer_data/config/fichier variables.cfg

Avec ce paramètre pour filename

C'est une erreur de saisie de ma part. 🥴

il y a 21 minutes, darkness a dit :

il ne me trouve pas le fichier de variable alor que je l'ai 

non. Ton fichier est dans /home/loic et non dans /home/pi

Lien vers le commentaire
Partager sur d’autres sites

Avec des informations partielles, il est franchement difficile d'apporter une aide correcte.

Toute aide à propos de Klipper devrait ( doit ? ) s'accompagner des journaux (klippy.log / moonraker.log) ainsi on dispose de toutes les informations la plupart du temps (tout le temps ?) suffisantes.

🙂

Lien vers le commentaire
Partager sur d’autres sites

Il y a 19 heures, fran6p a dit :

Avec des informations partielles, il est franchement difficile d'apporter une aide correcte.

Toute aide à propos de Klipper devrait ( doit ? ) s'accompagner des journaux (klippy.log / moonraker.log) ainsi on dispose de toutes les informations la plupart du temps (tout le temps ?) suffisantes.

🙂

ok je te fais ca 

klipper 

Citation

===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Args: ['/home/loic/klipper/klippy/klippy.py', '/home/loic/printer_data/config/printer.cfg', '-I', '/home/loic/printer_data/comms/klippy.serial', '-l', '/home/loic/printer_data/logs/klippy.log', '-a', '/home/loic/printer_data/comms/klippy.sock']
Git version: 'v0.12.0-93-g43a9685c'
Branch: master
Remote: origin
Tracked URL: https://github.com/Klipper3d/klipper
CPU: 4 core ?
Python: '3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]'
=============== Log rollover at Thu Jan 25 19:05:52 2024 ===============
Unable to issue reset command on MCU 'mcu'
webhooks client 547867807824: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:05:53 2024 (1706205953.0 206.7)
===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547847652880: New connection
webhooks client 547847652880: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547847652880: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:14:51 2024 (1706206491.9 745.6)
Config error
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 134, in _read_config
    config = pconfig.read_main_config()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/configfile.py", line 284, in read_main_config
    regular_config = self._build_config_wrapper(regular_data, filename)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/configfile.py", line 271, in _build_config_wrapper
    self._parse_config(data, filename, fileconfig, set())
  File "/home/loic/klipper/klippy/configfile.py", line 259, in _parse_config
    self._resolve_include(filename, include_spec, fileconfig,
  File "/home/loic/klipper/klippy/configfile.py", line 232, in _resolve_include
    raise error("Include file '%s' does not exist" % (include_glob,))
configparser.Error: Include file '/home/loic/printer_data/config/varables.cfg' does not exist
webhooks client 547839647504: New connection
webhooks client 547839647504: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
webhooks client 547839647504: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:15:40 2024 (1706206540.3 794.0)
===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[Variables]
active_tool = 'T0'

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547839947024: New connection
webhooks client 547839947024: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547839947024: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:19:16 2024 (1706206757.0 1010.7)
===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547838253520: New connection
webhooks client 547838253520: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547838253520: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:19:59 2024 (1706206800.0 1053.7)
===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547846898512: New connection
webhooks client 547846898512: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547846898512: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:21:05 2024 (1706206865.4 1119.1)
===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547868158224: New connection
webhooks client 547868158224: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}
Unable to issue reset command on MCU 'mcu'
webhooks client 547868158224: Disconnected
Restarting printer
Start printer at Thu Jan 25 19:31:06 2024 (1706207466.8 1720.5)
===== Config file =====
[pause_resume]

[gcode_macro _OBICO_LAYER_CHANGE]
description = Run a scan across the current print area
variable_first_layer_scan_retract_length = 6
variable_first_layer_scan_retract_speed = 15
variable_first_layer_scan_unretract_length = 6.5
variable_first_layer_scan_unretract_speed = 15
variable_first_layer_scan_resume_speed = 50
variable_first_layer_scan_enabled = True
variable_first_layer_scan_stepover = 10
variable_first_layer_scan_speed = 10
variable_first_layer_scan_zhop = 4
variable_first_layer_scan_zhop_speed = 15
variable_verbose = False
variable_current_layer = -1
variable_first_layer_scanning = False
variable_wait = {'resume': "RESUME", 'absolute_coordinates': True, 'absolute_extrude': True, 'e': 0.0}
gcode = 
    
    {% set pause_macro  = "PAUSE"  if printer.configfile.settings['gcode_macro pause']  is not defined
    else printer.configfile.settings['gcode_macro pause'].rename_existing %}
    {% set resume_macro = "RESUME" if printer.configfile.settings['gcode_macro resume'] is not defined
    else printer.configfile.settings['gcode_macro resume'].rename_existing %}
    
    {% set current_layer_default = printer.print_stats.info.current_layer if printer.print_stats.info.current_layer is not none else -1 %}
    {% set current_layer = params.CURRENT_LAYER|default(current_layer_default)|int %}
    
    {% set polygon_points = printer.exclude_object.objects|map(attribute='polygon')|sum(start=[]) if printer.exclude_object is defined else [] %}
    {% set min_x = params.MINX|default(polygon_points|map(attribute=0)|min|default(printer.toolhead.axis_minimum.x))|float %}
    {% set min_y = params.MINY|default(polygon_points|map(attribute=1)|min|default(printer.toolhead.axis_minimum.y))|float %}
    {% set max_x = params.MAXX|default(polygon_points|map(attribute=0)|max|default(printer.toolhead.axis_maximum.x))|float %}
    {% set max_y = params.MAXY|default(polygon_points|map(attribute=1)|max|default(printer.toolhead.axis_maximum.y))|float %}
    
    {% set stepoverCount = ((max_y - min_y) / first_layer_scan_stepover|float)|round(method='ceil')|int %}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Layer %d" % (current_layer)}' {% endif %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=current_layer VALUE={current_layer}
    
    {% if first_layer_scan_enabled and current_layer == 2 %}
    
    {% set wait_dic = {'resume'              : resume_macro,
    'absolute_coordinates': printer.gcode_move.absolute_coordinates,
    'absolute_extrude'    : printer.gcode_move.absolute_extrude,
    'e'                   : printer.gcode_move.gcode_position.e} %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=wait VALUE="{wait_dic}"
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Prepair scanning" {% endif %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Scan Coordinates: Min:[%.3f:%.3f] Max:[%.3f:%.3f]" % (min_x,min_y,max_x,max_y)}' {% endif %}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Retract %.1fmm filament" % first_layer_scan_retract_length|abs}' {% endif %}
    M83
    G0 E-{first_layer_scan_retract_length|abs} F{first_layer_scan_retract_speed|float * 60}
    {% endif %}
    G91
    G0 Z{first_layer_scan_zhop|abs} F{first_layer_scan_zhop_speed|float * 60}
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s" % pause_macro}' {% endif %}
    {pause_macro}
    
    
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Start scanning" {% endif %}
    
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=True
    G90
    G0 X{min_x} Y{min_y} F{first_layer_scan_resume_speed|float * 60}
    {% for ystep in range(stepoverCount) %}
    G0 Y{min_y + first_layer_scan_stepover|float * ystep} F{first_layer_scan_speed|float * 60}
    G0 X{max_x if ystep % 2 == 0 else min_x}              F{first_layer_scan_speed|float * 60}
    {% endfor %}
    SET_GCODE_VARIABLE MACRO=_OBICO_LAYER_CHANGE VARIABLE=first_layer_scanning VALUE=False
    {% if verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Finish scanning" {% endif %}
    {% endif %}

[delayed_gcode _WAIT_OBICO_LAYER_CHANGE]
gcode = 
    {% set lc_macro = printer['gcode_macro _OBICO_LAYER_CHANGE'] %}
    {% if lc_macro.first_layer_scanning %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Waiting for first layer scan..." {% endif %}
    UPDATE_DELAYED_GCODE ID=_WAIT_OBICO_LAYER_CHANGE DURATION=1.0
    {% else %}
    
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG="Resume print" {% endif %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Call %s VELOCITY=%.1f" % (lc_macro.wait.resume, lc_macro.first_layer_scan_resume_speed)}' {% endif %}
    {lc_macro.wait.resume} VELOCITY={lc_macro.first_layer_scan_resume_speed}
    G91
    G0 Z-{lc_macro.first_layer_scan_zhop|abs} F{lc_macro.first_layer_scan_zhop_speed|float * 60}
    {% if printer[printer.toolhead.extruder].can_extrude %}
    {% if lc_macro.verbose %} RESPOND PREFIX='OBICO DEBUG:' MSG='{"Extrude %.1fmm filament" % lc_macro.first_layer_scan_unretract_length|abs}' {% endif %}
    M83
    G0 E{lc_macro.first_layer_scan_unretract_length|abs} F{lc_macro.first_layer_scan_unretract_speed|float * 60}
    {% endif %}
    
    
    {% if lc_macro.wait.absolute_coordinates %} G90 {% endif %}
    {% if lc_macro.wait.absolute_extrude %}
    M82
    G92 E{lc_macro.wait.e}
    {% endif %}
    {% endif %}

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

[gcode_macro Z_OFFSET]
description = Mesuser le Z-Offset
gcode = 
    G28
    PROBE_CALIBRATE

[gcode_macro START_PRINT]
gcode = 
    {% set BED_TEMP = params.BED_TEMP|default(0)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(0)|float %}
    M117 Heating...
    
    M140 S{BED_TEMP}
    
    G90
    
    SET_GCODE_OFFSET Z=0.0
    
    G28
    
    BED_MESH_CALIBRATE
    
    M190 S{BED_TEMP}
    G1 Z5.0 F3000
    G1 X0.1 Y20 Z0.3 F5000.0
    
    M109 S{EXTRUDER_TEMP}
    
    G92 E0
    G1 Z1.0 F3000
    G1 X2 Y20 Z0.3 F5000.0
    G1 X2 Y200.0 Z0.3 F1500.0 E15
    G1 X2 Y200.0 Z0.4 F5000.0
    G1 X2 Y20 Z0.4 F1500.0 E30
    G92 E0
    G1 Z1.0 F3000

[gcode_macro END_PRINT]
gcode = 
    M104 T0 S0
    M104 T1 S0
    M140 S0
    G92 E1
    G1 E-1 F300
    G28 X0 Y0
    M84

[gcode_macro G29]
gcode = 
    BED_MESH_CALIBRATE

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode = 
    TURN_OFF_HEATERS
    CANCEL_PRINT_BASE

[gcode_macro PAUSE]
rename_existing = BASE_PAUSE
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    M104 S0
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro RESUME]
rename_existing = BASE_RESUME
variable_zhop = 0
variable_etemp = 0
gcode = 
    
    {% set e = params.E|default(2.5)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 1 %}
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
    
    SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
    {% if etemp > 0 %}
    M109 S{etemp|int}
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100
    G91
    M83
    {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
    G1 Z{zhop * -1} E{e} F900
    {% else %}
    G1 Z{zhop * -1} F900
    {% endif %}
    RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60
    BASE_RESUME
    {% endif %}

[gcode_macro M600]
gcode = 
    CHANGE_FILAMENT

[gcode_macro M601]
gcode = 
    CHANGE_FILAMENT

[gcode_macro CHANGE_FILAMENT]
gcode = 
    
    {% set z = params.Z|default(10)|int %}
    
    {% if printer['pause_resume'].is_paused|int == 0 %}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}
    
    SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
    SAVE_GCODE_STATE NAME=PAUSE
    BASE_PAUSE
    {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}
    G91
    G1 Z{z} F900
    {% else %}
    { action_respond_info("Pause zhop exceeds maximum Z height.") }
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
    {% endif %}
    G90
    G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000
    SAVE_GCODE_STATE NAME=PAUSEPARK
    ,M104 S0
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% endif %}

[gcode_macro UNLOAD_FILAMENT]
description = Retrait du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=unload_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Retrait du filament..."
    G91
    G0 E2 F400
    G0 E-5 F800
    G0 E-70 F800
    RESTORE_GCODE_STATE NAME=unload_state
    {% endif %}

[gcode_macro LOAD_FILAMENT]
description = Chargement du filament
gcode = 
    {% if printer.idle_timeout.state == "Printing" and not printer.pause_resume.is_paused %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    SAVE_GCODE_STATE NAME=load_state
    {% if printer.extruder.temperature < 200 %}
    RESPOND MSG="Chauffe..."
    M109 S200
    {% endif %}
    RESPOND MSG="Chargement du filament..."
    G91
    G0 E70 F300
    G0 E20 F200
    M400
    RESTORE_GCODE_STATE NAME=load_state
    {% endif %}

[gcode_macro CALIBRATION_PID_BED_60]
description = PID Plateau
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID du plateau en cours..."
    PID_CALIBRATE HEATER=heater_bed TARGET={params.TEMP|default(60)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro CALIBRATION_PID_HOTEND_200]
description = PID Hotend
gcode = 
    {% if printer.idle_timeout.state == "Printing" %}
    RESPOND TYPE=error MSG="Impossible de lancer cette macro actuellement !"
    {% else %}
    G28
    G1 Z50 F1500
    RESPOND MSG="PID de la buse en cours..."
    PID_CALIBRATE HEATER=extruder TARGET={params.TEMP|default(200)}
    G28
    SAVE_CONFIG
    {% endif %}

[gcode_macro SAUVEGARDER]
description = Sauvegarder la configuration
gcode = 
    SAVE_CONFIG

[gcode_macro M201]
description = Sets maximum accelleration.
    Usage: M201 [X<accel>] [Y<accel>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set accel = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M203]
description = Sets maximum velocity
    Usage: M203 [X<speed>] [Y<speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT VELOCITY={speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro M204]
description = Sets maximum accelleration.
    Usage: M204 [S<accel>] [P<accel> T<accel>]
rename_existing = M204.1
gcode = 
    {% set f = params.F|default(0.5)|float %}
    {% if 'S' in params %}
    {% set s = params.S|float %}
    SET_VELOCITY_LIMIT ACCEL={s} ACCEL_TO_DECEL={ s * f }
    {% else %}
    {% if 'P' in params %}
    {% set p = params.P|float %}
    {% if 'T' in params %}
    {% set t = params.T|float %}
    {% if p < t %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% else %}
    SET_VELOCITY_LIMIT ACCEL={p} ACCEL_TO_DECEL={ p * f }
    {% endif %}
    {% elif 'T' in params %}
    {% set t = params.T|float %}
    SET_VELOCITY_LIMIT ACCEL={t} ACCEL_TO_DECEL={ t * f }
    {% endif %}
    {% endif %}

[gcode_macro M205]
description = Sets square corner velocity
    Usage: M205 [X<corner_speed>] [Y<corner_speed>]
gcode = 
    {% if 'X' in params or 'Y' in params %}
    {% set corner_speed = (params.X|default(params.Y)|float, params.Y|default(params.X)|float)|min %}
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
    {% else %}
    SET_VELOCITY_LIMIT
    {% endif %}

[gcode_macro ADXL_TEST]
description = ADXL Test
gcode = 
    ACCELEROMETER_QUERY

[gcode_macro ADXL_NOISE]
description = Measure Accelerometer Noise
gcode = 
    MEASURE_AXES_NOISE

[gcode_macro ADXL_AXE_X]
description = Measure X axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=X

[gcode_macro ADXL_AXE_Y]
description = Measure Y axis resonances
gcode = 
    G28
    M400
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro SECURITY_OFFSET]
description = Apply a 2mm Safety Offset
gcode = 
    SET_GCODE_OFFSET Z=+2
    RESPOND MSG="Safety Offset applied!"

[mcu]
serial = /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method = command

[stepper_x]
step_pin = PE3
dir_pin = PE2
enable_pin = !PE4
microsteps = 16
rotation_distance = 40
endstop_pin = !PA15
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_y]
step_pin = PE0
dir_pin = !PB9
enable_pin = !PE1
microsteps = 16
rotation_distance = 40
endstop_pin = !PA12
position_endstop = 0
position_max = 235
homing_speed = 50

[stepper_z]
step_pin = PB5
dir_pin = !PB4
enable_pin = !PB8
microsteps = 16
rotation_distance = 8
endstop_pin = !PA11
position_endstop = 0
position_min = -5
position_max = 250

[extruder]
step_pin = PD6
dir_pin = !PD3
enable_pin = !PB3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.157
min_extrude_temp = 185
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC3
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC1
min_temp = 5
max_temp = 260
max_extrude_only_distance = 950.0
max_extrude_only_velocity = 200
max_extrude_only_accel = 2750
max_extrude_cross_section = 5
pressure_advance = 0.065
pressure_advance_smooth_time = 0.040
control = pid
pid_kp = 22.501
pid_ki = 0.843
pid_kd = 150.192

[extruder_stepper belted_extruder]
extruder = extruder
step_pin = PA6
dir_pin = !PA1
enable_pin = !PA3
full_steps_per_rotation = 200
microsteps = 16
rotation_distance = 7.952

[heater_bed]
heater_pin = PA0
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PC0
min_temp = 5
max_temp = 100
control = pid
pid_kp = 62.805
pid_ki = 1.055
pid_kd = 935.009

[fan]
pin = PB1

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 2400
max_accel_to_decel = 1200
square_corner_velocity = 5
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
shaper_freq_x = 101.8
shaper_type_x = mzv
shaper_freq_y = 38.4
shaper_type_y = mzv

[safe_z_home]
home_xy_position = 115,115
speed = 100.0
z_hop = 10.0
z_hop_speed = 10.0

[firmware_retraction]
retract_length = 8
retract_speed = 35
unretract_extra_length = 0
unretract_speed = 25

[filament_switch_sensor E0]
pause_on_runout = True
switch_pin = PA4

[filament_switch_sensor E1]
pause_on_runout = True
switch_pin = PE6

[temperature_sensor PiTemp]
sensor_type = temperature_host
sensor_path = /sys/class/thermal/thermal_zone0/temp

[temperature_sensor mcu_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 90

[bed_mesh]
speed = 80
horizontal_move_z = 8
mesh_min = 50,50
mesh_max = 180, 210
probe_count = 5,5
fade_start = 1.0
fade_end = 10
mesh_pps = 2,2

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[display_status]

[bed_screws]
screw1 = 20,20
screw1_name = Front left screw
screw2 = 20,220
screw2_name = Rear left screw
screw3 = 220,220
screw3_name = Rear right screw
screw4 = 220,20
screw4_name = Front right screw

[bed_mesh default]
version = 1
points = 
    -0.145000, 0.077500, 0.020000, -0.026250, -0.007500
    -0.085000, 0.067500, 0.051250, -0.012500, -0.038750
    -0.126250, 0.025000, 0.005000, -0.035000, -0.057500
    -0.183750, -0.048750, -0.032500, -0.078750, -0.085000
    -0.321250, -0.142500, -0.172500, -0.182500, -0.170000
x_count = 5
y_count = 5
mesh_x_pps = 2
mesh_y_pps = 2
algo = lagrange
tension = 0.2
min_x = 50.00000000000001
max_x = 180.0
min_y = 50.01
max_y = 210.0
=======================
Unhandled exception during connect
Traceback (most recent call last):
  File "/home/loic/klipper/klippy/klippy.py", line 175, in _connect
    self._read_config()
  File "/home/loic/klipper/klippy/klippy.py", line 141, in _read_config
    self.load_object(config, section_config.get_name(), None)
  File "/home/loic/klipper/klippy/klippy.py", line 130, in load_object
    self.objects[section] = init_func(config.getsection(section))
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 64, in load_config
    return SaveVariables(config)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/loic/klipper/klippy/extras/save_variables.py", line 16, in __init__
    open(self.filename, "w").close()
    ^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'
webhooks client 547847674448: New connection
webhooks client 547847674448: Client info {'program': 'Moonraker', 'version': 'v0.8.0-286-gf44fc4b'}

monnraker 

Citation

-------------------- Log Start | Thu Jan 25 18:04:33 2024 --------------------
data_path: /home/loic/printer_data
is_default_data_path: False
config_file: /home/loic/printer_data/config/moonraker.conf
startup_warnings: []
verbose: False
debug: False
asyncio_debug: False
is_backup_config: False
is_python_package: False
instance_uuid: 51585d1c6c594e73bd87dca0790b8d2d
unix_socket_path: /home/loic/printer_data/comms/moonraker.sock
software_version: v0.8.0-286-gf44fc4b
git_branch: master
git_remote: origin
git_repo_url: https://github.com/Arksine/moonraker.git
modified_files: []
unofficial_components: []
log_file: /home/loic/printer_data/logs/moonraker.log
python_version: 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]
launch_args: /home/loic/moonraker-env/bin/python /home/loic/moonraker/moonraker/moonraker.py -d /home/loic/printer_data
msgspec_enabled: False
uvloop_enabled: False

#################### Moonraker Configuration ####################

[server]
host = 0.0.0.0
port = 7125
klippy_uds_address = /home/loic/printer_data/comms/klippy.sock

[authorization]
trusted_clients = 
    10.0.0.0/8
    127.0.0.0/8
    169.254.0.0/16
    172.16.0.0/12
    192.168.0.0/16
    FE80::/10
    ::1/128
cors_domains = 
    *.lan
    *.local
    *://localhost
    *://localhost:*
    *://my.mainsail.xyz
    *://app.fluidd.xyz

[octoprint_compat]

[history]

[update_manager]
channel = dev
refresh_interval = 168

[update_manager mainsail]
type = web
channel = stable
repo = mainsail-crew/mainsail
path = ~/mainsail

[update_manager moonraker-obico]
type = git_repo
path = /home/loic/moonraker-obico
origin = https://github.com/TheSpaghettiDetective/moonraker-obico.git
env = /home/loic/moonraker-obico/../moonraker-obico-env/bin/python
requirements = requirements.txt
install_script = install.sh
managed_services = 
    moonraker-obico

#################################################################
All Configuration Files:
/home/loic/printer_data/config/moonraker.conf
/home/loic/printer_data/config/moonraker-obico-update.cfg
#################################################################

Database Versions: pylmdb = 1.4.1, lmdb = (0, 9, 29)
Unsafe Shutdown Count: 1

System Info:

***python***
  version: (3, 11, 2, 'final', 0)
  version_string: 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]

***cpu_info***
  cpu_count: 4
  bits: 64bit
  processor: aarch64
  cpu_desc: 
  serial_number: 10000000524576af
  hardware_desc: 
  model: Raspberry Pi 4 Model B Rev 1.5
  total_memory: 7998716
  memory_units: kB

***sd_info***
  manufacturer_id: 27
  manufacturer: Unknown
  oem_id: 5048
  product_name: SD128
  product_revision: 6.0
  serial_number: da8fcd08
  manufacturer_date: 12/2022
  capacity: 116.1 GiB
  total_bytes: 124675686400

***distribution***
  name: Debian GNU/Linux 12 (bookworm)
  id: debian
  version: 12
  version_parts: {'major': '12', 'minor': '', 'build_number': ''}
  like: 
  codename: bookworm
  release_info: {}

***virtualization***
  virt_type: none
  virt_identifier: none

***network***

***canbus***

***Allowed Services***
  klipper_mcu
  webcamd
  MoonCord
  KlipperScreen
  moonraker-telegram-bot
  moonraker-obico
  sonar
  crowsnest
  octoeverywhere
  ratos-configurator

Systemd unit moonraker.service:
unit_name: moonraker.service
is_default: True
manager: systemd
Properties:
**Requires=['-.mount', 'sysinit.target', 'system.slice', 'network-online.target']
**After=['network-online.target', 'system.slice', 'basic.target', 'sysinit.target', 'systemd-journald.socket', '-.mount']
**SupplementaryGroups=['moonraker-admin']
**EnvironmentFiles=/home/loic/printer_data/systemd/moonraker.env
**ExecStart=/home/loic/moonraker-env/bin/python $MOONRAKER_ARGS
**WorkingDirectory=/home/loic/moonraker
**FragmentPath=/etc/systemd/system/moonraker.service
**Description=API Server for Klipper SV1
**User=loic

Systemd unit klipper.service:
unit_name: klipper.service
is_default: True
manager: systemd
Properties:
**Requires=['-.mount', 'sysinit.target', 'system.slice']
**After=['sysinit.target', 'basic.target', 'system.slice', '-.mount', 'systemd-journald.socket', 'network-online.target']
**SupplementaryGroups=[]
**EnvironmentFiles=/home/loic/printer_data/systemd/klipper.env
**ExecStart=/home/loic/klippy-env/bin/python $KLIPPER_ARGS
**WorkingDirectory=/home/loic/klipper
**FragmentPath=/etc/systemd/system/klipper.service
**Description=Klipper 3D Printer Firmware SV1
**User=loic
Git Repo moonraker: No warnings detected
Git Repo klipper: No warnings detected
Klipper Version: v0.12.0-93-g43a9685c
Git Repo moonraker-obico: No warnings detected
2024-01-25 19:04:33,291 [authorization.py:_check_trusted_connection()] - Trusted Connection Detected, IP: 192.168.1.18
2024-01-25 19:04:33,292 [application.py:log_request()] - 101 GET /websocket (192.168.1.18) [_TRUSTED_USER_] 1.57ms
2024-01-25 19:04:33,293 [websockets.py:open()] - Websocket Opened: ID: 548153133712, Proxied: True, User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Host Name: 192.168.1.82
2024-01-25 19:04:33,970 [websockets.py:_handle_identify()] - Websocket 548153133712 Client Identified - Name: mainsail, Version: 2.9.1, Type: web
2024-01-25 19:05:14,752 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKjYbnIpAAJgrol06
2024-01-25 19:05:14,774 [application.py:post()] - Processing Uploaded File: WanhaoD12 (1).zip
2024-01-25 19:05:14,784 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 33.51ms
2024-01-25 19:05:19,349 [websockets.py:on_close()] - Websocket Closed: ID: 548153133712 Close Code: 1001, Close Reason: None, Pong Time Elapsed: 6.04
2024-01-25 19:05:19,762 [application.py:log_request()] - 101 GET /websocket (192.168.1.18) [_TRUSTED_USER_] 1.32ms
2024-01-25 19:05:19,762 [websockets.py:open()] - Websocket Opened: ID: 548154487376, Proxied: True, User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Host Name: 192.168.1.82
2024-01-25 19:05:19,811 [websockets.py:_handle_identify()] - Websocket 548154487376 Client Identified - Name: mainsail, Version: 2.9.1, Type: web
2024-01-25 19:05:44,751 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGolcKEwShlAkaVZd
2024-01-25 19:05:44,764 [application.py:post()] - Processing Uploaded File: variables.cfg
2024-01-25 19:05:44,771 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 20.79ms
2024-01-25 19:05:51,962 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryA7ETShKL7QcgNua6
2024-01-25 19:05:51,979 [application.py:post()] - Processing Uploaded File: variables.cfg
2024-01-25 19:05:51,988 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 27.96ms
2024-01-25 19:05:52,011 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:05:53,269 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:05:53,570 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:05:53,571 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:05:53,572 [klippy_connection.py:_check_ready()] - 
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:05:55,580 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:14:50,843 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydcZFf3qovKvILeOK
2024-01-25 19:14:50,858 [application.py:post()] - Processing Uploaded File: printer.cfg
2024-01-25 19:14:50,868 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 25.82ms
2024-01-25 19:14:50,894 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:14:52,156 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:14:52,454 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:14:52,455 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:14:52,456 [klippy_connection.py:_check_ready()] - 
Include file '/home/loic/printer_data/config/varables.cfg' does not exist

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:14:54,712 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:15:39,256 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryCDSpLVqJ88q0W2N5
2024-01-25 19:15:39,270 [application.py:post()] - Processing Uploaded File: printer.cfg
2024-01-25 19:15:39,278 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 22.46ms
2024-01-25 19:15:39,299 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:15:40,558 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:15:40,856 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:15:40,858 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:15:40,859 [klippy_connection.py:_check_ready()] - 
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:15:42,614 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:19:15,887 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymllOifT6KshvCilR
2024-01-25 19:19:15,904 [application.py:post()] - Processing Uploaded File: printer.cfg
2024-01-25 19:19:15,914 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 28.90ms
2024-01-25 19:19:15,937 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:19:17,197 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:19:17,497 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:19:17,498 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:19:17,499 [klippy_connection.py:_check_ready()] - 
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:19:19,757 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:19:58,923 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybS3wxmwxebRl7ZCp
2024-01-25 19:19:58,940 [application.py:post()] - Processing Uploaded File: printer.cfg
2024-01-25 19:19:58,951 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 29.58ms
2024-01-25 19:19:58,973 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:20:00,234 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:20:00,531 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:20:00,532 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:20:00,534 [klippy_connection.py:_check_ready()] - 
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:20:02,791 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:21:04,294 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarym7uglNZd5XweIIZC
2024-01-25 19:21:04,312 [application.py:post()] - Processing Uploaded File: printer.cfg
2024-01-25 19:21:04,322 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 29.73ms
2024-01-25 19:21:04,345 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:21:05,605 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:21:05,905 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:21:05,906 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:21:05,908 [klippy_connection.py:_check_ready()] - 
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:21:07,666 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:27:19,567 [websockets.py:on_close()] - Websocket Closed: ID: 548154487376 Close Code: 1001, Close Reason: None, Pong Time Elapsed: 9.79
2024-01-25 19:27:19,783 [application.py:log_request()] - 101 GET /websocket (192.168.1.18) [_TRUSTED_USER_] 2.98ms
2024-01-25 19:27:19,783 [websockets.py:open()] - Websocket Opened: ID: 548152860048, Proxied: True, User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Host Name: 192.168.1.82
2024-01-25 19:27:19,798 [websockets.py:_handle_identify()] - Websocket 548152860048 Client Identified - Name: mainsail, Version: 2.9.1, Type: web
2024-01-25 19:27:21,094 [websockets.py:on_close()] - Websocket Closed: ID: 548152860048 Close Code: 1001, Close Reason: None, Pong Time Elapsed: 1.31
2024-01-25 19:27:21,361 [application.py:log_request()] - 101 GET /websocket (192.168.1.18) [_TRUSTED_USER_] 1.27ms
2024-01-25 19:27:21,361 [websockets.py:open()] - Websocket Opened: ID: 548154385168, Proxied: True, User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Host Name: 192.168.1.82
2024-01-25 19:27:21,387 [websockets.py:_handle_identify()] - Websocket 548154385168 Client Identified - Name: mainsail, Version: 2.9.1, Type: web
2024-01-25 19:31:05,695 [application.py:prepare()] - Upload Request Received from 192.168.1.18
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryA0BBC23CmB8dyxAv
2024-01-25 19:31:05,714 [application.py:post()] - Processing Uploaded File: printer.cfg
2024-01-25 19:31:05,724 [application.py:log_request()] - 201 POST /server/files/upload (192.168.1.18) [_TRUSTED_USER_] 31.08ms
2024-01-25 19:31:05,750 [klippy_connection.py:_on_connection_closed()] - Klippy Connection Removed
2024-01-25 19:31:07,009 [klippy_connection.py:_do_connect()] - Klippy Connection Established
2024-01-25 19:31:07,309 [klippy_connection.py:_request_initial_subscriptions()] - Webhooks Subscribed
2024-01-25 19:31:07,310 [klippy_connection.py:_request_initial_subscriptions()] - GCode Output Subscribed
2024-01-25 19:31:07,311 [klippy_connection.py:_check_ready()] - 
Internal error during connect: [Errno 2] No such file or directory: '/home/pi/printer_data/config/variables.cfg'

Once the underlying issue is corrected, use the "RESTART"
command to reload the config and restart the host software.
Printer is halted

2024-01-25 19:31:09,819 [file_manager.py:get_file_list()] - Updating File List <gcodes>...
2024-01-25 19:31:29,493 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:31:49,520 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:33:29,656 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:33:39,669 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:44:00,581 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:44:10,600 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:51:31,292 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:51:41,308 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:51:51,325 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:52:01,339 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:52:41,387 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:52:51,398 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:53:01,414 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:53:11,426 [machine.py:_find_public_ip()] - Detected Local IP: 192.168.1.82
2024-01-25 19:56:02,223 [websockets.py:on_close()] - Websocket Closed: ID: 548154385168 Close Code: 1001, Close Reason: None, Pong Time Elapsed: 0.85
2024-01-25 19:56:12,142 [application.py:log_request()] - 101 GET /websocket (192.168.1.18) [_TRUSTED_USER_] 3.08ms
2024-01-25 19:56:12,143 [websockets.py:open()] - Websocket Opened: ID: 548153008144, Proxied: True, User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Host Name: 192.168.1.82
2024-01-25 19:56:12,154 [websockets.py:_handle_identify()] - Websocket 548153008144 Client Identified - Name: mainsail, Version: 2.9.1, Type: web


c'est mieux comme ca

Il y a 19 heures, pommeverte a dit :

Salut,

C'est une erreur de saisie de ma part. 🥴

non. Ton fichier est dans /home/loic et non dans /home/pi

c'est ce que j'ai fais 

Capturedaz.PNG

sinon je peut mettre octoprint

Modifié (le) par fran6p
Lien vers le commentaire
Partager sur d’autres sites

il y a 46 minutes, darkness a dit :

c'est mieux comme ca

Heuuuu pas vraiment, puisque:

Le 23/01/2024 at 19:17, fran6p a dit :

J'ai édité ton post pour placer le journal dans une balise citation. Why? Sinon c'est indigeste et ne facilite pas la lecture.

tu aurais dû insérer ton texte dans une citation (icône guillemets) ou que tu fournisses les fichiers printer.cfg et .log en pièces jointes (moins pratique pour lire directement 🥴).

Tu as de la chance, il te reste 11h pour éditer ton précédent message ( icône "..." en haut à droite du message puis sur Editer) et faire la modif.

il y a 46 minutes, darkness a dit :

c'est ce que j'ai fait

quoi? appliqué la technique de la terre brûlée 😲. Tu as tout supprimé 🥴 alors qu'il suffisait simplement de remplacer pi par loic dans les chemins:

[virtual_sdcard]
path = /home/pi/printer_data/gcodes/

[save_variables]
filename = /home/pi/printer_data/config/variables.cfg

 

Modifié (le) par pommeverte
  • Haha 1
Lien vers le commentaire
Partager sur d’autres sites

Il y a 9 heures, darkness a dit :

sinon je peut mettre octoprint

ce qui ne changera rien ... à ton problème

dans le fichier printer.cfg les # indiquent que la ligne est en commentaire ... donc qu'elle ne sera pas utilisée

donc tu doit mettre 

[virtual_sdcard]
path:  /home/loic/printer_data/gcodes/

[save_variables]
filename: /home/loic/printer_data/config/variables.cfg

  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

Il y a 18 heures, darkness a dit :

ok je te fais ca 

Oui

Il y a 18 heures, darkness a dit :

c'est mieux comme ca

Non. Là c'est «mal» 😱

Pour d'aussi longs pavés de textes, soit tu fais comme j'ai fait en éditant ton post pour inclure le contenu des journaux dans un bloc citation, soit tu joins les journaux en PJ avec le post (en les renommant (ajout / remplacement de l'extension .log par .txt) sinon c'est illisible tel quel (et pour ma part, ça ne me donne pas envie d'intervenir).

🙂

Lien vers le commentaire
Partager sur d’autres sites

il y a 10 minutes, darkness a dit :

merci d'avoir pris le temps de me répondre 

mais est-ce que ça fonctionne ?

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
  • Sur cette page :   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
  • YouTube / Les Imprimantes 3D .fr

×
×
  • Créer...