Since the go-library is no longer maintained this has been superseeded by a version written in Python.
See Duet3D Forum Thread for details.
This repository is now archived.
This is a small extension to DuetSoftwareFramework
to execute arbitrary system commands when a user-defined M-Code is encountered.
An example usage would be to execute system shutdown on the SBC when a e.g. M7722 is run.
$ execonmcode -help
Usage of ./execonmcode:
-command value
Command to execute. This can be specified multiple times.
-debug
Print debug output
-execAsync
Run command to execute async and return success to DCS immediately
-interceptionMode string
Interception mode to use (default "Pre")
-mCode value
Code that will initiate execution of the command. This can be specified multiple times.
-noFlush
Do not flush the code channel before executing the associated command
-returnOutput
Return the output of the command back to DCS. Use with care. Cannot be combined with -execAsync.
-socketPath string
Path to socket (default "/var/run/dsf/dcs.sock")
-trace
Print underlying requests/responses
-version
Show version and exit
Starting from version 3 it is possible to provide an arbitrary number of -mCode + -command tuples. This way a
single instance of execonmcode can handle multiple commands. Side-effect is that there is no more default for -mCode.
execonmcode does provide a simple mechanism for parameter substitution. It is possible to pass string parameters to the
selected M-Code and have them inserted in the -command. In the command string they have to be single letters prefixed by
the percent-sign (%) and they must not be G, M or T.
All parameters that do not have a corresponding value in the M-Code will be forwarded as given.
Since % is used to access systemd-specific variables in unit files it is
necessary to escape them by using double-percent, i.e. %%.
Run execonmcode as
$ execonmcode -command "mycommand %F %N %D"
Then you can use the following M-Code syntax to replace these parameters
M7722 F"my first parameter" N"my second parameter"
this will lead to an execution of
mycommand "my first parameter" "my second parameter" %D
Note that %D was passed as is since it was not given in the M-Code.
- Download from Releases page. When in doubt use the
armv7hversion. - Rename to just
execonmcode - Make executable via
chmod +x execonmcode - Put it into any path of your
$PATHe.g./usr/local/bin - Run it as
rootor withsudo - Optional: use the
shutdownsbc.servicesystemd unit (included in the repo) to run it at startup and let it shutdown the SBC (customize to your liking)
I am happy about comments, suggestions, bug reports, pull requests, etc. either here or in the forum.