Skip to content
This repository was archived by the owner on Sep 5, 2022. It is now read-only.
/ execonmcode Public archive

Small DuetSoftwareFramework extension that listens for a user-defined M code to run a user-defined command on the SBC.

License

Notifications You must be signed in to change notification settings

wilriker/execonmcode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1b3efb0 · Sep 5, 2022

History

29 Commits
Apr 7, 2021
Dec 4, 2019
Sep 5, 2022
Jan 6, 2020
Apr 7, 2021
Apr 7, 2021
Apr 7, 2021
Jan 6, 2020
Jan 21, 2021
Jan 9, 2020

Repository files navigation

Deprecated

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.

Description

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.

Usage

$ 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.

Parameters

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.

Parameters in systemd units

Since % is used to access systemd-specific variables in unit files it is necessary to escape them by using double-percent, i.e. %%.

Example

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.

Installation

  • Download from Releases page. When in doubt use the armv7h version.
  • Rename to just execonmcode
  • Make executable via chmod +x execonmcode
  • Put it into any path of your $PATH e.g. /usr/local/bin
  • Run it as root or with sudo
  • Optional: use the shutdownsbc.service systemd unit (included in the repo) to run it at startup and let it shutdown the SBC (customize to your liking)

Contribution

I am happy about comments, suggestions, bug reports, pull requests, etc. either here or in the forum.

About

Small DuetSoftwareFramework extension that listens for a user-defined M code to run a user-defined command on the SBC.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages