|
2 | 2 | from __future__ import absolute_import
|
3 | 3 |
|
4 | 4 | import octoprint.plugin
|
| 5 | +import octoprint.util |
5 | 6 | import flask
|
6 | 7 | import json
|
| 8 | +import time |
7 | 9 | from io import BytesIO
|
8 | 10 | from octoprint.server.util.flask import restricted_access
|
9 | 11 | from octoprint.events import Events
|
|
15 | 17 | from .print_queue import PrintQueue, QueueItem
|
16 | 18 | from .driver import ContinuousPrintDriver
|
17 | 19 |
|
18 |
| - |
19 | 20 | QUEUE_KEY = "cp_queue"
|
20 | 21 | CLEARING_SCRIPT_KEY = "cp_bed_clearing_script"
|
21 | 22 | FINISHED_SCRIPT_KEY = "cp_queue_finished_script"
|
|
25 | 26 | RESTART_MAX_RETRIES_KEY = "cp_restart_on_pause_max_restarts"
|
26 | 27 | RESTART_ON_PAUSE_KEY = "cp_restart_on_pause_enabled"
|
27 | 28 | RESTART_MAX_TIME_KEY = "cp_restart_on_pause_max_seconds"
|
28 |
| - |
| 29 | +BED_COOLDOWN_ENABLED_KEY = "bed_cooldown_enabled" |
| 30 | +BED_COOLDOWN_SCRIPT_KEY = "cp_bed_cooldown_script" |
| 31 | +BED_COOLDOWN_THRESHOLD_KEY = "bed_cooldown_threshold" |
| 32 | +BED_COOLDOWN_TIMEOUT_KEY = "bed_cooldown_timeout" |
29 | 33 |
|
30 | 34 | class ContinuousprintPlugin(
|
31 | 35 | octoprint.plugin.SettingsPlugin,
|
@@ -73,6 +77,10 @@ def get_settings_defaults(self):
|
73 | 77 | d[RESTART_MAX_RETRIES_KEY] = 3
|
74 | 78 | d[RESTART_ON_PAUSE_KEY] = False
|
75 | 79 | d[RESTART_MAX_TIME_KEY] = 60 * 60
|
| 80 | + d[BED_COOLDOWN_ENABLED_KEY] = False |
| 81 | + d[BED_COOLDOWN_SCRIPT_KEY] = "; Put script to run before bed cools here\n" |
| 82 | + d[BED_COOLDOWN_THRESHOLD_KEY] = 30 |
| 83 | + d[BED_COOLDOWN_TIMEOUT_KEY] = 60 |
76 | 84 | return d
|
77 | 85 |
|
78 | 86 | def _rm_temp_files(self):
|
@@ -219,7 +227,30 @@ def cancel_print(self):
|
219 | 227 | self._msg("Print cancelled", type="error")
|
220 | 228 | self._printer.cancel_print()
|
221 | 229 |
|
| 230 | + def wait_for_bed_cooldown(self): |
| 231 | + self._logger.info("Running bed cooldown script") |
| 232 | + bed_cooldown_script = self._settings.get(["cp_bed_cooldown_script"]).split("\n") |
| 233 | + self._printer.commands(bed_cooldown_script, force=True) |
| 234 | + self._logger.info("Preparing for Bed Cooldown") |
| 235 | + self._printer.set_temperature("bed", 0) # turn bed off |
| 236 | + start_time = time.time() |
| 237 | + |
| 238 | + while (time.time() - start_time) <= (60 * float(self._settings.get(["bed_cooldown_timeout"]))): # timeout converted to seconds |
| 239 | + bed_temp = self._printer.get_current_temperatures()["bed"]["actual"] |
| 240 | + if bed_temp <= float(self._settings.get(["bed_cooldown_threshold"])): |
| 241 | + self._logger.info( |
| 242 | + f"Cooldown threshold of {self._settings.get(['bed_cooldown_threshold'])} has been met" |
| 243 | + ) |
| 244 | + return |
| 245 | + |
| 246 | + self._logger.info( |
| 247 | + f"Timeout of {self._settings.get(['bed_cooldown_timeout'])} minutes exceeded" |
| 248 | + ) |
| 249 | + return |
| 250 | + |
222 | 251 | def clear_bed(self):
|
| 252 | + if self._settings.get(["bed_cooldown_enabled"]): |
| 253 | + self.wait_for_bed_cooldown() |
223 | 254 | path = self._write_temp_gcode(CLEARING_SCRIPT_KEY)
|
224 | 255 | self._printer.select_file(path, sd=False, printAfterSelect=True)
|
225 | 256 |
|
@@ -539,5 +570,6 @@ def __plugin_load__():
|
539 | 570 | __plugin_hooks__ = {
|
540 | 571 | "octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information,
|
541 | 572 | "octoprint.access.permissions": __plugin_implementation__.add_permissions,
|
542 |
| - "octoprint.comm.protocol.action": __plugin_implementation__.resume_action_handler, # register to listen for "M118 //action:" commands |
| 573 | + "octoprint.comm.protocol.action": __plugin_implementation__.resume_action_handler, |
| 574 | + # register to listen for "M118 //action:" commands |
543 | 575 | }
|
0 commit comments