optimierung readingsGroup

Begonnen von justme1968, 19 Dezember 2013, 19:48:14

Vorheriges Thema - Nächstes Thema

justme1968

ich glaube langsam ist es an der zeit die readingsGroup zu optimieren und die notifys nur zu verarbeiten wenn auch etwas angezeigt wird.

als erstes fällt mir ein in der notifyFn nichts zu tun wenn fhemweb keine aktiven verbindungen hat.

das hilft natürlich nicht wenn man z.b. auf einem status display permanent etwas offen hat. selbst wenn gar keine readingsGroup auftaucht.

hast du eine idee wie man effizient rausfinden kann welche devices gerade aktiv auf webseiten angezeigt werden? eigentlich ist diese liste ja intern für longpoll vorhanden.

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

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

rudolfkoenig

Beim FHEMWEB ist $hash->{inform} auf den aktuellen Raum gesetzt, falls longpoll gesetzt ist.
Dieser Eintrag kann die speziellen Werte console oder all aufnehmen.
Das Ding hat aber noch kein callback, um andere zu benachrichtigen, falls es sich aendert.

Wozu braucht man das? Ich habe es nicht hingekriegt, das readingsGroup per longpoll aktualisiert wird. Haettest Du dafuer ein Beispiel?


justme1968

eigentich sollte jede readingsGroup per longpoll aktualisiert werden. du bist bis jetzt der erste bei dem ich höre das es nicht geht. sehr seltsam.

das war ja einer der gründe readingsGroup überhaupt anzufangen weil das mit einem 'normalen' weblink nicht ging und zwingend nötig ist wenn man z.b. readings dynamisch abhänig vom wert einfärbt oder formatiert oder icons anzeigt.

ich schau mal ob ich mit $hash->{inform} zurecht komme. einen callback brauch ich glaube ich nicht. eine readingsGroup 'weiss' ja wenn sie auf einer web seite angezeigt wird. und wenn nicht soll sie sowieso nichts tun.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Sorry, mein Fehler. Ich habe mit einem readingsGroup experimentiert, der RSSI-Werte anzeigt :)
Mit einem, der normale Readings anzeigt, klappt es sofort.

justme1968

das beruhigt mich jetzt aber sehr. :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

noch drei fragen:

- kann ich rausfinden für welche web instanz die detailFn genau aufgerufen wird? da wird im unterschied zur summaryFn kein hash auf die temporäre instanz übergeben sondern der name der 'normalen' instanz. also z.b.nur WEB statt FHEMWEB:127.0.0.1:56408.

- kann ich rausfinden ob für eine/meine temporäre instanz die seite neu aufgebaut wurde? eine art callback aus FW_answerCall. am besten ganz am anfang bevor gerendert wird.

- warum wird die FW_summaryFn zwei mal aufgerufen? ein mal aus FW_showRoom mit hash und ein mal aus FW_devState mit name (auch wieder der globalen instanz und nicht der temporären). warum ist vielleicht falsch formuliert. der erste aufruf ist für svg,weblink,readingsGroup & co richtig. der zweite ist für devStateIcon aber der devStateIcon sollte für die atEnds devices gar nicht erst passieren. 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Zitatkann ich rausfinden für welche web instanz die detailFn genau aufgerufen wird?
Ueber die globale Variable $FW_cname

Zitatkann ich rausfinden ob für eine/meine temporäre instanz die seite neu aufgebaut wurde?
Ich verstehe die Frage bzw. die Absicht nicht wirklich.
Und auch nicht, fuer welche Funktion (detailFn/summaryFn) es gelten soll.

Zitatwarum wird die FW_summaryFn zwei mal aufgerufen?
Zuerst fuer "atEnd"-Instanzen, die in eine Gruppe stecken, und damit doch nicht atEnd sind, und danach fuer die restlichen atEnds.
Dieses atEnd Konzept gefaellt mir auch nicht, weiss aber nicht, wie ich den zusaetzlichen Rahmen sonst vermeiden soll.

Zitatein mal aus FW_showRoom mit hash und ein mal aus FW_devState mit name
Das ist wohl ein Bug. In FileLog, weblink und SVG ist es egal, letzteres ist ein beinahe-Problem.
Ich wuerde gerne auch in FW_showRoom auf Name setzen. Gegenargumente?

Zitatauch wieder der globalen instanz und nicht der temporären
Eigentlich sollte die temporaere die Module nichts angehen, die "richtige" ist da, um Attributwerte zu fragen.


justme1968

kurz zum hintergrund: ich möchte die readingsGroups still legen und keine trigger erzeugen wenn sie nicht gerade im web sichtbar sind.

durch den aufruf von von summaryFn oder detailFn weiss ich das eine bestimmte readingsGroup gerade angezeigt wird. über das notify auf delete weiss ich wenn diese temporäre instanz nicht mehr verbunden ist und gelöscht wird. fehlt noch der seiten wechsel weil ich ja auch merken muss ob auf eine seite gewechselt wird auf der diese rg nicht mehr mit dabei ist. dafür den callback bei page refresh. also nicht pro detailFn/summaryFn sonder pro web verbindung.

vielleicht hilft es für die atEnds und den rahmen wenn die devices mit helfen. die rg zeichnet ja z.b. selber einen rahmen und den link zur detail seite über den rahmen.

ob hash oder name ist mir bei meinen modulen egal (so lange ich mit $FW_cname die tatsächliche instanz raus finden kann). hauptsache einheitlich :)

bei dem doppelten aufruf ging es mir aber nicht nur um den unterschied hash/name. sondern auch um den aufruf an sich. ich hab noch nicht geschaut wie es z.b. bei svg ist aber zur zeit rendert scheinbar jedes rg device doppelt. ein mal davon umsonst.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Zitatfehlt noch der seiten wechsel weil ich ja auch merken muss ob auf eine seite gewechselt wird auf der diese rg nicht mehr mit dabei ist.

Faellt Dir dazu nicht ein aehnlicher Trick wie beim delete ein? :) Will nicht bei jedem FW_roomOverview Aufruf zunaechst alle nichtrelevanten Geraete untersuchen, ob die benachrichtigt werden wollen.

Zitatvielleicht hilft es für die atEnds und den rahmen wenn die devices mit helfen.
Ich will ja eben _keinen_ Rahmen..

Zitatob hash oder name ist mir bei meinen modulen egal
Gefixed. Ab sofort immer FW_wname

Zitatzur zeit rendert scheinbar jedes rg device doppelt.
Merkwuerdig: summaryFn wird entweder fuer die Gruppen-Mitglieder oder fuer die atEnds aufgerufen, sollte nie doppelt sein.

justme1968

ZitatFaellt Dir dazu nicht ein aehnlicher Trick wie beim delete ein?

bis jetzt ist mir nur eingefallen entweder regelmässig in $hash->{inform} nachzusehen ob meine rg da noch drin steht, mir regelmässig per longpoll selber etwas zu senden oder per js die seite etwas senden zu lassen.

so richtig gefällt mir aber alles drei nicht weil es nur mit verzögerung funktioniert und zusätzliche last erzeugt.

hast du eine bessere idee?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Zitatbis jetzt ist mir nur eingefallen entweder regelmässig in $hash->{inform} nachzusehen ob meine rg da noch drin steht

Soweit ich das sehe, ist das die effizienteste und einfachste Loesung.
Wenn Du das bei jeden notify pruefst, ist es auch Verzoegerungsfrei, man muss nur die FHEMWEB Instanz im RG merken.

justme1968

ich bin gerade dabei den doppelten aufruf zu debuggen und rauszufinden woran es liegt. und ich bin wieder beim longpoll/svg/room=all problem gelandet.

wenn ich eine readingsGroup alleine in einem raum habe wird deren FW_summaryFn zwei mal aufgerufen. das erste mal bei den atEnds und ein zweites mal über FW_roomStatesForInform weil dort FW_devState aufgerufen wird das versucht das device icon über FW_summaryFn zu bekommen.

wenn ich einen raum mit nur einem svg plot habe wird dessen FW_summaryFn genau ein mal aufgerufen weil FW_roomStatesForInform nichts zurück liefert weil durch SVG der room auf all gesetzt wird.

vielleicht wäre eine zumindest temporäre lösung (bis das mir den svg und room=all behoben ist :) ) alle atEnds von davon auszuschliessen. so wie es für weblink schon der fall ist. ich glaube die haben alle keinen state und kein icon.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Das Problem mit SVG & room=all habe ich so erfolgreich verdraengt, dass ich es nicht mal mehr per grep finde.
Kannst du bitte nochmal was dazu sagen?

Beim longpoll wird jeder Status am Anfang 2 mal abgefragt: einmal von FHEMWEB.pm beim bauen der Seite und einmal von JavaScript, damit die JS-Funktion keine Statusaenderungen zwischen Seitenaufbau und aktivieren der inform Funktionalitaet verpasst. Ich glaube nicht, dass atEnds das Problem weniger haben als andere Geraete.

justme1968

ich suche den thread noch mal raus.

ja. für normale devices wird die summaryFn zwei mal aufgerufen. ein mal beim seitenaufbau und ein mal für inform.

weblink ist aber von der inform liste explizit ausgenommen und SVG ist wegen dem room=all problem zufällig nicht drin. bleibt bei den atEnds nur noch LightScene und readingsGroup. LightScene verwendet noch einem weblink zur anzeige und ist noch auf summaryFn umgestellt nur readingsGroup verwendet summaryFn schon direkt. und genau da ist das problem dann aufgefallen.

keines der mir bekannten atEnds hat einen state und ein icon. sie werden ja sogar extra ohne rahmen und icon gezeichnet. devState ist also für keines der atEnds nötig uns sie sollten Allgäus der inform liste ausgenommen werden. so wie weblink es schon ist.

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

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

justme1968

hier war der thread mit dem svg und room=all problem:http://forum.fhem.de/index.php/topic,13734.msg94106.html#msg94106

sobald ein svg in einem raum ist wird room auf all gesetzt und FW_roomStatesForInform liefert nicht mehr korrekt zurück und es gibt longpoll probleme.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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