FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Basti-K am 12 Januar 2022, 22:59:41

Titel: Skript mit system() starten
Beitrag von: Basti-K am 12 Januar 2022, 22:59:41
Hallo Zusammen.

Ich versuche gerade aus einer Doif zwei Shell Skripte zu starten.
Sie brauchen keine root Rechte.
Starte ich eins aus der Shell läuft es. (Es werden Einstellung am Heizkraftwerk vorgenommen)
Ich bekomme dort die Rückmeldung sehen auch das Ergebnis am Gerät.

(([S10E:Batteriestatus] < 5) and ([16:00-23:00] )
system ("/opt/e3dcset/min.sh &");)
 
DOELSE
System ("/opt/e3dcset/auto.sh &");;


Starte ich das cmd2
Gibt es kein Fehler in Fehm. Aber es passiert auch nichts. Ich sehe auch nicht das Skript ausgeführt wurde.

2022-01-12 22:36:12 DOIF E3DC_Notstrom cmd_event: set_cmd_2
2022-01-12 22:36:12 DOIF E3DC_Notstrom cmd_2

Syntax Fehler?
ich hab schon diverse Schreibweisen probiert nur sehen ich nicht wo das Problem liegen könnte.
Titel: Antw:Skript mit system() starten
Beitrag von: OdfFhem am 12 Januar 2022, 23:19:19
System ist schon mal nicht gleich system ... es fehlt die Perl-Klammerung ... Bedingung/Befehl-Klammerung ebenfalls fehlerhaft ...
Titel: Antw:Skript mit system() starten
Beitrag von: Basti-K am 12 Januar 2022, 23:33:27
recht hast du, aber so hatte ich es auch schon mal:

{system ("/opt/e3dcset/auto.sh &");}

gibt einen error.
2022-01-12 23:29:41 DOIF E3DC_Notstrom error: {system ("/opt/e3dcset/auto.sh &");}: -1

der fhem User ist auch schon in der sudo gruppe.
Rechte auf das Skript:
-rwxrwxrwx
Titel: Antw:Skript mit system() starten
Beitrag von: MadMax-FHEM am 12 Januar 2022, 23:39:33
Zitat von: Basti-K am 12 Januar 2022, 23:33:27
recht hast du, aber so hatte ich es auch schon mal:

{system ("/opt/e3dcset/auto.sh &");}

gibt einen error.
2022-01-12 23:29:41 DOIF E3DC_Notstrom error: {system ("/opt/e3dcset/auto.sh &");}: -1

Ich weiß ja nicht, ob das bei DOIF was (extra) macht aber: system() gibt immer -1 zurück...


Zitat von: Basti-K am 12 Januar 2022, 23:33:27
der fhem User ist auch schon in der sudo gruppe.

Du nutzt ja gar kein sudo hier?
Im Script?
Notwendig?


Zitat von: Basti-K am 12 Januar 2022, 23:33:27
Rechte auf das Skript:
-rwxrwxrwx

Ebenso übertrieben wie fhem einfach in sudo (ohne PW!?) packen...

Man kann kaum mehr (Sicherheits-)Löcher reißen... ;)

Es würde (verm.) reichen/gereicht haben die Datei unter /opt/fhem zu packen und sudo chown fhem: Pfad/Datei

Evtl. (falls nicht schon war): sudo chmod +x Pfad/Datei

Gruß, Joachim
Titel: Antw:Skript mit system() starten
Beitrag von: Basti-K am 12 Januar 2022, 23:49:58
hallo Joachim.
dasmit dem sudo war mehr Verzweiflung. (da hatte ich auch Bauchschmerzen bei)

aber der Hinweis mit dem nach /opt/fhem verschieben war die Losung.

(und natürlich die Syntax)


aber warum ein error angezeigt wird und es dann doch funktioniert ist etwas eigenartig.

ich danke euch für eure Hilfe.
Gruß Sebastian
Titel: Antw:Skript mit system() starten
Beitrag von: Ellert am 13 Januar 2022, 00:29:06
Siehe: https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche#Besonderheit_des_Error-Reading

Warum system und nicht "", wie in der Commandref beschrieben? s. https://commandref.fhem.de/commandref_DE.html#command
Titel: Antw:Skript mit system() starten
Beitrag von: Basti-K am 13 Januar 2022, 12:45:26
Am Anfang hatte ich es mit nur Gänsefüßen probiert am Ende hatte es mit System grundsätzlich funktioniert.
Aktuell seht es so aus:


(([?S10E:Batterieladezustand] < 5) and ([16:00-23:00] ))
{system ('/opt/e3dcset/min.sh &');}
 
DOELSE
{system ('/opt/e3dcset/auto.sh &');}


Falls sich jemand fragt, was das soll:
Der Hausspeicher (Akku) hat ist Notstromfähig. (hat sich schon bewährt) Da kann man eine Reserve eintragen, die reserviert wird. Unglücklicherweise muss der Akku regelmäßig leer laufen das er sauber kalibriert wird. D.h. die Reserve freigegeben und er läuft einfach leer. Die Zeit, wann das passiert, kann man nicht beeinflussen. Durch die Skripts verhindere ich das der Akku abends leer läuft. Die Entladeleistung wird dann auf das Minimum eingestellt.  Leer werden kann er ruhig in der Nacht, aber bitte nicht zu TV Primetime. ;)