Hallo,
habe hier ein Externes Script, was ich mit einem Notify starte:
SIS_.* {`/opt/fhem/schalte_sis_v3.1.sh $NAME $EVENT`}
Ich dachte bisher, das bei dem Wege FHEM nicht blockiert, was sich nur eben nicht bewahrheitete. Das Script stand und somit auch FHEM.
Ich weiß, das es verschiedene Möglichkeiten gibt, ein Script aufzurufen, nur habe ich keine Doku/Threads dazu gefunden, wahrscheinlich falsche Suchparameter (FORUM, Wiki). Kann mich hier jemand "erhellen"?
Danke und Gruß,
Werner
P.S.Ich weiß, das es jetzt eigentlich nicht mehr eine Anfängerfrage, nur wo sollte man es sonst schreiben?
Zitat von: Wernieman am 11 November 2017, 20:40:44habe hier ein Externes Script, was ich mit einem Notify starte:
SIS_.* {`/opt/fhem/schalte_sis_v3.1.sh $NAME $EVENT`}
Ich dachte bisher, das bei dem Wege FHEM nicht blockiert, was sich nur eben nicht bewahrheitete. Das Script stand und somit auch FHEM.
Mit den {} wechselst Du nach Perl, d.h. da hat dann FHEM selbst keine Kontrolle mehr. Die Backticks (oder qx) sind eigentlich nur dann angebracht, wenn Du die Standardausgabe des Befehls weiterverarbeiten willst.
Wenn Du aber einfach nur den Befehl aufrufen willst ohne die Ausgabe abwarten zu müssen, dann geht das mittels "", also
SIS_.* "/opt/fhem/schalte_sis_v3.1.sh $NAME $EVENT"
Das dürfte dann nicht blockieren.
Gruß,
Thorsten
...wenn es aber Perl seien soll, dann kannst Du das Script mit & im Hintergrund ausführen lassen:
{`/opt/fhem/schalte_sis_v3.1.sh $NAME $EVENT &`}
Wenn die Rückmeldung benötigt wird, dann aus dem shell script an FHEM übergeben:
Zitatecho 'trigger <devspec> <state>' | nc <host> <port>
Mercy ... brauche die Übergabe nicht, da ich Fehlerbehandlung innerhalb des Scriptes erledige.
P.S. Gibt es eigentlich irgendwo eine Übersicht, wie man externe Scripte in Fhem startet??
Es gibt bekanntlich system, qx und hier erwähnte Möglichkeiten. Nur sind mir die Vor/Nachteile nicht bekannt ...
Die von Thorsten genannte Variante mit "..." blockiert nicht, liefert aber auch nix zurück, ist in der commandref/notify beschrieben.
qx/system ist in der Perl Doku (http://perldoc.perl.org/) zu finden. qx/backticks liefert stdout zurück, system nur den errorlevel(?). Beides blockiert, wenn & nicht verwendet wird. Wenn & verwendet wird, dann gibt es auch kein stdout zurück, da der Prozess, zu diesem Zeitpunkt, noch läuft. In dem Fall wie oben beschrieben mit "echo bla | nc ..." Rückmeldungen verarbeiten.
Würde diese Woche mal im Wiki etwas dazu schreiben .. wenn O.K. ist?
Zitat von: Wernieman am 12 November 2017, 17:33:19
Würde diese Woche mal im Wiki etwas dazu schreiben .. wenn O.K. ist?
Finde ich gut. Es gibt ja immer mal wieder diese oder ähnliche Fragen. Man könnte den Artikel dann auch gleich erweitern, so dass man auch gleich das Setzen von Readings mit einbezieht. ...muss aber nicht sein.
Gruß,
Thorsten
Sorry, kam erst jetzt dazu, mir einen Akkount beim Wiki zu beantragen ;o)
Was meinst Du mit "so dass man auch gleich das Setzen von Readings mit einbezieht"
Zitat von: Wernieman am 28 November 2017, 20:20:30
Was meinst Du mit "so dass man auch gleich das Setzen von Readings mit einbezieht"
Damit meine ich die verschiedenen Möglichkeiten, wie man von einem externen Skript aus Readings in FHEM setzt bzw. die Ausgabe eines Skripts dazu verwenden kann, in FHEM Readings zu setzen.
Gruß,
Thorsten
Als Entwickler steht auch noch BlockingCall (https://wiki.fhem.de/wiki/Blocking_Call) zur Verfügung.
Damit können auch Rückgabewerte in der finishFn verarbeitet werden.
Gruß
Dan