[GELÖST] FHEM (IPCAM) und OS Befehle synchron hintereinander

Begonnen von Carsten K., 04 Oktober 2023, 13:40:27

Vorheriges Thema - Nächstes Thema

Carsten K.

Hallo,
ich möchte Folgendes erreichen:
  • FHEM: IPCAM erzeugt 5 Snapshots mit je 1 Sekunde Verzögerung
    get TreppenhausKamera image
  • OS: über convert wird aus den 5 Snapshots 1 animiertes GIF erzeugt
    convert -delay 100 -loop 0 /opt/fhem/www/images/webcam/TreppenhausKamera_snapshot_*.jpg /opt/fhem/www/images/webcam/wohnungstuer.gif
  • FHEM: das erzeugte GIF-File wird als Attachment per Signal verschickt
    set signal send &/opt/fhem/www/images/webcam/wohnungstuer.gif Wohnungstür


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
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Wernieman

Wie hast Du es denn bis jetzt probiert?

Es giebt mehrere Wege dafür ...
- 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

Carsten K.

Ü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"
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Wernieman

In der Config oder in der FHEM-Weboberfläche so eingegeben?

ist wichtig wegen der Anzahl der ;;
- 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

Carsten K.

Die defmods sind über "Raw definition" ausgelesen => in der Config definiert.
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Wernieman

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.
- 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

fz55

Es gibt bei IPCAM auch get imageWithCallback. Vielleicht hilft dir das weiter.

fz55

Ich habe gerade nochmal nachgelesen. Leider geht imageWithCallback bei Serienaufnahmen nicht.

Carsten K.

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.
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Wernieman

Eigentlich brauchst Du das & nicht, das schon durch das "" es NonBlocking ausgeführt wird.

Und brauchst Du wirklich noch den "sleep"?
- 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

Carsten K.

"&" ist entfernt - funktioniert!

"sleep" brauche ich bevor das convert die 5 Dateien umwandelt. Ansonsten werden die JPGs vom letzten Lauf ins GIF generiert.
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k