Last active
November 19, 2025 11:09
-
-
Save NameOfTheDragon/e579295549aaa19b3f41ae07b8f3cbd6 to your computer and use it in GitHub Desktop.
Klipper macros for drying filament using the heated build plate of a 3D printer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; An idea for using the heated bed of a 3D printer as a filament dryer. | |
| ; Adds GCODE command: START_DRYER TIME=T TEMPERATURE=C | |
| ; (T is time in seconds, C is bed temperature in Celsuis) | |
| ; To stop drying early, use STOP_DRYER. | |
| ; Also defined some utility macros: DRY_PLA, DRY_PETG and DRY_ABS. | |
| ; Edit these with your own preferred defaults. | |
| [gcode_macro START_DRYER] | |
| description: Start the heated bed filament dryer. | |
| gcode: | |
| {% set ChamberTemperature = params.CHAMBER | default(25.0) | float %} | |
| {% set BedTemperature = params.TEMPERATURE | default(50.0) | float %} | |
| {% set DryTime = params.TIME | default(14400) | int %} | |
| ; turn the heaters on, however you do that. | |
| M140 S{BedTemperature} ; Sets the print bed temperature without waiting. | |
| M141 S{ChamberTemperature} ; [OPTIONAL] Sets the enclosure temperature. | |
| ; then finally, | |
| SET_GCODE_VARIABLE MACRO=DRYER_STATUS VARIABLE=time_remaining VALUE={DryTime} | |
| SET_GCODE_VARIABLE MACRO=DRYER_STATUS VARIABLE=bed_temperature VALUE={BedTemperature} | |
| SET_GCODE_VARIABLE MACRO=DRYER_STATUS VARIABLE=chamber_temperature VALUE={ChamberTemperature} | |
| UPDATE_DELAYED_GCODE ID=DRYER_TIMER DURATION=1 | |
| [gcode_macro STOP_DRYER] | |
| gcode: | |
| ; Turn off heaters etc. here | |
| M140 S0 ; Disable bed heater | |
| M141 S0 ; [OPTIONAL] Disable enclosure heater/fan | |
| SET_GCODE_VARIABLE MACRO=DRYER_STATUS VARIABLE=time_remaining VALUE=0 | |
| UPDATE_DELAYED_GCODE ID=DRYER_TIMER DURATION=0 ; Stop the timer. | |
| M117 Drying Stopped | |
| [gcode_macro DRYER_STATUS] | |
| variable_time_remaining: 0 | |
| variable_bed_temperature: 0 | |
| variable_chamber_temperature: 0 | |
| gcode: | |
| {% if time_remaining > 0 %} | |
| M140 S{bed_temperature} ; Reset bed temperature (prevents timeout) | |
| SET_GCODE_VARIABLE MACRO=DRYER_STATUS VARIABLE=time_remaining VALUE={time_remaining - 1} | |
| M117 Drying {time_remaining} | |
| {% else %} | |
| STOP_DRYER | |
| {% endif %} | |
| [delayed_gcode DRYER_TIMER] | |
| gcode: | |
| UPDATE_DELAYED_GCODE ID=DRYER_TIMER DURATION=1 | |
| DRYER_STATUS | |
| [gcode_macro DRY_PLA] | |
| gcode: | |
| START_DRYER TEMPERATURE=50 CHAMBER=25 TIME=14400 | |
| [gcode_macro DRY_PETG] | |
| gcode: | |
| START_DRYER TEMPERATURE=55 CHAMBER=30 TIME=18000 | |
| [gcode_macro DRY_ABS] | |
| gcode: | |
| START_DRYER TEMPERATURE=65 CHAMBER=40 TIME=14400 |
Nice macro set, but I wanted a better display on the timer, so I used this:
{% if time_remaining > 0 %}
M140 S{bed_temperature} ; Reset bed temperature (prevents timeout)
SET_GCODE_VARIABLE MACRO=DRYER_STATUS VARIABLE=time_remaining VALUE={time_remaining - 1}
{% set hours_remaining = time_remaining // 3600 %}
{% set minutes_remaining = (time_remaining % 3600) // 60 %}
{% set seconds_remaining = time_remaining % 60 %}
M117 Drying {hours_remaining}:{minutes_remaining}:{seconds_remaining}
{% else %}
STOP_DRYER
{% endif %}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
akash191095 version works for me, running current git klipper etc... as of 3 august 2025