Compare commits

...

6 Commits

Author SHA1 Message Date
ntoff
a236450cb5 add a bit scary warning
add a big scary warning to the settings page about software e-stops
2018-03-10 03:21:18 +10:00
ntoff
9d9ff8824f added a little note about waiting in the settings
add a little note to the settings page about it waiting 3 seconds before reconnecting
2018-03-10 02:56:22 +10:00
ntoff
beff41780b fix bizarre set of circumstances that could lead to malfunction of reconnect
If the setting to reconnect is unticked, and a user hits the e-stop button, and then ticks the box to reconnect, and then manually disconnects, the printer would automatically reconnect. This fixes that.

Also  added an "unknown status" to the button, since the status should always be known, if it's not then it's not, you know? Yeah, me either.
2018-03-10 02:41:37 +10:00
ntoff
3666aa5e8d different handling of offline event detect
setting to null was giving javascript console errors. Changed it to just not do anything if the emergency button wasn't pressed.
2018-03-10 02:25:51 +10:00
ntoff
15889e0dc7 unregister event disconnect
https://github.com/ntoff/OctoPrint-Estop/issues/4#issuecomment-371146397
2018-03-08 10:45:58 +10:00
ntoff
62a6dac6e9 add connection cycle option
adds the option to disconnect / reconnect after sending M112.
May help break out of blocking commands by resetting some control boards
2018-03-01 12:04:10 +10:00
4 changed files with 77 additions and 13 deletions

View File

@ -9,7 +9,9 @@ class EstopPlugin(octoprint.plugin.StartupPlugin,
octoprint.plugin.SettingsPlugin):
def get_settings_defaults(self):
return dict(estopCommand = "M112")
return dict(
estopCommand = "M112",
estopReconnect = False)
def on_after_startup(self):
self.estopCommand = self._settings.get(["estopCommand"])
@ -26,6 +28,14 @@ class EstopPlugin(octoprint.plugin.StartupPlugin,
dict(type="sidebar", name="Emergency STOP!", icon="close", template="estop_sidebar.jinja2", styles=["display: none"], data_bind="visible: loginState.isUser"),
dict(type="settings", name="E-Stop Settings", template="estop_settings.jinja2", custom_bindings=False)
]
def on_settings_save(self, data):
s = self._settings
if "estopCommand" in data.keys():
s.set(["estopCommand"], data["estopCommand"])
if "estopReconnect" in data.keys():
s.setBoolean(["estopReconnect"], data["estopReconnect"])
s.save()
def get_update_information(self):
return dict(

View File

@ -76,4 +76,11 @@
}
#sidebar_plugin_estop {
display: block !important;
}
.estop-warning-icon {
color: #eb0000;
font-size: 2em !important;
}
.estop-warning {
font-style: italic;
}

View File

@ -5,27 +5,41 @@
$(function() {
function EstopViewModel(parameters) {
var self = this;
self.loginState = parameters[0];
self.printerState = parameters[1];
self.settings = parameters[2];
self.estopCommand = ko.observable("M112");
self.estopReconnect = ko.observable(false);
self.emergencyCalled = ko.observable(false);
self.enableEstop = ko.pureComputed(function() {
self.enableEstop = ko.pureComputed(function() {
return self.printerState.isOperational() && self.loginState.isUser();
});
self.estopState = ko.pureComputed(function() {
return self.loginState.isUser() > 0 ? "estop_sidebar" : "estop_sidebar_disabled";
});
self.reconnect = ko.pureComputed(function() {
return self.estopReconnect() && self.emergencyCalled();
})
self.buttonText = ko.pureComputed(function() {
if (self.enableEstop()) {
return gettext("EMERGENCY STOP");
} else {
}
else if (self.reconnect()) {
return gettext("Reconnecting...")
}
else if (!self.enableEstop()) {
return gettext("Offline");
}
else {
return gettext("Unknown Status");
}
});
self.buttonTitle = ko.pureComputed(function() {
@ -34,22 +48,46 @@ $(function() {
});
self.onBeforeBinding = function () {
//self.estopCommand(self.settings.settings.plugins.estop.estopCommand());
self.updateSettingsValues();
}
self.sendEstopCommand = function () {
if (self.enableEstop()) {
self.onSettingsHidden = function () {
self.updateSettingsValues();
}
self.updateSettingsValues = function () { //lazy way of making sure we have the latest version of the settings
self.estopCommand(self.settings.settings.plugins.estop.estopCommand());
self.estopReconnect(self.settings.settings.plugins.estop.estopReconnect());
}
self.onEventDisconnected = function () {
if (self.estopReconnect() && self.emergencyCalled()) {
self.timedReconnect = setTimeout(function() { //reconnect 3 seconds after detecting the printer is offline
self.emergencyCalled(false);
OctoPrint.connection.connect();
}, 3*1000); //3 seconds
}
}
self.sendEstopCommand = function () {
if (self.enableEstop()) {
self.estopCommand(self.settings.settings.plugins.estop.estopCommand());
OctoPrint.control.sendGcode(self.estopCommand());
};
};
if (self.estopReconnect()) {
self.emergencyCalled(true);
OctoPrint.connection.disconnect(); //normally octoprint would probably disconnect anyway, just calling this here in case the printer is in a blocking loop
}
}
}
}
OCTOPRINT_VIEWMODELS.push({
OCTOPRINT_VIEWMODELS.push({
construct: EstopViewModel,
dependencies: [
"loginStateViewModel",
"printerStateViewModel",
"settingsViewModel"],
"loginStateViewModel",
"printerStateViewModel",
"settingsViewModel"],
elements: ["#sidebar_plugin_estop_wrapper"]
});
});

View File

@ -9,5 +9,14 @@
<span class="help-block">Usually this is M112. Only change if you know what you're doing.</span>
</div>
</div>
<div class="control-group">
<label class="control-label">{{ _('Cycle the connection?') }}</label>
<div class="controls">
<input type="checkbox" class="input-block" data-bind="checked: settings.plugins.estop.estopReconnect">
<span class="help-block">Enabling this will attempt to automatically cycle the connection to the printer. This may cause the printer's control board to be reset and may help break out of blocking commands. Waits 3 seconds after the printer is "offline" before reconnecting.</span>
</div>
</div>
</form>
<span class="fa fa-exclamation-triangle estop-warning-icon"> </span>
<span class="estop-warning">A software emergency stop button is no substitute for a proper emergency stop button that physically cuts the power to the printer. How the printer responds to emergency stop commands, and connection cycling, will depend entirely on the printer's controller board and firmware. Never leave a printer unattended for extended periods of time.</span>
</div>