Mehrere shell (system) aufrufe in einem notify

Begonnen von steb, 26 Juni 2016, 21:02:33

Vorheriges Thema - Nächstes Thema

steb

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!

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

justme1968

#2
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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

steb

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

justme1968

#4
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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Wernieman

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.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

steb

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