Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 37 additions & 11 deletions configuration/macros/heatsoaking.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -33,26 +33,37 @@ gcode:
{% if settings is not defined %}
{ action_raise_error("No settings found for [gcode_macro RatOS]") }
{% endif %}
{% set defsrc = params.DEFAULT|default(printer["gcode_macro HEATSOAK_SETTINGS"].default_source)|lower %}
{% set current = printer["gcode_macro RatOS"] %}
{% if not defsrc in ('startup', 'current') %}
{ action_raise_error("DEFAULT must be either 'startup' or 'current'.") }
{% endif %}
{% set default_quality = (settings.variable_beacon_adaptive_heat_soak_layer_quality if defsrc == 'startup' else current.beacon_adaptive_heat_soak_layer_quality)|default(3)|int %}
{% set default_first_layer_duration_secs = (settings.variable_beacon_adaptive_heat_soak_maximum_first_layer_duration if defsrc == 'startup' else current.beacon_adaptive_heat_soak_maximum_first_layer_duration)|default(1800)|int %}
{% if params.QUALITY is defined %}
{% set quality = params.QUALITY|int %}
{% if quality < 1 or quality > 5 %}
{ action_raise_error("QUALITY must be between 1 (rough) and 5 (maximum). Use 3 (normal) if unsure.") }
{% endif %}
{% else %}
{% set quality = settings.variable_beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set quality = default_quality %}
{% endif %}
{% if params.FIRST_LAYER_DURATION is defined %}
{% set first_layer_duration_mins = params.FIRST_LAYER_DURATION|float %}
{% if first_layer_duration_mins <= 0 %}
{ action_raise_error("FIRST_LAYER_DURATION must be a positive number specifying the maximum first layer duration in minutes.") }
{% endif %}
{% if first_layer_duration_mins > 120 %}
CONSOLE_ECHO MSG="FIRST_LAYER_DURATION will be limited to 120 minutes. Values larger than this will not have an effect on soak time."
{% set first_layer_duration_mins = 120 %}
{% endif %}
{% set first_layer_duration_secs = (first_layer_duration_mins * 60.0)|int %}
{% else %}
{% set first_layer_duration_secs = settings.variable_beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set first_layer_duration_mins = (first_layer_duration_secs / 60.0)|round(2) %}
{% set first_layer_duration_secs = default_first_layer_duration_secs %}
{% set first_layer_duration_mins = first_layer_duration_secs / 60.0 %}
{% endif %}
HEATSOAK_SETTINGS QUIET=1 beacon_adaptive_heat_soak=True beacon_adaptive_heat_soak_layer_quality={quality} beacon_adaptive_heat_soak_maximum_first_layer_duration={first_layer_duration_secs}
RATOS_ECHO MSG="Will use adaptive bed heatsoak with quality {quality} and maximum first layer duration of {"%.2g"|format(first_layer_duration_mins)} minutes."
RATOS_ECHO MSG="Will use adaptive bed heatsoak with quality {quality} and maximum first layer duration of {first_layer_duration_mins|int if (first_layer_duration_mins|float).is_integer() else first_layer_duration_mins|round(2)} minutes."

[gcode_macro USE_FIXED_HEATSOAK]
description: Temporarily enables fixed bed heatsoaking, will reset to printer.cfg settings when Klipper is restarted.
Expand All @@ -62,15 +73,25 @@ gcode:
{% if settings is not defined %}
{ action_raise_error("No settings found for [gcode_macro RatOS]") }
{% endif %}
{% set defsrc = params.DEFAULT|default(printer["gcode_macro HEATSOAK_SETTINGS"].default_source)|lower %}
{% set current = printer["gcode_macro RatOS"] %}
{% if not defsrc in ('startup', 'current') %}
{ action_raise_error("DEFAULT must be either 'startup' or 'current'.") }
{% endif %}
{% set default_duration = (settings.variable_bed_heat_soak_time if defsrc == 'startup' else current.bed_heat_soak_time)|default(0)|int %}
{% if params.DURATION is defined %}
{% set duration_mins = params.DURATION|float %}
{% if duration_mins < 0 %}
{ action_raise_error("DURATION must be a non-negative number specifying the heatsoak duration in minutes.") }
{% endif %}
{% if duration_mins > 720 %}
CONSOLE_ECHO MSG="DURATION will be limited to 720 minutes (12 hours). If you really need a larger value, adjust printer.cfg instead."
{% set duration_mins = 720 %}
{% endif %}
{% set duration_secs = (duration_mins * 60.0)|int %}
{% else %}
{% set duration_secs = settings.variable_bed_heat_soak_time|default(0)|int %}
{% set duration_mins = (duration_secs / 60.0)|round(2) %}
{% set duration_secs = default_duration %}
{% set duration_mins = duration_secs / 60.0 %}
{% endif %}
{% set has_beacon = printer.fastconfig.settings.beacon is defined %}
{% if has_beacon %}
Expand All @@ -81,7 +102,7 @@ gcode:
{% if duration_mins < 1e-3 %}
RATOS_ECHO MSG="Will use no bed heatsoak."
{% else %}
RATOS_ECHO MSG="Will use fixed-duration bed heatsoak of {"%.2g"|format(duration_mins)} minutes."
RATOS_ECHO MSG="Will use fixed-duration bed heatsoak of {duration_mins|int if (duration_mins|float).is_integer() else duration_mins|round(2)} minutes."
{% endif %}

[gcode_macro USE_NO_HEATSOAK]
Expand All @@ -93,6 +114,11 @@ gcode:
description: Shows or adjusts heatsoak settings
- With no arguments: shows current heatsoak settings, specify VERBOSE=1 for detailed output
- With arguments: sets the specified settings. Use the full setting name without the variable_ prefix, e.g. bed_heat_soak_time=300 or beacon_adaptive_heat_soak_layer_quality=4. See printer.cfg for available settings.
variable_default_source: "startup"
# "startup" or "current", determines where default values are taken from when using the USE_ADAPTIVE_HEATSOAK and
# USE_FIXED_HEATSOAK commands. This can be overridden per call using the DEFAULT parameter with those commands.
# "startup" will use the original printer.cfg values from when Klipper was started, while "current"
# will use the current values which may have been modified by previous commands.
gcode:
# Avoid unwanted param detection by mainsail: uses of params2 won't be noticed.
{% set params2 = params %}
Expand Down Expand Up @@ -139,11 +165,11 @@ gcode:
{% if is_adaptive %}
{% set quality = current.beacon_adaptive_heat_soak_layer_quality|default(3)|int %}
{% set first_layer_duration_secs = current.beacon_adaptive_heat_soak_maximum_first_layer_duration|default(1800)|int %}
{% set first_layer_duration_mins = (first_layer_duration_secs / 60.0)|round(2) %}
RATOS_ECHO MSG="Will use adaptive bed heatsoak with quality {quality} and maximum first layer duration of {"%.2g"|format(first_layer_duration_mins)} minutes."
{% set first_layer_duration_mins = first_layer_duration_secs / 60.0 %}
RATOS_ECHO MSG="Will use adaptive bed heatsoak with quality {quality} and maximum first layer duration of {first_layer_duration_mins|int if (first_layer_duration_mins|float).is_integer() else first_layer_duration_mins|round(2)} minutes."
{% elif current.bed_heat_soak_time|default(0)|int > 0 %}
{% set duration_mins = (current.bed_heat_soak_time|int / 60.0)|round(2) %}
RATOS_ECHO MSG="Will use fixed-duration bed heatsoak of {"%.2g"|format(duration_mins)} minutes."
{% set duration_mins = (current.bed_heat_soak_time|int / 60.0) %}
RATOS_ECHO MSG="Will use fixed-duration bed heatsoak of {duration_mins|int if (duration_mins|float).is_integer() else duration_mins|round(2)} minutes."
{% else %}
RATOS_ECHO MSG="Will use no bed heatsoak."
{% endif %}
Expand Down