diff --git a/octoprint_enclosure/__init__.py b/octoprint_enclosure/__init__.py index 0640a14..b7ce185 100644 --- a/octoprint_enclosure/__init__.py +++ b/octoprint_enclosure/__init__.py @@ -150,7 +150,7 @@ class EnclosurePlugin(octoprint.plugin.StartupPlugin, octoprint.plugin.TemplateP self.print_complete = False def get_settings_version(self): - return 9 + return 10 def on_settings_migrate(self, target, current=None): self._logger.warn("######### current settings version %s target settings version %s #########", current, target) @@ -158,8 +158,8 @@ class EnclosurePlugin(octoprint.plugin.StartupPlugin, octoprint.plugin.TemplateP self._logger.info("rpi_outputs: %s", self.rpi_outputs) self._logger.info("rpi_inputs: %s", self.rpi_inputs) self._logger.info("######### End Current Settings #########") - if current >= 4 and target == 9: - self._logger.warn("######### migrating settings to v9 #########") + if current >= 4 and target == 10: + self._logger.warn("######### migrating settings to v10 #########") old_outputs = self._settings.get(["rpi_outputs"]) old_inputs = self._settings.get(["rpi_inputs"]) for rpi_output in old_outputs: @@ -181,6 +181,8 @@ class EnclosurePlugin(octoprint.plugin.StartupPlugin, octoprint.plugin.TemplateP rpi_output['gpio_i2c_data_off'] = 0 if 'gpio_i2c_register_status' not in rpi_output: rpi_output['gpio_i2c_register_status'] = 1 + if 'shutdown_on_error' not in rpi_output: + rpi_output['shutdown_on_error'] = False self._settings.set(["rpi_outputs"], old_outputs) old_inputs = self._settings.get(["rpi_inputs"]) @@ -1823,6 +1825,23 @@ class EnclosurePlugin(octoprint.plugin.StartupPlugin, octoprint.plugin.TemplateP msg = "Print job finished: " + file_name + "finished printing in " + file_name, elapsed_time self.send_notification(msg) + if event in (Events.ERROR, Events.DISCONNECTED): + self._logger.info("Detected Error or Disconnect in %s will call listeners for shutdown_on_error!", event) + for rpi_output in self.rpi_outputs: + if rpi_output['shutdown_on_error']: + self._logger.debug("Schedule shutdown for: %s", rpi_output["index_id"]) + self.schedule_auto_shutdown_outputs(rpi_output, 0) + self.run_tasks() + + if event == Events.PRINTER_STATE_CHANGED: + if "error" in payload["state_string"].lower(): + self._logger.info("Detected Error in %s id: %s state: %s will call listeners for shutdown_on_error!", event, payload["state_id"], payload["state_string"]) + for rpi_output in self.rpi_outputs: + if rpi_output['shutdown_on_error']: + self._logger.debug("Schedule shutdown for: %s", rpi_output["index_id"]) + self.schedule_auto_shutdown_outputs(rpi_output, 0) + self.run_tasks() + def run_tasks(self): for task in self.event_queue: if not task['thread'].is_alive(): diff --git a/octoprint_enclosure/templates/enclosure_settings.jinja2 b/octoprint_enclosure/templates/enclosure_settings.jinja2 index 91fc439..b8ce97a 100644 --- a/octoprint_enclosure/templates/enclosure_settings.jinja2 +++ b/octoprint_enclosure/templates/enclosure_settings.jinja2 @@ -221,7 +221,7 @@ - Choose if output should turn off automatomatically when print finishes + Choose if output should turn off automatically when print finishes @@ -231,7 +231,7 @@ - Choose if output should turn off automatomatically when print is canceled or fails + Choose if output should turn off automatically when print is canceled or fails @@ -250,6 +250,16 @@ + +