PRESENCE - statusRequest-Abfrage abwarten

Begonnen von Dragonfly, 23 Mai 2013, 18:44:06

Vorheriges Thema - Nächstes Thema

Dragonfly

Hallo mal wieder.
Mit eurer Hilfe ist es gelungen, meine Squeezebox über FHEM zu schalten - leider ist nun ein zweites Gerät dazugekommen und ich mußte feststellen, daß wenn das 2. Gerät nicht online ist, die Steuerung das 1. Gerät anspricht - und umgekehrt.

Daher kam mir die Idee, vor der Ausführung des Befehls eine PRESENCE-Abfrage zu machen, um den Status zu aktuallisieren - nach Ende der Abfrage soll dann die Squeezebox geschalten werden.
Leider wartet die Schaltung die Abfrage nicht ab.

Hier der (gekürzte) Code dazu:
define SB_ dummy
attr SB_ setList state:Ein/Play,Aus,Pause,Vol30,Vol50,Vol60,Radio,Skip,Back
attr SB_ webCmd state
define SB__exec notify (SB_:.*) {\
    fhem "set SqueezeBox_A35DM statusRequest";;\
    my $v=Value("SB_");;\
    my $p=Value("SqueezeBox_A35DM");;\
    if ($v eq "Ein/Play" && $p eq "online") {GetFileFromURL "http://..."};;\
    if ($v eq "Aus" && $p eq "online") {GetFileFromURL "http://..."};;\
...


Sicherlich könnte ich PRESENCE auf einen kurzen Prüf-Intervall einstellen - aber das würde ja keinen Spaß machen und nur unnötig die Fritzbox belasten.
Ach ja, kann eigentlich PRESENCE auf eine Zeit von "0 0" eingestellt werden bzw. was ist der Maximal-Timeout für einen Check? Es ist eigentlich nicht nötig, das Gerät permanent zu überwachen.

Vielen Dank schonmal, Tom.

Markus Bloch

Hi Tom,

das FHEM nicht wartet bis der StatusRequest beendet ist, ist das eigentliche Kernfeature von PRESENCE. Würde FHEM hier warten würde plötzlich das gesamte FHEM stehen bleiben und auf nichts mehr reagieren, bis die Prüfung abgeschlossen ist. Das soll natürlich verhindert werden, damit in der Zwischenzeit Funktelegramme von Aktoren usw. bearbeitet werden können.

Genauso währe die Idee ein sleep zwischen dem StatusRequest und der weiteren Verarbeitung zu setzen sehr ungeeignet und würde ebenfalls zum kompletten erliegen von FHEM für die Dauer des sleep führen.


Zu den Timeouts:

Ein Timeout von 0 bedeutet, dass sobald eine Prüfung durchgelaufen ist und ein Ergebnis geliefert hat, sofort die nächste Prüfung durchgeführt wird. Es stellt also die Wartezeit zwischen dem beenden des letzten Checks und dem start des nächsten Checks in Sekunden dar.

Einen Maximalwert gibt es so gesehen nicht. Der Maximalwert ist der, der durch die Funktion sleep() maximal verarbeitet werden kann, wo mir kein Maximalwert aktuell bekannt ist, was aber nicht heist, dass es ihn gibt.

Viele Grüße

Markus

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Dragonfly

OK, ist klar - danke.

Wie läuft eigentlich der "Mode: fritzbox"?
Täuscht es mich, oder wird bei einer Abfrage alles abgefragt und nicht nur ein Gerät?
Auf folgendes will ich hinaus:
Ein Ping wird mit 30 30 und ein Zweiter mit 300 300 angelegt - dann würde ja auch der 2. Ping überprüft und gleichzeitig mit dem 30 Sekunden Ping aktuallisiert?!

Ansonsten läuft PRESENCE jetzt super seit den letzten Aktuallisierungen.
Danke - auch an Rudi für den Tipp mit dem telnetPort ohne Passwort!

LG