Kamerabild auf Anforderung versenden (Telegram)

Begonnen von TobiasR, 16 Januar 2018, 21:18:49

Vorheriges Thema - Nächstes Thema

TobiasR

Hallo,
ich möchte auf Anforderung ein aktuelles Foto machen, es speichern und versenden.
Das dies nicht in der selben Sekunde funktioniert, habe ich verstanden und so habe ich eine Verzögerung von nun 10sec eingebaut.
Leider wird damit scheinbar der gesamte Prozess angehalten so dass ich kein aktuelles sondern immer das Bild der vorletzten Aufnahme erhalte.

Wie muss ich meinen Code anpassen?

Telegram:msgText.* {
        if ($EVTPART1 eq 'Aussen') {
        fhem("get WebCamAussen image");;
        sleep(10);;
        fhem("set Telegram sendImage \@Name_Vorname /opt/fhem/www/webcam/WebCamAussen_snapshot.jpg");;
        }
}


marvin78

Verwende fhem sleep und nicht Perl sleep (siehe commandref zu sleep). Alternativ kannst du auch ein zweites notify auf das Event des erstellten Bildes bauen (ich nehme an, es wird ein Event erzeugt).

TobiasR

Hi,

Telegram:msgText.* {
        if ($EVTPART1 eq 'Aussen') {
        fhem("get WebCamAussen image");;
        sleep 2;;
        fhem("set Telegram sendImage \@Name_Vorname /opt/fhem/www/webcam/WebCamAussen_snapshot.jpg");;
        }
}

hat leider nichts gebracht.

Im notify bin ich ja bereits  :-\

marvin78

Du verwendest ja auch noch immer nicht FHEM-sleep.

Warum wechselst du überhaupt auf Perl Ebene und triggerst nicht direkt auf das Event "Aussen"?

Telegram:msgText.*Aussen.* get WebCamAussen image;sleep 2;set Telegram sendImage \@Name_Vorname /opt/fhem/www/webcam/WebCamAussen_snapshot.jpg

Ob das Event ggf. noch besser einschränkbar ist, musst du schauen. Wenn du unbedingt bei Perl bleiben möchtest, muss das sleep einfach direkt vor den 2. Befehl in den fhem sub Aufruf. NUR dann ist es nicht blockierend.

fhem("sleep 2;set Telegram sendImage \@Name_Vorname /opt/fhem/www/webcam/WebCamAussen_snapshot.jpg");

Code ist für das DEF.

Bitte die Doku aufmerksamer lesen.

Prof. Dr. Peter Henning

So etwas würde ich überhaupt nicht mit FHEM machen.  Im Ordner contrib/DoorPi steht das Skript sendphoto.sh. Damit wird ein Telegram Bot angewiesen, sich das Foto zu holen.

LG

pah

TobiasR

Hallo marvin78,

so hat es funktioniert!

Danke
Tobias

OppiM

Hi,

ich hab das mit einem DOIF und dessen wait gelöst, wie verhält sich das in Bezug auf das Blockieren von FHEM?

([Fibaro_DO_Technik:"^closed$"])
   (get Camera1 image)
   (
      set Telegram sendImage @@<name> /opt/fhem/www/snapshots/camera1/Camera1_snapshot.jpg Es hat geklingelt,
      set Server INFO: Es hat geklingelt - Bild Camera 1 gesendet..
   )

Attributes:
   do         always
   wait       0,1


Gruß,
Michael