Skip to content

Commit

Permalink
Implemented ignored commands
Browse files Browse the repository at this point in the history
  • Loading branch information
StevilKnevil committed May 6, 2021
1 parent a0db794 commit 7765e9a
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 0 deletions.
5 changes: 5 additions & 0 deletions docs/configuration/config_yaml.rst
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,11 @@ Use the following settings to configure the serial connection to the printer:
- M0
- M1
# Commands which should not be sent to the printer and just silently ignored.
# An example of when you may wish to use this could be useful if you wish to manually change a filament on M600,
# by using that as a Pausing command (below)
ignoredCommands:
# Commands which should cause OctoPrint to pause any ongoing prints.
pausingCommands:
- M0
Expand Down
5 changes: 5 additions & 0 deletions src/octoprint/server/api/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ def getSettings():
"longRunningCommands": s.get(["serial", "longRunningCommands"]),
"checksumRequiringCommands": s.get(["serial", "checksumRequiringCommands"]),
"blockedCommands": s.get(["serial", "blockedCommands"]),
"ignoredCommands": s.get(["serial", "ignoredCommands"]),
"pausingCommands": s.get(["serial", "pausingCommands"]),
"emergencyCommands": s.get(["serial", "emergencyCommands"]),
"helloCommand": s.get(["serial", "helloCommand"]),
Expand Down Expand Up @@ -766,6 +767,10 @@ def _saveSettings(data):
data["serial"]["blockedCommands"], (list, tuple)
):
s.set(["serial", "blockedCommands"], data["serial"]["blockedCommands"])
if "ignoredCommands" in data["serial"] and isinstance(
data["serial"]["ignoredCommands"], (list, tuple)
):
s.set(["serial", "ignoredCommands"], data["serial"]["ignoredCommands"])
if "pausingCommands" in data["serial"] and isinstance(
data["serial"]["pausingCommands"], (list, tuple)
):
Expand Down
1 change: 1 addition & 0 deletions src/octoprint/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ def settings(init=False, basedir=None, configfile=None, overlays=None):
"blacklistedBaudrates": [],
"longRunningCommands": ["G4", "G28", "G29", "G30", "G32", "M400", "M226", "M600"],
"blockedCommands": ["M0", "M1"],
"ignoredCommands": [],
"pausingCommands": ["M0", "M1", "M25"],
"emergencyCommands": ["M112", "M108", "M410"],
"checksumRequiringCommands": ["M110"],
Expand Down
7 changes: 7 additions & 0 deletions src/octoprint/static/js/app/viewmodels/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ $(function () {
self.serial_longRunningCommands = ko.observable(undefined);
self.serial_checksumRequiringCommands = ko.observable(undefined);
self.serial_blockedCommands = ko.observable(undefined);
self.serial_ignoredCommands = ko.observable(undefined);
self.serial_pausingCommands = ko.observable(undefined);
self.serial_emergencyCommands = ko.observable(undefined);
self.serial_helloCommand = ko.observable(undefined);
Expand Down Expand Up @@ -1057,6 +1058,9 @@ $(function () {
blockedCommands: function () {
return splitTextToArray(self.serial_blockedCommands(), ",", true);
},
ignoredCommands: function () {
return splitTextToArray(self.serial_ignoredCommands(), ",", true);
},
pausingCommands: function () {
return splitTextToArray(self.serial_pausingCommands(), ",", true);
},
Expand Down Expand Up @@ -1259,6 +1263,9 @@ $(function () {
blockedCommands: function (value) {
self.serial_blockedCommands(value.join(", "));
},
ignoredCommands: function (value) {
self.serial_ignoredCommands(value.join(", "));
},
pausingCommands: function (value) {
self.serial_pausingCommands(value.join(", "));
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,13 @@
<span class="help-inline">{{ _('Use this to specify commands that should never be sent to the printer. Just the G or M code, comma separated. Defaults to <code>M0</code> and <code>M1</code> since most firmware will block until a button on the controller has been pressed if it receives either of those two commands.') }}</span>
</div>
</div>
<div class="control-group">
<label class="control-label" for="settings-serialIgnoredCommands">{{ _('Ignored commands') }}</label>
<div class="controls">
<input type="text" class="input-block-level" id="settings-serialIgnoredCommands" data-bind="value: serial_ignoredCommands">
<span class="help-inline">{{ _('Use this to specify commands that should be silently ignored and never be sent to the printer. Just the G or M code, comma separated. Unlike blocked commands above, there will be no warning popup when these commands are encountered.') }}</span>
</div>
</div>
<div class="control-group">
<label class="control-label" for="settings-serialPausingCommands">{{ _('Pausing commands') }}</label>
<div class="controls">
Expand Down
16 changes: 16 additions & 0 deletions src/octoprint/util/comm.py
Original file line number Diff line number Diff line change
Expand Up @@ -645,6 +645,7 @@ def __init__(
["serial", "checksumRequiringCommands"]
)
self._blocked_commands = settings().get(["serial", "blockedCommands"])
self._ignored_commands = settings().get(["serial", "ignoredCommands"])
self._pausing_commands = settings().get(["serial", "pausingCommands"])
self._emergency_commands = settings().get(["serial", "emergencyCommands"])
self._sanity_check_tools = settings().getBoolean(["serial", "sanityCheckTools"])
Expand Down Expand Up @@ -5297,6 +5298,21 @@ def _command_phase_queuing(
},
)
return (None,)
if gcode in self._ignored_commands:
message = "Not sending {} to printer, it's configured as an ignored command".format(
gcode
)
self._log("Info: " + message)
self._logger.info(message)
eventManager().fire(
Events.COMMAND_SUPPRESSED,
{
"command": cmd,
"message": message,
"severity": "info",
},
)
return (None,)

def _command_phase_sending(
self, cmd, cmd_type=None, gcode=None, subcode=None, *args, **kwargs
Expand Down

0 comments on commit 7765e9a

Please sign in to comment.