Feat: Add group categories to all macros for Mainsail/Fluidd UI

Calibration macros (calibration/*.cfg):
- All calibration macros grouped under 'Calibration'

Printing macros (user_settings_clean.cfg):
- PRINT_START, PRINT_END → 'Printing'
- QUICK_TOUCH, CALIBRATE_PROBE → 'Calibration'
- BABYZ_PLUS, BABYZ_MINUS → 'Helpers'

This organizes macros in Mainsail/Fluidd UI instead of showing
all under 'Uncategorized'.
This commit is contained in:
root 2026-03-13 11:20:53 +00:00
parent 63f6aff25f
commit 651f4cb7eb
4 changed files with 125 additions and 279 deletions

View file

@ -11,6 +11,7 @@
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATION_MENU]
description: Show calibration menu with all options
group: Calibration
gcode:
RESPOND MSG="=============================================="
RESPOND MSG=" NEPTUNE 4 PLUS CALIBRATION SUITE"
@ -33,6 +34,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_Z_OFFSET]
description: Calibrate Z-offset using Cartographer touch
group: Calibration
gcode:
RESPOND MSG="Starting Z-Offset Calibration..."
RESPOND MSG=""
@ -62,6 +64,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_INPUT_SHAPER]
description: Measure resonance frequencies with ADXL345
group: Calibration
gcode:
RESPOND MSG="Starting Input Shaper Calibration..."
RESPOND MSG=""
@ -84,6 +87,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_PRESSURE_ADVANCE]
description: Calibrate Pressure Advance for optimal corners
group: Calibration
gcode:
{% set FILAMENT = params.FILAMENT|default("PLA")|upper %}
{% set START_PA = params.START|default(0.01)|float %}
@ -139,6 +143,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_FLOW_RATE]
description: Calibrate flow rate for exact wall dimensions
group: Calibration
gcode:
{% set FILAMENT = params.FILAMENT|default("PLA")|upper %}
@ -190,6 +195,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_TEMPERATURE]
description: Print temperature tower to find optimal temp
group: Calibration
gcode:
{% set FILAMENT = params.FILAMENT|default("PLA")|upper %}
{% set START_TEMP = params.START|default(195)|int %}
@ -234,6 +240,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_RETRACTION]
description: Test retraction settings to minimize stringing
group: Calibration
gcode:
{% set FILAMENT = params.FILAMENT|default("PLA")|upper %}
{% set HOTEND = params.HOTEND|default("ORIGINAL")|upper %}
@ -296,6 +303,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATE_BED_MESH]
description: Calibrate bed mesh with Cartographer
group: Calibration
gcode:
RESPOND MSG="Starting Bed Mesh Calibration..."
RESPOND MSG=""
@ -322,6 +330,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATION_FULL]
description: Run complete calibration suite (takes ~2.5 hours)
group: Calibration
gcode:
RESPOND MSG="=============================================="
RESPOND MSG=" STARTING FULL CALIBRATION SUITE"
@ -381,6 +390,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro CALIBRATION_QUICK]
description: Run quick calibration (Z-offset + PA + Bed Mesh, ~30 min)
group: Calibration
gcode:
RESPOND MSG="=============================================="
RESPOND MSG=" STARTING QUICK CALIBRATION"

View file

@ -9,6 +9,7 @@
# ----------------------------------------------------------------------------
[gcode_macro PA_TEST_PATTERN]
description: Print Pressure Advance test pattern
group: Calibration
gcode:
{% set START_PA = params.START|default(0.01)|float %}
{% set END_PA = params.END|default(0.05)|float %}
@ -66,6 +67,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro FLOW_TEST_CUBE]
description: Print flow rate calibration cube
group: Calibration
gcode:
{% set START_FLOW = params.START|default(0.90)|float %}
{% set END_FLOW = params.END|default(1.10)|float %}
@ -135,6 +137,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro RETRACT_TEST_PATTERN]
description: Print retraction test pattern
group: Calibration
gcode:
{% set START_RETRACT = params.START|default(1.0)|float %}
{% set END_RETRACT = params.END|default(4.0)|float %}
@ -210,6 +213,7 @@ gcode:
# ----------------------------------------------------------------------------
[gcode_macro TEMP_TOWER]
description: Print temperature tower
group: Calibration
gcode:
{% set START_TEMP = params.START|default(195)|int %}
{% set END_TEMP = params.END|default(225)|int %}

View file

@ -1,58 +1,39 @@
# ============================================================================
# USER SETTINGS - Neptune 4 Plus with Cartographer 3D
# ============================================================================
# Includes are loaded in order - later includes override earlier ones
# Optimized for Bambu Lab Hotend (23 mm³/s) & Original Hotend (15 mm³/s)
# ============================================================================
[include KNCM_settings.cfg] # Nozzle cleaning macros
[include calibration/*.cfg] # Calibration suite (Z-offset, PA, etc.)
[include KNCM_settings.cfg]
[include open4neptune-new/calibration/*.cfg]
[skew_correction]
#[probe]
#pin:^PA11
#x_offset: -24.25
#y_offset: 20.45
#z_offset = 0.0
#speed: 6.0
#samples: 3
#samples_result: median
#sample_retract_dist: 3.0
#samples_tolerance: 0.025
#samples_tolerance_retries: 3
#[resonance_tester]
#accel_chip_x: adxl345 x
#accel_chip_y: adxl345 y
#max_smoothing: 0.15
#probe_points:
# 162.5, 162.5, 20
# ============================================================================
# CARTOGRAPHER 3D PROBE CONFIGURATION
# ============================================================================
[stepper_z]
endstop_pin: probe:z_virtual_endstop
homing_retract_dist: 0
[mcu cartographer] # See https://www.klipper3d.org/Config_Reference.html#mcu
# Remove either the serial or canbus_uuid line dependant on your setup.
serial: /dev/serial/by-id/usb-Cartographer_614e_0A0002000643303459323220-if00
#canbus_uuid: <blank>
#restart_method: command # Not needed for probes using CAN.
[mcu cartographer]
serial: /dev/serial/by-id/usb-Cartographer_614e_0A0002000643303459323220-if00
[cartographer]
mcu: cartographer
x_offset: 0 # This is the offset of your probe from the nozzle tip, to the centre of the coil.
y_offset: 22 # This is the offset of your probe from the nozzle tip, to the centre of the coil.
verbose: no # For extra output
x_offset: 0
y_offset: 22
verbose: no
[bed_mesh]
zero_reference_position: 165, 165 # The centre of your bed.
zero_reference_position: 165, 165
speed: 300
horizontal_move_z: 3
mesh_min: 10, 21 # The first probed coordinate, nearest to the origin. This coordinate is relative to the probe's location.
mesh_max: 300.75, 315.45 # The probed coordinate farthest from the origin. This is not necessarily the last point probed, as the probing process occurs in a zig-zag fashion. As with mesh_min, this coordinate is relative to the probe's location.
mesh_min: 10, 21
mesh_max: 300.75, 315.45
probe_count: 20, 20
adaptive_margin: 10
mesh_pps: 0,0 # Disable interpolation - mesh is probably dense enough
mesh_pps: 0,0
[temperature_sensor cartographer]
sensor_type: temperature_mcu
@ -61,102 +42,59 @@ min_temp: 5
max_temp: 105
[adxl345]
# Select 1 of the cs_pin below depending on the probe you have.
# Having the wrong one selected will cause an Endless Bootloop
# Cartographer V4 has int2 connected to the probes PA1 pin
cs_pin: cartographer:PA3 # For Cartographer V3
#cs_pin: cartographer:PA0 # For Cartographer V4
cs_pin: cartographer:PA3
spi_bus: spi1
[resonance_tester]
accel_chip: adxl345
probe_points:
165, 165, 20 # Fill out the blank with x and y coordinates where you want to run the resonance test.
#[scanner]
#serial: /dev/serial/by-id/usb-Cartographer_614e_0A0002000643303459323220-if00
# Offsets are measured from the centre of your coil, to the tip of your nozzle
# on a level axis. It is vital that this is accurate.
#x_offset: 0
# adjust for your cartographers offset from nozzle to middle of coil
#y_offset: 22
# adjust for your cartographers offset from nozzle to middle of coil
##
#backlash_comp: 0.01346
# Backlash compensation distance for removing Z backlash before measuring
# the sensor response.
#sensor: cartographer
# this must be set as cartographer unless using IDM etc.
#sensor_alt: carto
# alternate name to call commands. CARTO_TOUCH etc
#mesh_runs: 2
# Number of passes to make during mesh scan.
165, 165, 20
# ============================================================================
# FILAMENT SENSORS
# ============================================================================
[filament_switch_sensor filament_sensor]
pause_on_runout: True
#insert_gcode:
# M117 Insert Detected
runout_gcode:
{action_respond_info("FILAMENT SENSOR TRIGGERED")}
M117 Runout Detected
## The minimum amount of time in seconds to delay between events.
## Events triggered during this time period will be silently
## ignored. The default is 3 seconds.
event_delay: 5.0
## The amount of time to delay, in seconds, between the pause command
## dispatch and execution of the runout_gcode. It may be useful to
## increase this delay if OctoPrint exhibits strange pause behavior.
## Default is 0.5 seconds.
pause_delay: 1.5
switch_pin: PA12
[filament_motion_sensor filament_motion]
switch_pin: PC1
detection_length: 8.00 # Supports down to 2.88
detection_length: 8.00
extruder: extruder
pause_on_runout: False
## The minimum amount of time in seconds to delay between events.
## Events triggered during this time period will be silently
## ignored. The default is 3 seconds.
event_delay: 5.0
## The amount of time to delay, in seconds, between the pause command
## dispatch and execution of the runout_gcode. It may be useful to
## increase this delay if OctoPrint exhibits strange pause behavior.
## Default is 0.5 seconds.
pause_delay: 2.0
runout_gcode:
{action_respond_info("FILAMENT MOTION TRIGGERED")}
M117 Runout Detected
# ============================================================================
# PRINT START MACRO - Optimized with Cartographer
# ============================================================================
## ---------------------------------------------------------------------------- ##
## PRINT_START MACRO ##
## ---------------------------------------------------------------------------- ##
## Start print gcode defined here. In slicer, use only the following lines for start gcode:
## in slicer, use only the following lines for start gcode:
## PrusaSlicer: ## PRINT_START EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]
## OrcaSlicer: ## PRINT_START EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]
## SuperSlicer: ## PRINT_START EXTRUDER_TEMP={first_layer_temperature[initial_extruder]+extruder_temperature_offset[initial_extruder]} BED_TEMP=[first_layer_bed_temperature]
## Cura: ## PRINT_START EXTRUDER_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0}
[gcode_macro PRINT_START_NOCCI]
[gcode_macro PRINT_START]
group: Printing
gcode:
#--- Setup & Reset ---
M117 Setting up parameters...
RESPOND MSG="Starting Print Sequence..."
SET_GCODE_OFFSET Z=0 ; ⭐ NEW: Reset Z-Offset for Cartographer
SET_GCODE_OFFSET Z=0
G92 E0
G90 ; Absolute positioning
G90
BED_MESH_CLEAR
Frame_Light_ON
Part_Light_ON
#--- Home with Cartographer ---
CG28 ; ⭐ CHANGE: G28 → CG28 (Open4Neptune smart home)
CARTOGRAPHER_TOUCH_HOME ; ⭐ NEW: Precise Z0 measurement with Cartographer
CG28
CARTOGRAPHER_TOUCH_HOME
#--- Parameters ---
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
@ -164,7 +102,7 @@ gcode:
{% set FILAMENT_TYPE = params.FILAMENT_TYPE|default("PLA")|upper %}
#--- Pre-Heat ---
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=160 ; No-drip pre-heat
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=160
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={BED_TEMP}
#--- Wait for Bed & Mesh ---
@ -177,8 +115,8 @@ gcode:
#--- Final Heat ---
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={EXTRUDER_TEMP}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={EXTRUDER_TEMP-2} MAXIMUM={EXTRUDER_TEMP+2} ; ⭐ TIGHTER: ±2°C
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={BED_TEMP-2} MAXIMUM={BED_TEMP+2} ; ⭐ TIGHTER: ±2°C
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={EXTRUDER_TEMP-2} MAXIMUM={EXTRUDER_TEMP+2}
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={BED_TEMP-2} MAXIMUM={BED_TEMP+2}
#--- Prime & Start ---
SMART_PARK
@ -191,107 +129,43 @@ gcode:
M117 Printer goes brrbrrr...:)
RESPOND MSG="Print starting..."
## ---------------------------------------------------------------------------- ##
## PRINT_END MACRO ##
## ---------------------------------------------------------------------------- ##
# ============================================================================
# PRINT END MACRO - Optimized
# ============================================================================
## End print gcode defined here. In slicer, use only the following lines for start gcode:
## PrusaSlicer/OrcaSlicer/SuperSlicer: PRINT_END
## Cura: PRINT_END
[gcode_macro PRINT_END_NOCCI]
description: Optimized PRINT_END with better user feedback
[gcode_macro PRINT_END]
group: Printing
gcode:
M117 Finishing print... ; LCD message
M117 Finishing print...
RESPOND MSG="Print completed! Finishing up..."
M400 ; Wait for buffer to clear
TURN_OFF_HEATERS ; Turn off all heaters
G92 E0 ; Reset extruder
G91 ; Relative positioning
G1 E-2 F2700 ; Retract filament
G1 X5 Y5 F3000 ; Wipe nozzle
G1 E-2 Z0.2 F1600 ; Retract and lift Z
G1 Z10 F3000 ; Raise Z more (total ~10mm)
G90 ; Absolute positioning
G1 X0 Y315 F3000 ; Present print (Neptune 4 Plus)
M107 ; Turn off part fan
Frame_Light_OFF ; Turn off frame light
Part_Light_OFF ; Turn off part light
M400
TURN_OFF_HEATERS
G92 E0
G91
G1 E-2 F2700
G1 X5 Y5 F3000
G1 E-2 Z0.2 F1600
G1 Z10 F3000
G90
G1 X0 Y315 F3000
M107
Frame_Light_OFF
Part_Light_OFF
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
SET_FILAMENT_SENSOR SENSOR=filament_motion ENABLE=0
M84 ; Disable all steppers
END_TUNE ; Play completion jingle
M117 Done! Have a nice day! :) ; Final LCD message
M84
END_TUNE
M117 Done! Have a nice day! :)
RESPOND MSG="Print complete! You can remove your print now."
#######################################################################
## Start Macro
#######################################################################
#######################################################################
## Clean Nozzle
#######################################################################
[gcode_macro CLEAN_NOZZLE_OLD]
gcode:
{% set LOWERED_EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|int-30 %}
{% set WIPES = params.WIPES|default(10)|int %}
#Position the nozzle
G90
G0 X-10 Y20 Z10 F5000
#Heat up nozzle to extruder temperature - 40°C
{action_respond_info("Clean nozzle: Heating up to {}°C the do {} wipes.".format(
(LOWERED_EXTRUDER_TEMP),
(WIPES)
))}
M109 S{LOWERED_EXTRUDER_TEMP}
#Bring the nozzle down
G0 Z4
#Swing the nozzle
{% for wipe in range(WIPES) %}
G0 Y5 F3000
G0 Y35 F3000
{% endfor %}
#Bring the nozzle up
G0 X-10 Y20 Z10 F5000
# Home to get the correct offset
# G28
[gcode_macro CLEAN_NOZZLE_WHILE_PRINT]
gcode:
{% set LOWERED_EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(240)|int-40 %}
{% set WIPES = params.WIPES|default(10)|int %}
#Position the nozzle
G90
G0 X-10 Y20 Z10 F5000
#Heat up nozzle to extruder temperature - 40°C
{action_respond_info("Clean nozzle: Heating up to {}°C the do {} wipes.".format(
(LOWERED_EXTRUDER_TEMP),
(WIPES)
))}
M109 S{LOWERED_EXTRUDER_TEMP}
#Bring the nozzle down
G0 Z4
#Swing the nozzle
{% for wipe in range(WIPES) %}
G0 Y5 F3000
G0 Y35 F3000
{% endfor %}
#Bring the nozzle up
G0 X-10 Y20 Z10 F5000
# Home to get the correct offset
# G28
#### CUSTOM END
#[gcode_macro update_git]
#gcode:
# RUN_SHELL_COMMAND CMD=update_git_script
#[gcode_shell_command update_git_script]
#command: bash -c "bash $HOME/klipper-backup/script.sh"
#timeout: 90.0
# ============================================================================
# HELPER MACROS
# ============================================================================
[gcode_macro QUICK_TOUCH]
description: Führt eine schnelle Z-Messung per Touch durch
description: Quick Z measurement with Cartographer
group: Calibration
gcode:
{% if printer.toolhead.homed_axes != "xyz" %}
G28
@ -299,99 +173,73 @@ gcode:
G1 Z10 F600
CARTOGRAPHER_TOUCH
[gcode_macro CALIBRATE_PROBE]
description: Startet die manuelle Z-Offset Kalibrierung
description: Manual Z-offset calibration
group: Calibration
gcode:
{% if printer.toolhead.homed_axes != "xyz" %}
G28 # Homed, falls noch nicht geschehen
G28
{% endif %}
G1 X{printer.toolhead.axis_maximum.x / 2} Y{printer.toolhead.axis_maximum.y / 2} Z10 F6000
CARTOGRAPHER_CALIBRATE
[gcode_macro BABYZ_PLUS]
group: Helpers
gcode:
SET_GCODE_OFFSET Z_ADJUST=0.005 MOVE=1
[gcode_macro BABYZ_MINUS]
group: Helpers
gcode:
SET_GCODE_OFFSET Z_ADJUST=-0.005 MOVE=1
# ============================================================================
# FAN CONFIGURATION
# ============================================================================
[controller_fan heatbreak+mainboard_fan]
fan_speed: 0.40
idle_speed: 0.40
cycle_time: 0.00004
# ============================================================================
# STEPPER DRIVERS
# ============================================================================
[tmc2209 stepper_x]
driver_SGTHRS: 110
# ============================================================================
# SAFE Z HOME
# ============================================================================
[safe_z_home]
home_xy_position: 165,165
# Example home_xy_position: 175,175 - This would be for a 350 * 350mm bed.
z_hop: 10
# ============================================================================
# SKEW CORRECTION
# ============================================================================
[skew_correction noccis_skew_profile]
xy_skew = 0.00100050075747056
xz_skew = 0.0
yz_skew = 0.0
#[temperature_sensor cartographer]
#sensor_type: temperature_mcu
#sensor_mcu: cartographer
#min_temp: 5
#max_temp: 105
[bed_mesh]
zero_reference_position: 165.00,165.00
[stepper_z]
endstop_pin: probe:z_virtual_endstop # use cartographer as virtual endstop
homing_retract_dist: 0 # cartographer needs this to be set to 0
[bed_mesh]
zero_reference_position: 162.5 ,162.5
# set this to the middle of your bed
speed: 200
# movement speed of toolhead during bed mesh
horizontal_move_z: 5
# height of scanner during bed mesh scan
mesh_min: 35, 6
# start point of bed mesh [X, Y]
mesh_max: 240, 198
# end point of bed mesh [X, Y]
probe_count: 30, 30
algorithm: bicubic
[gcode_macro PROBE_CALIBRATE]
gcode:
CARTOGRAPHER_CALIBRATE
#[mcu scanner]
#serial: //dev/serial/by-id/usb-Cartographer_614e_0A0002000643303459323220-if00
# adjust to suit your scanner, if using usb change to serial
#[temperature_sensor Cartographer_MCU]
#sensor_type: temperature_mcu
#sensor_mcu: scanner
#min_temp: 0
#max_temp: 105
[force_move]
enable_force_move: True
#[adxl345]
#cs_pin: scanner:PA3
#spi_bus: spi1
[resonance_tester]
accel_chip: adxl345
probe_points:
165.2, 165.2, 20
# ============================================================================
# SCREWS TILT ADJUST (for manual bed leveling)
# ============================================================================
[screws_tilt_adjust]
screw1: 165.0,189.55
screw1_name: middle-rear bed mount (shim adjust)
screw2: 165.0,99.55
screw2_name: middle-front bed mount (shim adjust)
screw3: 32.50,277.05
screw3: 32.50,277.05
screw3_name: rear left screw
screw4: 32.50,144.55
screw4: 32.50,144.55
screw4_name: center left screw
screw5: 32.50,12.05
screw5: 32.50,12.05
screw5_name: front left screw
screw6: 288.5,12.05
screw6_name: front right screw
@ -403,35 +251,13 @@ horizontal_move_z: 5
speed: 150
screw_thread: CW-M4
[gcode_macro BABYZ_PLUS]
# Babystep Up .05
gcode:
SET_GCODE_OFFSET Z_ADJUST=0.005 MOVE=1
# ============================================================================
# FORCE MOVE (for manual adjustments)
# ============================================================================
[gcode_macro BABYZ_MINUS]
# Babystep Down .05
gcode:
SET_GCODE_OFFSET Z_ADJUST=-0.005 MOVE=1
[force_move]
enable_force_move: True
#############################################################################
# OLD Probe Config
#############################################################################
#[probe]
#pin:^PA11
#x_offset: -24.25
#y_offset: 20.45
#z_offset = 1.660
#speed: 10.0
#samples: 2
#samples_result: average
#sample_retract_dist: 3.0
#samples_tolerance: 0.025
#samples_tolerance_retries: 3
[skew_correction noccis_skew_profile]
xy_skew = 0.00100050075747056
xz_skew = 0.0
yz_skew = 0.0
# ============================================================================
# END OF USER SETTINGS
# ============================================================================

View file

@ -79,6 +79,7 @@ runout_gcode:
# ============================================================================
[gcode_macro PRINT_START]
group: Printing
gcode:
#--- Setup & Reset ---
M117 Setting up parameters...
@ -133,6 +134,7 @@ gcode:
# ============================================================================
[gcode_macro PRINT_END]
group: Printing
gcode:
M117 Finishing print...
RESPOND MSG="Print completed! Finishing up..."
@ -163,6 +165,7 @@ gcode:
[gcode_macro QUICK_TOUCH]
description: Quick Z measurement with Cartographer
group: Calibration
gcode:
{% if printer.toolhead.homed_axes != "xyz" %}
G28
@ -172,6 +175,7 @@ gcode:
[gcode_macro CALIBRATE_PROBE]
description: Manual Z-offset calibration
group: Calibration
gcode:
{% if printer.toolhead.homed_axes != "xyz" %}
G28
@ -180,10 +184,12 @@ gcode:
CARTOGRAPHER_CALIBRATE
[gcode_macro BABYZ_PLUS]
group: Helpers
gcode:
SET_GCODE_OFFSET Z_ADJUST=0.005 MOVE=1
[gcode_macro BABYZ_MINUS]
group: Helpers
gcode:
SET_GCODE_OFFSET Z_ADJUST=-0.005 MOVE=1