Add possibility to define custom code for cooling (#579)

These changes allow to define custom code to be run when using the cooldown preset.

Here an example in the configuration:
```
[preheat cooldown]
gcode: M107
```
This commit is contained in:
Julien Kohler 2022-04-11 13:25:07 +02:00 committed by GitHub
parent 618c9ac0e8
commit 3ea0b09863
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -83,9 +83,10 @@ class TemperaturePanel(ScreenPanel):
def preheat(self):
self.labels["preheat_grid"] = self._gtk.HomogeneousGrid()
for i, option in enumerate(self.preheat_options):
self.labels[option] = self._gtk.Button(option, "color%d" % ((i % 4)+1))
self.labels[option].connect("clicked", self.set_temperature, option)
self.labels['preheat_grid'].attach(self.labels[option], (i % 2), int(i/2), 1, 1)
if option != "cooldown":
self.labels[option] = self._gtk.Button(option, "color%d" % ((i % 4)+1))
self.labels[option].connect("clicked", self.set_temperature, option)
self.labels['preheat_grid'].attach(self.labels[option], (i % 2), int(i/2), 1, 1)
scroll = Gtk.ScrolledWindow()
scroll.set_property("overlay-scrolling", False)
scroll.set_hexpand(True)
@ -226,35 +227,34 @@ class TemperaturePanel(ScreenPanel):
self._screen._ws.klippy.set_heater_temp(" ".join(heater.split(" ")[1:]), 0)
logging.info("Setting %s to %d" % (heater, 0))
self._printer.set_dev_stat(heater, "target", 0)
return
for heater in self.active_heaters:
MAX_TEMP = int(float(self._printer.get_config_section(heater)['max_temp']))
if heater.startswith('extruder'):
target = self.preheat_options[setting]["extruder"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_tool_temp(self._printer.get_tool_number(heater), target)
elif heater.startswith('heater_bed'):
target = self.preheat_options[setting]["bed"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_bed_temp(target)
elif heater.startswith('heater_generic '):
target = self.preheat_options[setting]["heater_generic"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_heater_temp(" ".join(heater.split(" ")[1:]), target)
elif heater.startswith('temperature_fan '):
target = self.preheat_options[setting]["temperature_fan"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_temp_fan_temp(" ".join(heater.split(" ")[1:]), target)
else:
logging.info("Unknown heater: %s" % heater)
self._screen.show_popup_message(_("Unknown Heater") + " " + heater)
if target <= MAX_TEMP:
if target > 0:
self._printer.set_dev_stat(heater, "target", int(target))
logging.info("Setting %s to %d" % (heater, target))
else:
self._screen.show_popup_message(_("Can't set above the maximum:") + (" %s" % MAX_TEMP))
else:
for heater in self.active_heaters:
MAX_TEMP = int(float(self._printer.get_config_section(heater)['max_temp']))
if heater.startswith('extruder'):
target = self.preheat_options[setting]["extruder"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_tool_temp(self._printer.get_tool_number(heater), target)
elif heater.startswith('heater_bed'):
target = self.preheat_options[setting]["bed"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_bed_temp(target)
elif heater.startswith('heater_generic '):
target = self.preheat_options[setting]["heater_generic"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_heater_temp(" ".join(heater.split(" ")[1:]), target)
elif heater.startswith('temperature_fan '):
target = self.preheat_options[setting]["temperature_fan"]
if target > 0 and target <= MAX_TEMP:
self._screen._ws.klippy.set_temp_fan_temp(" ".join(heater.split(" ")[1:]), target)
else:
logging.info("Unknown heater: %s" % heater)
self._screen.show_popup_message(_("Unknown Heater") + " " + heater)
if target <= MAX_TEMP:
if target > 0:
self._printer.set_dev_stat(heater, "target", int(target))
logging.info("Setting %s to %d" % (heater, target))
else:
self._screen.show_popup_message(_("Can't set above the maximum:") + (" %s" % MAX_TEMP))
if self.preheat_options[setting]['gcode']:
# This small delay is needed to properly update the target if the user configured something above
# and then changed the target again using the preheat gcode