[DSF Extension] Exec On MCode (was: Shutdown SBC)
-
@EMRosa Quick answer is: this is currently not implemented.
I'll think about adding it, though. -
followed your video and got it installed and working in 5 minutes - superb work - thanks
-
@wilriker thanks for the quick reply! No worries; at least it wasn’t something related to my Linux-literacy (or lack thereof). Haha. Your work and efforts on this implementation are inspirational.
-
@EMRosa said in [DSF Extension] Exec On MCode (was: Shutdown SBC):
I've tried single quotes, escape characters, and changing it to an argument passed through the m-code command;
execonmcode --command "sudo pkill -fx %F" -mCode 7720 -execAsync
I thought about this some more and actually the above should work. Though probably as you use
-fx
onpkill
this has to match the full commandline, i.e. you also have to specify the path topython3
, so you will probably need use the following command:M7720 F"/usr/bin/python3 script.py"
EDIT: to find the full commandline while your
script.py
is running use$ pgrep -fa "python3 script.py"
This should give you the PID as well as the full command-line of your process.
-
Thanks so much for the assist! I’ll try that, but I was using the exact process as listed from
ps -aux | grep python3
This lists the process as “python3 location/to/script/script.py”.
In my case, I was able to put the command line call in another python script and just call it that way. I just wasn’t sure if it would be helpful (or necessary) for execonmcode to be able to send quoted arguments. (Or more likely, if I was doing it wrong. Haha)
I’ll let you know if adding the path to python helps.
-
@EMRosa Since you are using
pkill
you need to usepgrep
to find the required command line (it's the same binary that acts different based on which name it is called with but shares common features otherwise).ps
is a different tool that uses (and prints) a different format usually dropping the path to the executable. I think there is a flag tops
to add it but I don't know that off-hand.Also quotes are not necessary for
execonmcode
. Quotes are a concept of shells (sh, bash, zsh, fish, etc.) to provide means to human users to provide command arguments containing spaces. If an application runs another application they usually can provide arguments containing spaces without the need for quotes. -
Release 5.2.0
I am pleased to announce release of
execonmcode
5.2.0.This release uses the latest version of
godsfapi
and makes use of thefilters
option inInterceptConnection
, i.e. it will only receive those codes the user is interested in. This will significantly lower the the required resources e.g. while running a job.As usual the binaries can be found at GitHub Releases page.
-
@wilriker at what point in the bootup cycle is execonmcode ready? I created a custom mCode that I'd like to call at the beginning of config.g, but it says it's unsupported. If I call it separately, or at the very end of config.g, it works correctly.
Any thoughts?
-
@oozebot I think that primarily this depends on when execonmcode is started relative to startup of DCS. Or maybe DCS will even delay accepting API clients until a certain amount of startup tasks have been processed. @chrishamm should be able to give more insights on that.
-
@wilriker If ExecOnMCode is installed as a DSF plugin (will be officially supported in 3.3), it's started by DuetPluginService which is started by multi-user.target. Note that v3.3 will introduce
/sys/dsf-config.g
as well which is executed as soon as all the enabled plugins have been started.Previously plugins were started by DCS, so by basic.target AFAIR.
@oozeBot Either move your custom codes to
dsf-config.g
if you're on pre-3.3 and/or add a delay to the end of your config file to make sure ExecOnMCode has been fully started before they're executed. -
@chrishamm @wilriker - thank you both. We are just about to begin testing the 3.3 betas. This may need to be postponed until after it is released.
-
@chrishamm As of right now ExecOnMCode is a simple API client just connecting to the socket. It is not yet converted to an official plugin. It will be started by a user-provided systemd unit (or arbitrary other means) completely independent of DCS.
-
@wilriker
I once wrote you a PM in German. because I don't know if you understand what I am writing via google translator@All
I would like to send an http command using the Mxxxx command.Let's assume I've installed everything as shown in the video linked here.
What do I have to enter where and how around this line:
http://IP.Adrresse.Of.Shelly/relay/0?turn=off
to be able to send?
P.S or edit or next step
i installed the ExecOnMCode with help of the two videos. but the shutdown (poweroff) with M7722 don't work for me.
The Service is running:
but in DWC i see this message:
M7722
Warning: M7722: Command is not supportedAnd the Raspi is still working/running.
On Terminal (connected with Raspi) i see:
pi@CCC:~ $
2021/05/18 22:24:53 Connection to DCS closed
2021/05/18 22:24:53 EOF
pi@CCC:~ $ -
@crazycreator So, if you want to make a simple HTTP/GET call I'd say you need a
cURL
orwget
command:execonmcode -mCode 1234 -command 'wget -O /dev/null "http://IP.Adrresse.Of.Shelly/relay/0?turn=off"'
If you want to put that into the
ExecStart
line of a systemd unit you have to deal with systemd's escaping syntax. That will be a bit ugly but doable. Otherwise you could move thewget
call into a simple bash-script and call that - one foron
and one foroff
. -
Ok .. sounds good.
But actually the script is not running correct ... the error popup on web-gui is the only reaction when I send M7722. The Raspi don't shut down or restart after this M7722 command.
the terminal show what you see on my terminal screen in my last posting
pi@CCC:/usr/local/bin $ sudo ./execonmcode -mCode 7722 -command "poweroff"
2021/05/19 20:47:59 Connection to DCS closed
2021/05/19 20:47:59 EOFI think that's the problem. But i have no idea how to fix this.
I did the installation exactly as shown in the video. -
nobody answer me?
when i try the command in terminal, connected with the Pi, with additional parameter
i see this outputpi@CCC:~ $ sudo /usr/local/bin/execonmcode -mCode 7722 -command poweroff -debug -trace 2021/05/20 15:54:21 7722: poweroff 2021/05/20 15:54:21 [DEBUG] <Recv> {"version":11,"id":20} 2021/05/20 15:54:21 [DEBUG] <Send> {"Mode":"Intercept","Version":7,"InterceptionMode":"Pre"} 2021/05/20 15:54:21 [DEBUG] <Recv> {"success":true} 2021/05/20 15:54:21 [DEBUG] <Connect> Connection established
but the Pi don't reboot or shut down ... no reaction
on dwc the same ... no reaction -
@crazycreator Can you check if the command
poweroff
does work on your system in the first place?Also please check
execonmcode
version (parameter-version
). It looks to me as if you are using an older version. -
@wilriker said in [DSF Extension] Exec On MCode (was: Shutdown SBC):
Can you check if the command poweroff does work on your system in the first place?
How can i do this?
@wilriker said in [DSF Extension] Exec On MCode (was: Shutdown SBC):
Also please check execonmcode version (parameter -version). It looks to me as if you are using an older version.
pi@CCC:~ $ sudo /usr/local/bin/execonmcode -version 2021/05/20 16:20:43 0x24142bc pi@CCC:~ $
-
@crazycreator said in [DSF Extension] Exec On MCode (was: Shutdown SBC):
How can i do this?
Run
sudo poweroff
and check what that does.pi@CCC:~ $ sudo /usr/local/bin/execonmcode -version 2021/05/20 16:20:43 0x24142bc pi@CCC:~ $
That looks like a bug in previous version and it may be that DCS is rejecting this client. Please get the version 5.2.0 of
execonmcode
from GitHub and try again. -
@wilriker I used 5.1 so that I could imitate the tutorial 100%. now I'm back on 5.2
sudo poweroff
pi@CCC:~ $ sudo poweroff Connection to ccc.local closed by remote host. Connection to ccc.local closed.
Versionscheck
pi@CCC:~ $ sudo /usr/local/bin/execonmcode --version 5.2.0
Debug and Trace
pi@CCC:~ $ sudo /usr/local/bin/execonmcode -mCode 7722 -command -poweroff -debug -trace 2021/05/20 16:35:27 7722: -poweroff 2021/05/20 16:35:27 [DEBUG] <Recv> {"version":11,"id":21} 2021/05/20 16:35:27 [DEBUG] <Send> {"Mode":"Intercept","Version":10,"InterceptionMode":"Pre","Channels":["HTTP","Telnet","File","USB","Aux","Trigger","Queue","LCD","SBC","Daemon","Aux2","AutoPause","Unknown"],"Filters":["M7722"],"PriorityCodes":false} 2021/05/20 16:35:27 [DEBUG] <Recv> {"success":true} 2021/05/20 16:35:27 [DEBUG] <Connect> Connection established
put the M7722 command in DWC Console ... show me this in terminal
2021/05/20 16:35:58 Connection to DCS closed 2021/05/20 16:35:58 [DEBUG] <Close> Closing connection 2021/05/20 16:35:58 EOF