Fhem Befehle synchronisieren z.B. IPCam Snapshot per Telegram versenden

Begonnen von FlexBurger, 09 März 2019, 15:06:41

Vorheriges Thema - Nächstes Thema

FlexBurger

Zitat
Hallo zusammen,

ich möchte fhem Befehle sequentiell und synchron ausführen. Beispiel: Mit dem IPCam Modul soll ein Snapshot erstellt werden, der dann per Telegram verschickt wird.
Dazu nutze ich folgendes notifiy:


Hausflur_Kamera_Snapshot {
fhem ("get Hausflur_Kamera image");
fhem ("set TelegramBot sendPhoto /opt/fhem/www/images/ipcamsnapshots/Hausflur_Kamera_snapshot.jpg");
}


Das Problem dabei ist, das oftmals ein alter Snapshot verschickt wird, vermutlich weil der IPCam Befehl noch nicht fertig mit der Erstellung des Snapshots ist und der Telegram Befehl aber schon ausgeführt wird.
In einem anderen Foren-Thread wird hierfür vorgeschlagen mit "sleep" zu arbeiten, was ich aber für unschön halte. Ich würde lieber die fhem Befehle sequentiell und synchron ausführen.

In der CommandRef heißt es
Zitatperl expressions and FHEM commands will be executed in the main "thread"
, daher dachte ich, das bei einem Thread, das ganze sequentiell und synchron laufen würde, was scheinbar nicht der Fall ist?

Weiß jemand ob man Befehle auch sequentiell, synchron absetzen kann? (Ohne mit sleep arbeiten zu müssen.)

Beste Grüße

justme1968

FHEM arbeitet single threaded, event basiert und asynchron.

ein gutes fhem modul wird versuchen niemals zu blockieren und so viel wie möglich im hintergrund zu machen.

idealerweise erzeugt dein kamera device ein event sobald der snapshot fertig ist und du kannst darauf reagieren und das bild verschicken.

wenn das nicht der fall ist gibt es keine gute möglichkeit zu wissen wann das bild gemacht ist. ein fhem(!) sleep ist in diesem fall tatsächlich eine gute methode. da es nicht blockiert und das snapshot erstellen mehr oder weniger reproduzierbar schnell sein sollte.

es gibt irgendwo ein modul mit dem das filesystem überwacht werden kann. das könnte noch ein workaround sein um auf das erstellen eines neuen snaphost zu reagieren.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FlexBurger

Danke für die sehr hilfreiche Antwort! Das Kameramodul erzeugt ein event ("last") :-) Nun hängt ein notify an diesem Event und alles läuft bestens!