Aus notify heraus Werte in readingsGroup aktualisieren

Begonnen von Elektrolurch, 12 März 2015, 19:50:36

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo,


ich bastele da schon eine längere Zeit an dem Thema herum, habe aber noch keine befriedigende Lösung gefunden.

Ausgangssituation:

Sowohl für die Zeitprogrammierung meinr Rolladen als auch der Raumthermostate verwende ich je einen dummy mit readings.
Der schaut so ungefähr aus:

Reading
Raum -> Liste von Räumen z.B. Bad,Küche,Wohnzimmer,Alle
Wochentag -> Montag-Sonntag,Werktage,Wochenende,alle
Starzeit1
Endzeit1
Startzeit2
Endzeit2
mode
und noch ein paar Werte mehr

Wähele ich jetzt z.B. ein Thermostat / Raum aus, so werden die am device eingestellten Werte gelesen und die readings Startzeit1...Endzeit2 gesetzt.
Wird der Wochentag geändert, so werden ebenfalls die Start- und Endezeiten erneut neu aus dem device ausgelesen und in die readings des dummys für die Anzeige in der readingsGroup geschrieben.
Für Startzeit1 ... Endzeit2 sind Menü hinterlegt, um Bedienfehler zu vermeiden.
Die Menüs werden dynamisch berechnet und bieten  nur Werte an, die höher sind, als das Vorgängermenü. :-)

Das ganze wird über ein notify auf den dummy getriggert. In dem notify werden die Änderungen der verschiedenen readings ausgewertet (z.B. Raum, Wochentag) und entsprechende readingsBulkUpdates  auf den dummy zur Ausgabe der Änderungen angestossen.

Das funktioniert auch, die readings  werden aktualisiert, jedoch nicht auf dem Bildschirm. Um den zu aktualisieren, muss ich F5 für einen kompletten refresh drücken.

Das Problem liegt wohl darin, das aus dem notify heraus kein update des selben devices gemacht werden kann.

Bevor jetzt der Vorschlag kommt, jedem Wert ein eigenes dummy zuzuordnen, damit die Aktualisierung des Screens funktioniert....
Wird unübersichtlich und ich mache da noch wesentlich mehr, als oben dargestellt.

Was habe ich versucht, um eine Aktualisierung der rg auf dem Screen anzustossen?

readingsGroup_updateDevices($hash);
zeichnet leider die rg nicht neu.

fhem("trigger WEB JS:location.reload(true)");

baut den ganzen Scrren neu auf, wie F5 drücken. Nachteil ist aber, dass das relativ lange dauert, Firefox bei zwei offenen Fenstern eine Meldung ausgibt und das aktuelle Fenster nach Bestätigung der Meldung nach hinten verlagert.
Und dass das nicht nur für WEB, sondern auch für WEBtablet usw. gemacht werden müsste.
Eine wenig befriedigende Lösung.

Hat da noch jemand eine Idee?

Elektrolurch
configDB und Windows befreite Zone!

justme1968

du musst dafür sorgen das das aktualisieren der readings nicht mehr im kontext des notify erfolgt sondern später passiert.
z.b. mit einem fhem sleep verzögert. also im notfy nicht setreading x y zsondern sleep 0.1; setreading x y z
da du auf die perl ebene gegangen bist und readingsBulkUpdate verwendest musst du die verzögerung mit InternalTimer auch selber bauen.

was eventuell auch geht ist mit trigger/CommandTrigger selber die nötigen evnents erzeugen. das musst du aber probieren.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Elektrolurch

Hallo Andre,

Zitat:
setreading x y z
sondern
Code: [Auswählen]
sleep 0.1; setreading x y z
da du auf die perl ebene gegangen bist und readingsBulkUpdate verwendest musst du die verzögerung mit InternalTimer auch selber bauen.

Habe es schon fast befürchtet. Werde mal überlegen, ob ich nicht dann einen Buffer aufbaue, in denen ich die readingsBulkUpdate und readingsEndUpdate usw. erst einmal speichere und dann über einen internal - Timer abarbeite.

Dachte ev., dass es einen anderen Workaround geben könnte.

Was soll eigentlich denn dann

readingsGroup_updateDevice machen?

Da hatte ich auch schon mal die Variante ausprobiert, den Aufruf über InternalTimer zu verzögern, aber der Screen wurde trotzdem nicht aktualisiert.

Der zu übergebene hash ist schon der der rg?

Elektrolurch
configDB und Windows befreite Zone!

TM4889

Konnte das Problem gelöst werden? Denn ich hänge gerade bei gleichen Problem.