SVG-Plot im FHEMWEB reagiert auch, wenn sich im Log nichts ändert

Begonnen von Dr. Boris Neubert, 10 Januar 2015, 14:43:12

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

ich habe schon einmal ein Thema mit diesem Betreff geschrieben, finde es aber nicht mehr...

Ich habe ein Gerät, das ca. alle 2 Sekunden Daten sendet, die zu einer Aktualisierung von Readings führen. Ich habe mir über userReadings zwei Readings 1:1 abgeleitet und für diese event-min-interval 60 gesetzt. Diese beiden Readings logge ich in ein FileLog und lasse mir dafür einen SVG-Graphen in FHEMWEB anzeigen.

Dieser Graph wird im Takt der empfangenen Readings, also alle 2 Sekunden aktualisiert, obwohl sich im unterliegenden FileLog gar nichts ändert.

Das ist bei anderen Graphen auch so, wenn ich z.B. im Log sowohl Werte wegschreibe, die sich nur alle 5 Minuten als auch solche, die sich alle Minute ändern. Obwohl nur die Werte mit 5-minütiger Änderung geloggt werden, wird der Graph jede Minute aktualisiert. Das ist aber nicht so schlimm wie eine zweisekündliche Flackerei.

Was müsste denn dazu alles geändert werden, damit longpollSVG nur eine Aktualisierung anstößt, wenn wirklich aktualisiert werden muss?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

longpollSVG ist eigentlich ein Hack, um dir zu demonstrieren, dass das so nicht geht, und das SVG in JS generiert werden muss.
Bin nicht sicher, dass ich es optimieren will, um meine Argumentation ad-absurdum zu fuehren. :)

Das Problem ist vmtl. dass das SVG immer neu generiert wird, falls einer der betroffenen Geraete irgendein Event generiert, da im JS nur noch das Geraet als Filter vorhanden ist, nicht aber das Regexp selber.

Dr. Boris Neubert

Hallo Rudi,

ich erinnere mich wieder: das hast Du damals schon geschrieben  ::)   [warum finde ich den Thread nicht über die Forumssuche  >:(   ]

Ich habe mir so beholfen, dass ich das Gerät zweimal definiert habe: in einer Version für die instantane Anzeige eines Teils der Werte in FHEMWEB und in einer Version mit event-on-change-reading in Kombination mit event-min-interval für die 5-minütliche Anzeige des anderen Teils der Werte im SVG-Plot.

Wenn ich mir wünschen dürfte, was Du implementieren sollst, würde ich mir SVG.js statt der Optimierung von longpollSVG wünschen  :D

Viele Grüße
Boris


Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Ich musste gerade longpollSVG fixen, und dabei ist das Event-Genaue-Filterung beim longpollSVG als "Abfallprodukt" reingekommen. Tut mir leid :)
jsSVG bleibt auf der TODO, ich brauche dafuer ein bisschen mehr zusammenhaengende Zeit.

Dr. Boris Neubert

Hallo Rudi,

Danke dafür  :)

Ich habe leider noch eine Reihe anderer privater Verpflichtungen, sonst hätte ich mit folgender Sache in FHEM angefangen:

- Ein Modul API.pm, das in der nullten Fassung nichts tut, außer die von FHEMWEB genutzten Funktionen von FHEM 1:1 anzubieten als API_ReadingsVal(), API_AttrVal() usw.
- FHEMWEB in einer Testfassung auf das API umzubiegen, um die Abhängigkeit von FHEM zu lösen (zunächst mit Verlusten in der Funktionalität, z.B. bei den SVG-Plots und den Plugins).
- FHEMWEB aus FHEM herauslösen, um es als eigenen Prozess auf einer anderen Maschine laufen zu lassen. Dafür müsste dann eine clientseitige Kopie des API.pm entstehen, die mittels Websockets und einem noch zu definierenden Protokoll (vermutlich JSON-RPC) auf das serverseitige API zugreift.

Sinn der Übung:
- FHEMWEB von dem etwas schwachbrüstigen Raspberry Pi auf eine stärkere Maschine verlegen.
- Etwas gegen den Speicherfraß von RSS tun können, ohne immer gleich die ganze Hausautomation neu starten zu müssen.
- Einen sinnvollen Anwendungsfall für die Readings-Geschichte (Metainformationen mit Einheiten, Darstellungsform, ...) und API-Geschichte schaffen.

Warum schreibe ich das? Weil ich fragen wollte, ob Du diese Überlegungen nachvollziehen kannst und bei der weiteren Entwicklung von FHEMWEB berücksichtigen magst in dem Sinne, dass kommende Designentscheidungen FHEMWEB nicht stärker mit fhem.pl verquicken sondern den Einbau einer Zwischenschicht erleichtern. Das beträfe jetzt speziell jsSVG, das vermutlich auf der get-Funktion von FileLog aufsetzen wird.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Ich kann das zwar im Hinterkopf behalten, allerdings glaube ich nicht, dass man FHEMWEB vom Rest losgeloest kriegt, da gibt es zu viele globale Variablen und andere Abhaengigkeiten.
jsSVG setzt auf die FileLog (und DbLog/etc) get Funktion auf (aber in RAW-Form, ohne Filterung), und verwendet weiterhin die .gplot Datei als Konfiguration. Und ich hoffe durch ein bisschen substitution die perl-evals auch in JS verwenden zu koennen.

Dr. Boris Neubert

Hallo Rudi,

beim aktuellen Stand von FHEM (Update heute Nachmittag gemacht; kein SVN-Version) funktioniert longpollSVG bei mir nicht mehr. Bereits nach dem Update nach Deiner Ankündigung vom 11.01. im vorherigen Post war Schluss.

Der Graph wird nicht mehr automatisch aktualisiert/fortgeschrieben.

Brauche ich jetzt zwingend ein eventTypes-Gerät? Ich hatte noch nie eines.

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

eventTypes braucht man mWn nur fuer die notify/FileLog/etc wizards.

Ich vermute, dass mein neuer "schlauer" longpollSVG Filter zu restriktiv ist.
Kannst du bitte die JavaScript-Console oeffnen, und nach einem passenden FHEM-Event die Zeilen mit "longpollSVG filter" anschauen? Am besten in der Detailansicht der SVG, damit man die Zeile einfacher findet.

Dr. Boris Neubert

Aufruf Firefox: firefox -jsconsole http://has:8083/fhem?detail=comp.nas.power.weblink


Angezeigt wird der Plot-Editor.
Javascript-Konsole spricht:

"18:24:06.943 FW_queryValue:{ReadingsVal("comp.nas.power.weblink","copyGplotFile","")}" fhemweb.js:147
"18:24:06.949 FW_queryValue:{AttrVal("comp.nas.power.weblink","room","")}" fhemweb.js:147
"18:24:07.117 Longpoll with filter comp.nas.power.weblink" fhemweb.js:147
"18:24:07.339 Rcvd: " fhemweb.js:147

Und dann nichts mehr.


Die relevanten Definitionen:
define comp.nas.log FileLog /opt/fhem/log/comp.nas-%Y%m.log comp.nas
define comp.nas.power.weblink SVG comp.nas.log:comp.nas.power:CURRENT


Ein typischer Ausschnitt aus dem Log comp.nas-201501.log:
2015-01-17_18:25:57 comp.nas drivepm: 255 255 255 255
2015-01-17_18:25:57 comp.nas power: 45
2015-01-17_18:25:57 comp.nas CPUTemp: 38.00
2015-01-17_18:25:57 comp.nas SystemTemp: 34.00
2015-01-17_18:25:57 comp.nas PeripheralTemp: 43.00
2015-01-17_18:27:05 comp.nas drivepm: 255 255 255 255
2015-01-17_18:28:15 comp.nas drivepm: 255 255 255 255
2015-01-17_18:29:25 comp.nas drivepm: 255 255 255 255
2015-01-17_18:30:34 comp.nas drivepm: 255 255 255 255
2015-01-17_18:31:44 comp.nas drivepm: 255 255 255 255
2015-01-17_18:31:44 comp.nas power: 46
2015-01-17_18:31:45 comp.nas CPUTemp: 38.00
2015-01-17_18:31:45 comp.nas SystemTemp: 34.00



Die wesentlichen Zeilen in der .gplot-Datei comp.nas.power.gplot:
#FileLog 4:comp.nas.power\x3a::
plot "<IN>" using 1:2 axes x1y2 title 'power/W' ls l0 lw 1 with steps



Der Plot muss also auf das Event comp.nas:power horchen (in der .gplot-Datei ist comp.nas.power das Regexp dazu).

Gefiltert wird aber auf den SVG-Plot comp.nas.power.weblink.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Das ist das richtige Log, wenn longpollSVG nicht gesetzt ist.
Mit gesetztem Attribut bekomme ich auf "trigger global hello" im SVG_01_Garden Detail-Screen (fhem.cfg.demo):

19:23:55.511 Longpoll with filter .*
19:24:11.183 Rcvd:
19:24:11.184 Rcvd: ["global","<no definition>","<div id=\"global\"  class=\"col2\"><no definition></div>"]
19:24:11.188 longpollSVG filter:Garden.T\x3a|Garden.T\x3a|Garden.T\x3a


Ohne Attribut nur
19:27:24.972 Longpoll with filter SVG_01_Garden
was korrekt ist, da der Filter schon auf der Perl-Seite zuschlaegt.

Dr. Boris Neubert

Ja ja, aber longpollSVG ist gesetzt.

Das eben war der .gplot-Editor. Der SVG-Plot darin bekommt also keine Updates mehr.

In einem Raum mit etlichen Devices und fünf Graphen zeigt mir die JS-Konsole regelmäßige Updates:

"19:44:25.347 Rcvd: ["0.hr.edv.e","P=  127 W    E= 0.309 kWh","<div id=\"0.hr.edv.e\"  class=\"col2\">P=  127 W    E= 0.309 kWh</div>"]" fhemweb.js:147
"19:44:25.348 Rcvd: ["0.hr.edv.e-EP_ENERGY_METER","0.308699995279312","0.308699995279312"]" fhemweb.js:147
"19:44:25.348 Rcvd: ["0.hr.edv.e-EP_ENERGY_METER-ts","2015-01-17 19:44:25","2015-01-17 19:44:25"]" fhemweb.js:147
"19:44:25.349 Rcvd: ["0.hr.edv.e-state","EP_ENERGY_METER= 0.308699995279312","EP_ENERGY_METER= 0.308699995279312"]" fhemweb.js:147
"19:44:25.349 Rcvd: ["0.hr.edv.e-state-ts","2015-01-17 19:44:25","2015-01-17 19:44:25"]" fhemweb.js:147
"19:44:25.349 longpollSVG filter:0.hr.edv.e.2.EP_POWER_METER\x3a|0.hr.edv.e.2.EP_ENERGY_METER\x3a" fhemweb.js:147
"19:44:25.349 longpollSVG filter:comp.nas.drivepm\x3a|comp.nas.drivepm\x3a|comp.nas.drivepm\x3a|comp.nas.drivepm\x3a" fhemweb.js:147
"19:44:25.349 longpollSVG filter:comp.nas.power\x3a" fhemweb.js:147
"19:44:25.349 longpollSVG filter:comp.nas.PeripheralTemp\x3a|comp.nas.SystemTemp\x3a|comp.nas.CPUTemp\x3a" fhemweb.js:147
"19:44:25.349 longpollSVG filter:0.hr.vent.*" fhemweb.js:147


Der Filter in der dritten Zeile von unten ist nicht korrekt.

Das Gerät ist comp.nas und das Reading ist Power. Regexp müsste also comp.nas:power.* anstellt von comp.nas.power: lauten. Ziehst Du Dir das Regexp aus der .gplot-Datei (siehe mein voriger Post)? Das ist meine ich nicht richtig. Kommen hier die Device:Event-Notation und der Match auf die relevanten Zeilen im FileLog durcheinander?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Kann dich nicht ganz folgen, ich meine die Events aus dem Zitat passen nicht zu deinem Text.

FW_svgUpdateDevs in www/pgm2/svg.js klebt die ersten beiden Spalten aus Rcvd mit : zusammen, und prueft das Ergebnis mit dem Regexp.

Ja, ich ziehe diese Zeilen aus dem .gplot. Wieso soll das nicht richtig sein? FileLog-get verwendet doch die gleichen Regexps, um die Daten aus der Datei zu fischen.

Btw. ich bekomme auch im .gplot Editor die Events, wie bestellt.

Dr. Boris Neubert

Irgendwie ist der Wurm drin. Wollte gerade ein einfaches Setup generieren mit:

define myLog FileLog /opt/fhem/log/myLog.log comp.nas
define mySVG SVG myLog:myGPlot:CURRENT

Das Log ist auch schon gefüllt und ich kann mir die Inhalte über FHEMWEB ansehen.

myGPlot.gplot gibt es noch nicht.

Im GPlot-Editor von myGPlot werden mir keine "Example Lines" angezeigt und der Write-Knopf meckert auch, dass das Log keine Daten enthielte. Was läuft da schief?

--

Zum ausführlichen Beispiel oben: der .gplot-Editor hat mir aus der Beispielzeile

2015-01-17_18:25:57 comp.nas power: 45

den folgenden Eintrag in der .gplot-Datei gemacht:

#FileLog 4:comp.nas.power\x3a::

Das Regexp ist also

comp.nas.power:

Das matcht zwar die obige Zeile aber es matcht nicht das Event. Dafür müsste es

comp.nas:power.*

heißen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 10 Januar 2015, 21:29:32
[warum finde ich den Thread nicht über die Forumssuche  >:(   ]


Aber der Thread, den Du eigentlich wirklich suchst (auf den Rudi sich bezieht) ist ein dritter: http://forum.fhem.de/index.php/topic,30515.msg232736.html#msg232736
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

@betateilchen: ich vermute es geht um das urspruengliche Thread, was laut SVN log vom 2013-06-19 stammen muss.

@Boris: kannst du mir bitte einen Paket basteln aus: .gplot Datei (komplett), FileLog Definition und Daten, SVG Definition und ein Event, was das Neuladen ausloesen sollte. Ich sehe hier vile Infos, die mAn nicht zusammen passen bzw. mich verwirren (power.nas vs. 0.hr.edv.e usw.)