FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Carsten K. am 04 Oktober 2023, 13:40:27

Titel: [GELÖST] FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Carsten K. am 04 Oktober 2023, 13:40:27
Hallo,
ich möchte Folgendes erreichen:


Die Einzelelemente funktionieren wie gewünscht...
Ich habe diverse Kombinationen ausprobiert, bekomme aber leider meistens das GIF vom vorherigen Lauf versendet.
Vielleicht habe ich lediglich falsch nach der korrekten Verwendung von "sleep" bzw. "wait" gesucht.

Vielen Dank für Hinweise im Voraus,
Carsten
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Wernieman am 04 Oktober 2023, 13:56:57
Wie hast Du es denn bis jetzt probiert?

Es giebt mehrere Wege dafür ...
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Carsten K. am 04 Oktober 2023, 14:55:53
Über Notify...
Versuch 1 (ohne sleep)
defmod notifyFlurTuerOpen notify sc_wohnungstuer:contact:.*open.*|sc_wohnungstuer:open.* {\
    my $snapshotPath = "/opt/fhem/";;\
    my $snapshotFile = "www/images/webcam/wohnungstuer.gif";;\
\
    fhem "get TreppenhausKamera image";;\
    qx(convert -delay 100 -loop 0 /opt/fhem/www/images/webcam/TreppenhausKamera_snapshot_*.jpg $snapshotPath$snapshotFile);;\
    fhem "set signal send &$snapshotPath$snapshotFile Wohnungstür";;\
}

Versuch 2 (mit sleep nach get image)
defmod notifyFlurTuerOpen notify sc_wohnungstuer:contact:.*open.*|sc_wohnungstuer:open.* {\
    my $snapshotPath = "/opt/fhem/";;\
    my $snapshotFile = "www/images/webcam/wohnungstuer.gif";;\
\
    fhem "get TreppenhausKamera image ; sleep 5";;\
    qx(convert -delay 100 -loop 0 /opt/fhem/www/images/webcam/TreppenhausKamera_snapshot_*.jpg $snapshotPath$snapshotFile);;\
    fhem "set signal send &$snapshotPath$snapshotFile Wohnungstür";;\
}

Versuch 3 (mit sleep vor convert)
defmod notifyFlurTuerOpen notify sc_wohnungstuer:contact:.*open.*|sc_wohnungstuer:open.* {\
    my $snapshotPath = "/opt/fhem/";;\
    my $snapshotFile = "www/images/webcam/wohnungstuer.gif";;\
\
    fhem "get TreppenhausKamera image";;\
    qx(sleep 5 && convert -delay 100 -loop 0 /opt/fhem/www/images/webcam/TreppenhausKamera_snapshot_*.jpg $snapshotPath$snapshotFile);;\
    fhem "set signal send &$snapshotPath$snapshotFile Wohnungstür";;\
}

Versuch 4 (komplett in Shell-Script)
defmod notifyFlurTuerOpen notify sc_wohnungstuer:contact:.*open.*|sc_wohnungstuer:open.* {\
    `/opt/fhem/getTreppenhausImage.sh`;;\
}

Versuch 4 - Shell Script
#!/bin/bash
perl /opt/fhem/fhem.pl 7072 "get TreppenhausKamera image"

sleep 5

snapshotFile="/opt/fhem/www/images/webcam/wohnungstuer.gif"
convert -delay 100 -loop 0 /opt/fhem/www/images/webcam/TreppenhausKamera_snapshot_*.jpg $snapshotFile

perl /opt/fhem/fhem.pl 7072 "set signal send &$snapshotFile Wohnungstür"
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Wernieman am 04 Oktober 2023, 15:13:19
In der Config oder in der FHEM-Weboberfläche so eingegeben?

ist wichtig wegen der Anzahl der ;;
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Carsten K. am 04 Oktober 2023, 15:37:07
Die defmods sind über "Raw definition" ausgelesen => in der Config definiert.
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Wernieman am 04 Oktober 2023, 17:21:48
1.
qx(sleep 5Das Blockiert Dein FHEM um mindestens 5 Sekunden. Der Vorheriege "fhem-get" dürfte auch erst nach dem Perl-Block abgearbeitet werden (Hinweis: FHEM ist Ereignisorientiert)

2. Das Script weiß doch, wann es beendet wird, warum soll FHEM auf das Script warten (und Blockieren), wenn das Script FHEM Trickern kann? Über Telnet oder Web, gibt genug Hinweise hier im Forum./Wiki (und bei Otto). Dann kann das Sript auch im Hintergrund laufen.

3. Und warum so früh auf die Perl-Ebene?
defmod notifyFlurTuerOpen notify sc_wohnungstuer:contact:.*open.*|sc_wohnungstuer:open.* get TreppenhausKamera image; sleep 5; "scriptname"
und in "scriptname" dann die komplette Ausarbeitung auslagern, also das convert.

Hinweis: Obiges untgetestet und Bitte für Dich nacharbeiten. Ist etwas copy&paste.
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: fz55 am 04 Oktober 2023, 18:54:35
Es gibt bei IPCAM auch get imageWithCallback. Vielleicht hilft dir das weiter.
Titel: Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: fz55 am 04 Oktober 2023, 20:56:07
Ich habe gerade nochmal nachgelesen. Leider geht imageWithCallback bei Serienaufnahmen nicht.
Titel: [GELÖST] Aw: FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Carsten K. am 05 Oktober 2023, 08:44:52
Zitat von: Wernieman am 04 Oktober 2023, 17:21:483. Und warum so früh auf die Perl-Ebene?
defmod notifyFlurTuerOpen notify sc_wohnungstuer:contact:.*open.*|sc_wohnungstuer:open.* get TreppenhausKamera image; sleep 5; "scriptname"
und in "scriptname" dann die komplette Ausarbeitung auslagern, also das convert.

Hinweis: Obiges untgetestet und Bitte für Dich nacharbeiten. Ist etwas copy&paste.

Ich habe jetzt Folgenden Ablauf (VIELEN DANK für Deine Anregung! ):
sc_wohnungstuer:open.* get TreppenhausKamera image ; "/opt/fhem/getTreppenhausImage.sh &"Den sleep-Befehl habe ich in das Shell-Skript ausgelagert. Dadurch ist FHEM nicht mehr blockiert.
Titel: Aw: [GELÖST] FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Wernieman am 05 Oktober 2023, 11:35:36
Eigentlich brauchst Du das & nicht, das schon durch das "" es NonBlocking ausgeführt wird.

Und brauchst Du wirklich noch den "sleep"?
Titel: Aw: [GELÖST] FHEM (IPCAM) und OS Befehle synchron hintereinander
Beitrag von: Carsten K. am 05 Oktober 2023, 11:56:36
"&" ist entfernt - funktioniert!

"sleep" brauche ich bevor das convert die 5 Dateien umwandelt. Ansonsten werden die JPGs vom letzten Lauf ins GIF generiert.