FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 19 Dezember 2013, 19:48:14

Titel: optimierung readingsGroup
Beitrag von: justme1968 am 19 Dezember 2013, 19:48:14
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
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 19 Dezember 2013, 20:12:32
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?

Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 19 Dezember 2013, 20:23:13
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.
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 19 Dezember 2013, 20:42:50
Sorry, mein Fehler. Ich habe mit einem readingsGroup experimentiert, der RSSI-Werte anzeigt :)
Mit einem, der normale Readings anzeigt, klappt es sofort.
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 19 Dezember 2013, 20:48:57
das beruhigt mich jetzt aber sehr. :)
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 20 Dezember 2013, 11:25:52
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. 
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 21 Dezember 2013, 09:03:39
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.

Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 21 Dezember 2013, 10:08:32
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.
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 21 Dezember 2013, 10:28:57
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.
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 21 Dezember 2013, 16:46:55
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?
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 22 Dezember 2013, 09:24:13
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.
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 22 Dezember 2013, 22:48:51
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.
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 23 Dezember 2013, 07:41:00
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.
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 23 Dezember 2013, 09:09:25
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.

Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 23 Dezember 2013, 10:35:52
hier war der thread mit dem svg und room=all problem:http://forum.fhem.de/index.php/topic,13734.msg94106.html#msg94106 (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.
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 29 Dezember 2013, 11:03:20
Ok, das Problem (room=all in FW_roomStatesForInform) sollte jetzt gefixed sein.

room=all wird nur bei longpollSVG benoetigt, das wird jetzt in fhemweb.js genauer geprueft, und nur falls noetig gesetzt.

Der doppelte Aufruf bleibt aber weiterhin erhalten, damit zwischen Seiten-Rendering und JavaScript-Aufruf keine Events verlorengehen.
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 10 Januar 2014, 00:00:06
ich bin gerade dabei die optimierungen beim triggern der events an deine letzten änderungen anzupassen. beim debuggen sind mir einige sehr seltsame dinge aufgefallen:


ich würde gerne vorschlagen:
wie wäre es das verhalten von longpoll und summaryFn bzw detailFn für alle möglichen fälle von all/unsorted/raum/detail zu definieren und eine test konfiguration dafür zusammen zustellen um bei änderungen möglichst schnell sicherzustellen das alles so tut wie es soll.

das ist gerade viel länger geworden als es sollte. aber beim testen ist mir immer mehr aufgefallen.
Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 10 Januar 2014, 15:54:12
Bin nicht sicher, dass ich alles verstehe, aber ich sehe auch die Probleme.

ZitatFW_devState sollte nicht aufgerufen werden/nichts tun wenn ein device kein icon haben kann (wie alle atends) oder wenn es die detail ansicht ist wo kein icon angezeigt wird

Ich habe atEnds beim FW_roomStatesForInform ausgeschlossen. Das ist zwar in Prinzip falsch, allerdings sind die Nebeneffekte und die Bugs, die dadurch aufgedeckt werden (u.a. http://forum.fhem.de/index.php/topic,18583.new.html#new) stoerender.
Ich bleibe immer noch dabei, dass zwischen Rendering und longpoll Aktivierung was verloren gehen kann, und deswegen alles, was auf der Seite sichtbar ist, an das JavaScript uebertragen werden muss. Vermutlich kann man sowas elegant nur mit einem reinen JavaScript Client loesen.

ZitatFW_devState nur dann aufgerufen wird wenn sich am state/STATE tatsächlich etwas geändert hat.
Das ist vmtl. sinnvoll, habe ich aber erstmal aufgeschoben.

Zitatlongpoll in allen räumen zum laufen zu bekommen. egal ob all,unsorted oder irgendein anderer
Ich meine das funktioniert jetzt wieder. Dass Everything nicht tat, war mir nicht bewusst, von Unsorted wusste ich.

Zitatdas ein weg gefunden wird mit dem ein device feststellen kann ob es gerade in einem browser fenster angezeigt wird.

Das ist immer noch fuer alle _nicht_ atEnd Module gegeben, da diese, falls sie sichtbar sind, ueber FW_roomStatesForInform aufgerufen werden, und dies ist die longpoll Verbindung.

Ich bin auch fuer eine Test-Konfiguration, wuerde mich aber freuen, wenn ich das nicht selbst erstellen muss. Waere nett, wenn wir dafuer die demo Konfiguration nutzen koennten.
Titel: Antw:optimierung readingsGroup
Beitrag von: justme1968 am 10 Januar 2014, 16:11:45
danke. ich schau mir in ruhe an was deine änderungen bewirken. vielleicht kann ich das gleich so systematsich das man es wiederholbar für eine testkonfiguration verwenden kann.

mal sehen ob ich auch einen weg finde wie ich die optimierung um die es eigentlich ging wieder einschalten kann.

ansonsten war oben (vermutlich zu versteckt) noch der punkt das alle plots zwei mal daten aus filelog/dblog holen (also zwei mal SVG_showLog  mit anschließendem get auf das log device) und zwei mal plotten. das scheint unabhängig von den mehrachen summaryFn/detailFn aufrufen zu sein. und fällt natürlich besonders auf wenn man einen raum mit plots hat und raus zoomt.

Titel: Antw:optimierung readingsGroup
Beitrag von: rudolfkoenig am 10 Januar 2014, 16:37:09
Wg. plots: sollte auch weg sein.