#####################################################################
#    User Variables
#####################################################################
[gcode_macro _USER_VARIABLE]
description: Helper: Contains User defined printer variables
##### Homing and general movement #####
variable_z_endstop_x: 94.5            ; z Endstop x position inside right profile
variable_z_endstop_y: 309             ; z Endstop y position
variable_z_hop: 12                    ; z hop for moves e.g homing
variable_xy_home_current: 0.5         ; reduced homing current for x and y
variable_z_home_current: 0.4          ; reduced homing current for z
variable_home_accel: 1000             ; reduced ACCEL for homing
##### Mag Probe #####
variable_probe_dock_x: 53             ; x toolhead position before docking probe
variable_probe_dock_y: 250            ; y toolhead position before docking probe
variable_probe_dock_z: 12             ; z toolhead position before docking probe (only for bed dock)
variable_probe_undock_x: 110          ; x toolhead position after docking probe
variable_probe_undock_y: 309          ; y toolhead position after docking probe
variable_probe_undock_z: 12           ; z toolhead position after docking probe (only for bed dock)
variable_probe_z_min: 12              ; z minimum height to avoid crash
variable_probe_travel_speed: 100      ; dock moves travel speed
variable_probe_dock_speed: 100        ; dock speed for attach/dock
##### Respond defaults #####
variable_respond_set_current: 0       ; default of RESPOND if not set in the call
variable_respond_set_acc: 0           ; default of RESPOND if not set in the call
variable_respond_probe_action: 1      ; default of RESPOND if not set in the call
##### Park Position #####
variable_park_bed: [280,280,30]       ; different park position
gcode:


#####################################################################
#    Z Calibration
#####################################################################
[z_calibration]
#   The X and Y coordinates (in mm) for clicking the nozzle on the
#   Z endstop.
probe_nozzle_x: 94.5
probe_nozzle_y: 309
#   The X and Y coordinates (in mm) for clicking the probe's switch
#   on the Z endstop.
probe_switch_x: 90
probe_switch_y: 290
#   The X and Y coordinates (in mm) for probing on the print surface
#   (e.g. the center point) These coordinates will be adapted by the
#   probe's X and Y offsets. The default is the relative_reference_index
#   of the configured bed_mesh. It will raise an error if there is no
#   probe_bed site and no bed_mesh with a relative_reference_index
#   configured.
probe_bed_x: 150
probe_bed_y: 150
#   The trigger point offset of the used mag-probe switch.
#   This needs to be fined out manually. More on this later
#   in this section. smaller switch_offset -> more distance to  the build plate
switch_offset: 0.55
#   The maximum allowed deviation of the calculated offset.
#   If the offset exceeds this value, it will stop!
#   The default is 1.0 mm.
max_deviation: 1.0
#   The number of times to probe each point. The probed z-values
#   will be averaged. The default is from the probe's configuration.
#samples: default from "probe:samples" section
#   The maximum Z distance (in mm) that a sample may differ from other
#   samples. The default is from the probe's configuration.
#samples_tolerance: default from "probe:samples_tolerance" section
#   The number of times to retry if a sample is found that exceeds
#   samples_tolerance. The default is from the probe's configuration.
#samples_tolerance_retries: default from "probe:samples_tolerance_retries" section
#   The calculation method when sampling more than once - either
#   "median" or "average". The default is from the probe's configuration.
#samples_result: default from "probe:samples_result" section
#   The distance in mm to move up before moving to the next
#   position. The default is two times the z_offset from the probe's
#   configuration.
#position_min: default from "stepper_z:position_min" section.
#   Extra clearance when moving
clearance: 12
#   The moving speed in X and Y. The default is 50 mm/s.
speed: 100
#   Speed (in mm/s) of the Z axis when lifting the probe between
#   samples and clearance moves. The default is from the probe's
#   configuration.
#lift_speed: default from "probe:lift_speed" section
#   The fast probing speed (in mm/s) used, when probing_first_fast
#   is activated. The default is from the Z rail configuration.
#probing_speed: default from "stepper_z:homing_speed" section.
#   The slower speed (in mm/s) for probing the recorded samples.
#   The default is second_homing_speed of the Z rail configuration.
#probing_second_speed: default from "stepper_z:second_homing_speed" section.
#   Distance to back off (in mm) before probing the next sample.
#   The default is homing_retract_dist from the Z rail configuration.
#probing_retract_dist: default from "stepper_z:homing_retract_dist" section.
#   If true, the first probing is done faster by the probing speed.
#   This is to get faster down and the result is not recorded as a
#   probing sample. The default is false.
probing_first_fast: true
#   A list of G-Code commands to execute prior to each calibration command.
#   See docs/Command_Templates.md for G-Code format.
#   This can be used to attach the probe.
start_gcode: ATTACH_PROBE
#   A list of G-Code commands to execute prior to each probing on the
#   mag-probe. See docs/Command_Templates.md for G-Code format.
#   This can be used to attach the probe after probing on the nozzle and
#   before probing on the mag-probe.
before_switch_gcode: ATTACH_PROBE
#   A list of G-Code commands to execute after each calibration command.
#   See docs/Command_Templates.md for G-Code format. This can be used to
#   detach the probe afterwards.
end_gcode: DETACH_PROBE


#####################################################################
#    Homing definition
#####################################################################
[homing_override]
axes: z
set_position_z: 0
gcode:
  ##### get user defines #####
  # use -10 as default to insure it error in case the variable is not existing
  {% set z_endstop_x = printer['gcode_macro _USER_VARIABLE'].z_endstop_x|default(-10) %}
  {% set z_endstop_y = printer['gcode_macro _USER_VARIABLE'].z_endstop_y|default(-10) %}
  {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop %}
  ##### end of definitions #####
  SAVE_GCODE_STATE NAME=HOMING_state

  ## reduce current of Z motors
  _SET_ACC VAL=HOME
  _SET_CURRENT VAL=HOME

  G91                           ; relative positioning
  G0 Z10 F1500                  ; move z 10 up
  G90                           ; absolute positioning

  # Home X and Y only for G28 or G28 XYZ
  {% if 'Z' in params %}
    {% if "x" not in printer.toolhead.homed_axes %}
      G28 X
    {% endif %}
    {% if "y" not in printer.toolhead.homed_axes %}
      G28 Y
    {% endif %}
  {% else %}
    G28 X Y
  {% endif %}

  ## XY Location of the Z Endstop Switch
  G0 X{z_endstop_x} Y{z_endstop_y} F6000
  G28 Z                         ; home Z
  G0 Z3 F1500                   ; move up

  ## return to org current settings
  {% if params.RESET_SETTINGS|default('true') == 'true' %}
    DETACH_PROBE
    _SET_CURRENT
    _SET_ACC
  {% endif %}

  # Lift Z
  # TODO check speed
  # G0 Z{z_hop} F1800
  G0 Z{z_hop} F1300

  RESTORE_GCODE_STATE NAME=HOMING_state