[gelöst] Antwort eines get abwarten, dann auswerten

Begonnen von zife, 18 März 2020, 09:44:53

Vorheriges Thema - Nächstes Thema

zife

Hallo in die Runde,

nach tagelangem Lesen und Probieren stecke ich fest und brauche bitte einen "konzeptionellen" Rat. Es geht also nicht um Fehlersuche, sondern um die Herangehensweise.

Ich möchte Folgendes erreichen:
- Beim Druck auf einen Taster wird der Status eines Lautsprechers abgefragt, und wenn dieser schon Radiosender 1 spielt, soll er den Radiosender 2 aufrufen.
- Wenn er noch keine Musik spielt oder Radiosender 2 läuft, soll er Radiosender 1 aufrufen.
- Da die Radiosender ggf. auch von einer anderen App geändert werden, muss ich erst den Status abfragen und kann mich nicht auf vergangene FHEM-Schaltvorgänge verlassen.

Was ich schon geschafft habe:
- Per HTTPMOD und parsen der JSON-Antwort habe ich zwei Userreadings, in denen der Radiosender und der Zustand "Playing" oder "Stopped" steht.
- Per notify kann ich auslösen, dass bei Tastendruck ein get-Befehl abgesetzt wird, der die o.g. Userreadings füllt/aktualisiert.
- Ich kann per DOIF prüfen, was in den Userreadings steht, und davon abhängig den passenden Radiosender aufrufen.

Mein Problem:
- Es dauert vielleicht 0,5-1 Sekunde, bis der get-Befehl die Userreadings gefüllt hat. Dummerweise läuft das DOIF aber früher, und so wird noch der alte Stand der Userreadings ausgewertet und letztlich der falsche Befehl ausgelöst. Erst beim zweiten Drücken passt es dann, weil inzwischen die Userreadings aktulisiert sind.

Frage:
- Wie kann ich es erreichen, dass das DOIF (oder auch ein Perl-IF) erst dann startet, wenn das Userreading aktualisiert wurde?

Ich glaube, das Posten von Code oder Listings nutzt wenig, da ich hier nicht den richtigen Ansatzpunkt finde.

Bin für alle Ideen dankbar!

(Edit: Topic gelöst gesetzt)
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

herrmannj

Du kannst "hinter" das userReading ein notify hängen und das löst die Aktion dann aus.

zife

#2
Danke - was genau heisst "dahinter hängen"? Verstehe ich nicht ganz, sorry...

Edit: ach so, jetzt dämmert's mir. Also ein NOTIFY, dass durch das Userreading auslöst. Klaro. Danke.
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

herrmannj

sehr gern. Bei weiteren Problemen ab hier dann jetzt bitte mit code.

justme1968

oder statt mit einem notify kann man auch mit fhem sleep auf ein bestimmtes event warten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Damian

Ich verstehe das Problem nicht, wenn du ein DOIF auf ein Userreading ansetzt, dann wird es erst getriggert, wenn das Userreading gesetzt ist und das sollte doch dann sein, wenn der get-Befehl abgeschlossen ist. Wenn das nicht der Fall ist, dann wird dir ein Notify auch nicht helfen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

zife

Ja, mir ist inzwischen gedämmert, dass ich das DOIF wie das NOTIFY auf die Aktualisierung des Userreadins hätte ansprechen lassen müssen. Ich hatte es auf den Tastendruck reagieren lassen, und das war eben zu schnell für die parallel laufende Aktualisierung des Userreadings.

Habe noch viel gebastelt, ist jetzt gelöst mit einem NOTIFY. Wenn ich das Ding fertig hab, probier ich es rein übungshalber auch nochmal mit DOIF.

SLEEP habe ich probiert, aber mangels Erfolg verworfen (wohl falsch eingesetzt) - und ich wollte auch keine unnötige Zeit durch ein zu langes SLEEP vergeuden, wenn die Antwort des GET schnell eintrifft. Ich habe auch das Risiko gesehen, dass bei mehrfachem Tasten sich die SLEEP addieren und fhem dann hängt.
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

justme1968

sleep kann nicht nur eine bestimmte zeit warten sondern auch auf ein bestimmtes event. also z.b. den update des readings.

aber wenn du jetzt eine funktionierende lösung hast ist ja alles gut.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

zife

Cool, dann probier ich später auch nochmal, das mit SLEEP hinzubekommen - auf daß der Erkenntnisgewinn spätere Foren-Fragen meinerseits vermeidet  ;)
Danke an alle Helfer - grandiose Sache, und fhem macht süchtig - je mehr funktioniert, desto mehr will man...
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?