FHEM Forum

FHEM => Automatisierung => Thema gestartet von: steb am 26 Juni 2016, 21:02:33

Titel: Mehrere shell (system) aufrufe in einem notify
Beitrag von: steb am 26 Juni 2016, 21:02:33
Hallo zusammen,

nachdem ich schon Tage mit googeln verbracht habe und auch "try and error" nix mehr bringt hier meine "Challenge":

Ich will ein notify für eine eingehende Aktion mit mehreren shell scripten belegen. Die Schalten dort verschiedene Releais, angesteuert über ein Webportal. Von der Idee her wie das hier:
define aktion notify aktion {fhem("set a on ;; define tmp_time1 at +00:00:05 set b on")}

Jetzt soll anstatt eines fhem aufrufs jedoch ein "system" eingesetzt werden. Bisher habe ich das so versucht. Klappt natürlich nicht :-(
Geht nicht: define aktion notify aktion {system "php doit1.php" ;; define timer1 at +00:00:25 system "php doit2.php"}
Geht nicht: define aktion notify aktion {fhem("system 'php doit1.php' ;; define timer1 at +00:00:25 system 'php doit2.php'")}
Geht nicht: define aktion notify aktion {fhem(system "php doit1.php" ;; define timer1 at +00:00:25 system "php doit2.php")}

Danke für jeden Hinweis!
Titel: Antw:Mehrere shell (system) aufrufe in einem notify
Beitrag von: JoWiemann am 26 Juni 2016, 21:15:54
Hallo,

wenn ich Dich richtig verstehe möchtest Du:


{
    system("php doit1.php);
    fhem("define timer1 at +00:00:25 {system('php doit2.php')}");
}

ausführen?!

damit müsste Dein notify so aussehen:


define aktion_notify notify aktion {system("php doit1.php);; fhem("define timer1 at +00:00:25 {system('php doit2.php')}");;}


Tipp: Erst das notify mit:

define aktion_notify notify aktion {}


anlegen. Und dann den Rest mit klick auf def im Editor eingeben. Und zweimal aktion geht nicht.

Grüße Jörg
Titel: Antw:Mehrere shell (system) aufrufe in einem notify
Beitrag von: justme1968 am 26 Juni 2016, 21:29:31
um ein shell kommando abzusetzen muss man nicht auf die perl ebene wechseln. die verzögerung kann man auch mit einem fhem sleep bauen statt dem at: define <name> notify <regex> "php doit1.php" ;;sleep 25;; "php doit2.php"

ich weiss was deine script machen, aber schau dir mal readingsProxy an. damit kannst du die beiden kommandos in die setFn stecken und hast dann über set on-for-timer die möglichkeit die verzögerung flexibel zu machen.

gruss
  andre

ps: auch in deinem aller ersten beispiel ist der Wechsel nach perl und zurück nach fhem unnötig.

pps: system ohne & ist übrigens keine gute idee. das wartet blockierend darauf das das shel script fertig ist.
Titel: Antw:Mehrere shell (system) aufrufe in einem notify
Beitrag von: steb am 26 Juni 2016, 22:38:56
Zitat von: justme1968 am 26 Juni 2016, 21:29:31
um ein shell kommando abzusetzen muss man nicht auf die perl ebene wechseln. die verzögerung kann man auch mit einem fhem sleep bauen statt dem at: define <name> notify <regex> "php doit1.php" ;;sleep 25;; "php doit2.php"

Super. Vielen Dank für den Hinweis. Ich hatte versucht auf "sleep" zu verzichten, da das fhem blockiert. Das "&" hinter den Befehlen habe ich im Beispiel der einfach halber weggelassen. Danke für die Notiz.

Soweit funktioniert das nun. Zumindest geht der erste Befehl nun durch. Danach kommt jedoch: sh: 1: ;sleep 5;php: not found

Vielleicht hast Du noch eine Idee. Ich schaue mir gleich aber auch noch readingsProxy's an

Danke und Gruß
Stefan
Titel: Antw:Mehrere shell (system) aufrufe in einem notify
Beitrag von: justme1968 am 26 Juni 2016, 23:12:59
ein richtig verwendetes fhem sleep blockiert nicht.

wir haben gerade ein problem bzw. eine inkonsistent beim parsen der fhem kommandozeile gefunden im gegensatz zum notify gefunden. ich schaue mal wie man das reparieren kann und mache rudi einen vorschlag. mal sehen ob er es einbaut.

als workaround kannst du noch zwei ;; anhängen:define <name> notify <regex> "php doit1.php" ;;sleep 25;; "php doit2.php";;

oder du steckst beide aufrufe mit samt dem sleep in einen einzigen shell aufruf stecken. dann wird auf shell ebene gewartet statt in fhem. das macht aber unterm strich keinen unterschied so lange du nicht vorzeitig abbrechen willst.

also etwa so:define <name> notify <regex> "php doit1.php ;;sleep 25;; php doit2.php"

gruss
  andre
Titel: Antw:Mehrere shell (system) aufrufe in einem notify
Beitrag von: Wernieman am 27 Juni 2016, 10:25:18
Wobei es wirklich die Frage ist, ob Du nicht in Deinem Script (php kennt auch ein "sleep") die 25 Sec. verwendest.

Schließlich ist Unix ein Mehrprozesssystem und würde dadurch optimaler ausgelastet.

Der Einzigste Vorteil einer eigenen Definition ist, wenn Du es auch abbrechen können willst.
Titel: Antw:Mehrere shell (system) aufrufe in einem notify
Beitrag von: steb am 28 Juni 2016, 14:41:02
Vielen Dank für den guten Input!
Hab es nun teilweise in ein eigenes Script ausgelagert, bzw. da, wo es abbrechenbar sein sollte im fhem gelassen.

Cheers
Stefan