Homing your printer systematically before a print is redundant, a waste of time and sometimes even an issue (if your homing probe is misbehaving and you’ve already dialed an offset by need to restart the print for a clean first layer for instance) I recently came upon this G28 macro that only homes of the printed is not already homed.
[gcode_macro G28]
# Only home if needed.
rename_existing: G28.1
gcode:
{% if PA %}
G28.1 {PA}
{% else %}
{% if printer.toolhead.homed_axes != "xyz" %}
G28.1
{% endif %}
{% endif %}
All you have to do is add this to your macro.cfg file and it will override any G28 command from any gcode and only execute a home if needed.
If you want to execute a home even if not needed, you can send the command G28.1
or give it a parameter, like G28 X
, or G28 XYZ
and it will force the homing
Yup, I got this set up when my BLTouch mount broke and I had to zip tie it to the print head resulting in less-than-perfect repeatability. Changing the default G28 command is a good way to do it, I did it by making a new macro CG28 and put that in my START_PRINT macro in place of G28.