Is this a bug ? idle_timeout / controller_fan

Hi. Sorry to bother you guys but can I have some help, please ?

in → Configuration reference - Klipper documentation

#idle_timeout:
#   The amount of time (in seconds) after a stepper driver or heater
#   was active and the fan should be kept running. The default
#   is 30 seconds.

idle_timeout: is not working for me. Am I alone ?

[controller_fan controller_fan]
pin: PD12
kick_start_time: 0.3
heater: heater_bed
stepper: stepper_x,stepper_y,stepper_z
fan_speed: 0.07
cycle_time: 0.06
idle_timeout: 60
idle_speed: 0

Controller fan stops immediately, idle_timeout:60 is not respected.

Thank you

Works for me. Just tested it
Please note that you have two conditions:

[idle_timeout]
timeout: 1

and

[controller_fan my_controller_fan]
pin: P1.26
stepper: stepper_x,stepper_y,stepper_z
fan_speed: 0.6
idle_timeout: 30
idle_speed: 0.4
  • [idle_timeout]timeout: 1 here means that after 1 second of no activity the idle condition is reached.
  • [controller_fan my_controller_fan]idle_speed: 0.4 means that when idle condition is reached, then set the fan speed to 40%
  • [controller_fan my_controller_fan]idle_timeout: 30 means that 30 seconds after idle condition is reached the fan is turned off
1 Like

Of course, thank you for explaining. Now that I know about the global timeout I understand the logic. Documentation threw me off and could alert about the two timeouts. I interpreted that when all of the triggers where off, in my case:

heater: heater_bed
stepper: stepper_x,stepper_y,stepper_z

The controller fan idle_timeout would kick in. With all steppers in M84 was turning on and off bed heater and fans always stopped immediately when I pressed cooldown.

I’ll make idle_timeout:0 and idle_speed:0 so the controller fans also stop when the global timeout kicks in. They are annoying :neutral_face: to be around when on.

Thank you

Is there available an “out_of_idle” option somewhere ? e.g global timeout could turn lights off, “out_of_idle” would have gcode to turn them back on ?

The global idle status is reflected in the printer variable printer.idle_timeout.state
You could use this to construct a macro to do whatever you want. See Macro Creation Tutorial for more information