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
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.
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
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.
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
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.
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
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.
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
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.
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
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.
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
Zitat von: Dr. Boris Neubert am 10 Januar 2015, 21:29:32
[warum finde ich den Thread nicht über die Forumssuche >:( ]
- weil die Forumsuche in dieser bekackten Software eine Katastrophe ist
- weil Du Deinen ersten Beitrag seinerzeit in den Anfängerfragen geschrieben und den heute dort bestimmt nicht gesucht hast: http://forum.fhem.de/index.php/topic,26558.0.html
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
@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.)
Hallo Rudi,
anbei das gewünschte Päckchen. Doku und Schritte zur Reproduktion der beiden Probleme sind in der cfg-Datei.
Viele Grüße
Boris
Die .gplot Datei fehlt im Paket, habs selber zusammengereimt.
Ich habe keine Probleme mit den Beispielzeilen (siehe Anhang), ich habe deine config (Verzeichnisse angepasst) verwendet.
Ich meine dein Problem mit longpollSVG zu verstehen, ich habe im svg.js das : (bzw \x3a) in . umgewandelt, damit loest ein "set comp.nas power 116" ein reload aus, auch im Anhang zu sehen.
Hallo Rudi,
erstmal Danke für Deine Arbeit.
Ich habe mich zwischenzeitlich mal durch die Struktur von FHEM gewühlt, um zu verstehen, wie das alles zusammenpasst.
Der Knackpunkt besteht darin, dass ein Event aus nur zwei Teilen besteht: dem Device (in Form des zugehörigen Hashs) und einem String. Der String hat bei Änderungen von Readings immer (zumindest bei Verwendung des ReadingsUpdate-Mechanismus) die Form "reading: value" [Zeile 3740 in fhem.pl vor addEvent($hash, dieser String)]. Leider müssen wir also damit leben, dass Events nicht dreigliedrig sind und aus Device, Reading und Wert bestehen oder strukturiert, damit man auch Events wie DISCONNECTED, INITIALIZED, UNKNOWN usw. voneinander unterscheiden kann. Arbeit für ein anderes Leben.
Wir gehen also davon aus, dass Zeilen im FileLog die Form "timestamp device event" haben, mit event="reading: value" bei Readings. Also insgesamt "timestamp device reading: value".
Der GPlot-Editor in 98_SVG.pm benutzt die Funktion FileLog_sampleDataFn() aus 92_FileLog.pm, um die möglichen regulären Ausdrücke anzuzeigen. Und dieser Kamerad erzeugt in Zeile 929 bis 936 die Vorschläge für die regulären Ausdrücke.
Folgendes ist mir dabei aufgefallen:
- Diagramm label muss Diagram label in 98_SVG.pm heißen.
- Die Anzahl Spalten $colnums ist (manchmal) zu groß. Ursache dafür in den Zeilen 927 bis 939 habe ich nicht untersucht/verstanden. Ich habe mir dabei ein FileLog angesehen, wo in jeder Zeile 4 Spalten sind. Da wird 5 ausgewiesen. In dem Dir überlassenen Beispiel kommt sogar 12 heraus, obwohl in den Example Lines maximal 7 Spalten stehen.
Nun zu den regulären Ausdrücken: die Zeilen aus dem FileLog werden am Leerzeichen gesplittet. Dann wird in Zeile 934 der reguläre Ausdruck "$cols[1].$cols[2]" für das Reading und in Zeile 935 der reguläre Ausdruck "$cols[1].*" für das Device gebaut.
Meiner bescheidenen Meinung nach müssten die regulären Ausdrücke anders gebaut werden, nämlich "$cols[1] $cols[2]" und "$cols[1] .*" (Leerzeichen nach $cols[1]).
In meinem Beispiel wird dann aus der Setzung von 116 für das Reading power am Device comp.nas das Event ("comp.nas","power: 116"), der Logeintrag "timestap comp.nas power: 116" und der reguläre Ausdruck "comp.nas power:" für den GPlot.
Nun zum longpollSVG-Mechanismus:
Der müsste sich diesen regulären Ausdruck aus der .gplot-Datei ziehen, das endständige Kolon strippen, ihn am Blank in Name und Reading zerlegen, und für die Filterung nutzen. Das Problem derzeit ist wohl, das bei der Regexp in der GPlot-Datei nicht mehr erkennbar ist, was der Device-Name und was das Event ist.
Ich bin mir nicht sicher, wie Du es gelöst hast, weil ich mir die Filterung nicht angesehen habe, aber ich habe das Gefühl, dass noch nicht alles zusammenpasst.
Ich bin mir bewusst, dass mein Vorschlag für die Erzeugung der regulären Ausdrücke in der GPlot-Datei eine Anpassung bestehender GPlot-Dateien erfordert, um den Punkt im regulären Ausdruck zu löschen.
Viele Grüße
Boris
ZitatDiagramm label muss Diagram label in 98_SVG.pm heißen.
Geaendert.
ZitatDie Anzahl Spalten $colnums ist (manchmal) zu groß.
Stimmt, es war eins zu hoch. Ich kam bei deinem Beispiel aber nur auf 8, korrekt ist 7 (von 1 aus gezaehlt). Habs behoben.
ZitatLeerzeichen nach $cols[1]
So einfach ist das nicht, weil das FileLog get Syntax keine Leerzeichen beim Spezifizieren einer "Linie" erlaubt.
Und die Daten werden vom SVG Modul geholt, indem man nach "get FileLogName " alle Specs aus der .gplot Leerzeichen getrennt angibt. Gilt auch fuer DbLog und logProxy. Und ich sehe den Vorteil der Regexp mit Leerzeichen noch nicht.
ZitatDas Problem derzeit ist wohl, das bei der Regexp in der GPlot-Datei nicht mehr erkennbar ist, was der Device-Name und was das Event ist.
Das sollte aber egal sein. Hauptsache das Frontend bekommt genau die gleichen Daten, wie FileLog, dann koennen beide die gleichen Regexps zum filtern verwenden.
Zitatich habe das Gefühl, dass noch nicht alles zusammenpasst.
Wenn du dein Gefuehl mit einem Beispiel konkretisieren kannst, gehe ich dem gerne nach. In deinem obigen Paket fehlt ein konretes Event, evtl. uebersehe ich etwas, weil ich nicht mit den relevanten Events getestet habe.
Hallo Rudi,
Danke für Deine Änderungen. Ich habe mich heute daran getan, diese zu testen. Stand: was heute morgen per update kam.
Zitat von: rudolfkoenig am 21 Januar 2015, 21:23:36
Die Anzahl Spalten $colnums ist (manchmal) zu groß.
Stimmt, es war eins zu hoch. Ich kam bei deinem Beispiel aber nur auf 8, korrekt ist 7 (von 1 aus gezaehlt). Habs behoben.
Funktioniert.
Was noch nicht wieder geht, ist die Anzeige von "Example lines for input", wenn es noch keine .gplot-Datei gibt (siehe Doku in der oben angefügten .conf-Datei). Das dürfte es dem Anfänger sehr schwer machen, den GPlot-Editor zu benutzen und eine Konfiguration von Null an aufzubauen.
Die automatische Aktualisierung der SVG-Plot funktioniert auch noch nicht vollständig. Hier ein Auszug aus der JS-Konsole:
"11:58:59.798 Rcvd: ["0.hr.edv.e","2015-01-24 11:59:00","<div id=\"0.hr.edv.e\" class=\"col2\">2015-01-24 11:59:00</div>"]" fhemweb.js:147
"11:58:59.799 Rcvd: ["0.hr.edv.e-EP_POWER_METER","78","78"]" fhemweb.js:147
"11:58:59.799 Rcvd: ["0.hr.edv.e-EP_POWER_METER-ts","2015-01-24 11:59:00","2015-01-24 11:59:00"]" fhemweb.js:147
"11:58:59.799 Rcvd: ["0.hr.edv.e-state","2015-01-24 11:59:00","2015-01-24 11:59:00"]" fhemweb.js:147
"11:58:59.799 Rcvd: ["0.hr.edv.e-state-ts","2015-01-24 11:59:00","2015-01-24 11:59:00"]" fhemweb.js:147
"11:58:59.799 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:58:59.800 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:00.102 Rcvd: ["0.hr.edv.e","2015-01-24 11:59:00","<div id=\"0.hr.edv.e\" class=\"col2\">2015-01-24 11:59:00</div>"]" fhemweb.js:147
"11:59:00.103 Rcvd: ["0.hr.edv.e-state","2015-01-24 11:59:00","2015-01-24 11:59:00"]" fhemweb.js:147
"11:59:00.103 Rcvd: ["0.hr.edv.e-state-ts","2015-01-24 11:59:00","2015-01-24 11:59:00"]" fhemweb.js:147
"11:59:00.103 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:00.103 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:02.367 Rcvd: ["0.hr.rack.e","2015-01-24 11:59:02","<div id=\"0.hr.rack.e\" class=\"col2\">2015-01-24 11:59:02</div>"]" fhemweb.js:147
"11:59:02.374 Rcvd: ["0.hr.rack.e-state","2015-01-24 11:59:02","2015-01-24 11:59:02"]" fhemweb.js:147
"11:59:02.374 Rcvd: ["0.hr.rack.e-state-ts","2015-01-24 11:59:02","2015-01-24 11:59:02"]" fhemweb.js:147
"11:59:02.375 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:02.375 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:02.689 Rcvd: ["0.hr.rack.e","2015-01-24 11:59:02","<div id=\"0.hr.rack.e\" class=\"col2\">2015-01-24 11:59:02</div>"]" fhemweb.js:147
"11:59:02.690 Rcvd: ["0.hr.rack.e-EP_POWER_SWITCH","1","1"]" fhemweb.js:147
"11:59:02.690 Rcvd: ["0.hr.rack.e-EP_POWER_SWITCH-ts","2015-01-24 11:59:02","2015-01-24 11:59:02"]" fhemweb.js:147
"11:59:02.690 Rcvd: ["0.hr.rack.e-state","2015-01-24 11:59:02","2015-01-24 11:59:02"]" fhemweb.js:147
"11:59:02.690 Rcvd: ["0.hr.rack.e-state-ts","2015-01-24 11:59:02","2015-01-24 11:59:02"]" fhemweb.js:147
"11:59:02.691 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:02.691 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:03.359 Rcvd: ["0.hr.edv.e","2015-01-24 11:59:03","<div id=\"0.hr.edv.e\" class=\"col2\">2015-01-24 11:59:03</div>"]" fhemweb.js:147
"11:59:03.360 Rcvd: ["0.hr.edv.e-state","2015-01-24 11:59:03","2015-01-24 11:59:03"]" fhemweb.js:147
"11:59:03.360 Rcvd: ["0.hr.edv.e-state-ts","2015-01-24 11:59:03","2015-01-24 11:59:03"]" fhemweb.js:147
"11:59:03.360 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:03.360 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:06.896 Rcvd: ["0.hr.edv.e","2015-01-24 11:59:07","<div id=\"0.hr.edv.e\" class=\"col2\">2015-01-24 11:59:07</div>"]" fhemweb.js:147
"11:59:06.898 Rcvd: ["0.hr.edv.e-state","2015-01-24 11:59:07","2015-01-24 11:59:07"]" fhemweb.js:147
"11:59:06.898 Rcvd: ["0.hr.edv.e-state-ts","2015-01-24 11:59:07","2015-01-24 11:59:07"]" fhemweb.js:147
"11:59:06.898 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:06.899 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:08.187 Rcvd: ["0.hr.rack.e","2015-01-24 11:59:08","<div id=\"0.hr.rack.e\" class=\"col2\">2015-01-24 11:59:08</div>"]" fhemweb.js:147
"11:59:08.188 Rcvd: ["0.hr.rack.e-EP_POWER_METER","72","72"]" fhemweb.js:147
"11:59:08.189 Rcvd: ["0.hr.rack.e-EP_POWER_METER-ts","2015-01-24 11:59:08","2015-01-24 11:59:08"]" fhemweb.js:147
"11:59:08.189 Rcvd: ["0.hr.rack.e-state","2015-01-24 11:59:08","2015-01-24 11:59:08"]" fhemweb.js:147
"11:59:08.189 Rcvd: ["0.hr.rack.e-state-ts","2015-01-24 11:59:08","2015-01-24 11:59:08"]" fhemweb.js:147
"11:59:08.189 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:08.189 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:10.514 Rcvd: ["0.hr.edv.e","2015-01-24 11:59:10","<div id=\"0.hr.edv.e\" class=\"col2\">2015-01-24 11:59:10</div>"]" fhemweb.js:147
"11:59:10.515 Rcvd: ["0.hr.edv.e-EP_POWER_METER","77","77"]" fhemweb.js:147
"11:59:10.515 Rcvd: ["0.hr.edv.e-EP_POWER_METER-ts","2015-01-24 11:59:10","2015-01-24 11:59:10"]" fhemweb.js:147
"11:59:10.515 Rcvd: ["0.hr.edv.e-state","2015-01-24 11:59:10","2015-01-24 11:59:10"]" fhemweb.js:147
"11:59:10.516 Rcvd: ["0.hr.edv.e-state-ts","2015-01-24 11:59:10","2015-01-24 11:59:10"]" fhemweb.js:147
"11:59:10.516 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:147
"11:59:10.516 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER."
Ich sehe mit
inform timer 0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER.
die Events aber in der Anzeige tut sich nichts (SVG passt sich nicht an), obwohl die Änderungen mit
"11:59:10.515 Rcvd: ["0.hr.edv.e-EP_POWER_METER","77","77"]" fhemweb.js:147
propagiert werden. Der Grund scheint mir zu sein, dass in der Nachricht über die Änderung hinter dem METER kein Zeichen mehr kommt, und im longpollSVG filter der Punkt am Ende steht.
Reicht das als Bestätigung meines Gefühls, dass die Regexperei in FileLog, GPlot und JS sehr schwer zu durchschauen und zu warten ist?
Viele Grüße
Boris
ZitatDas dürfte es dem Anfänger sehr schwer machen, den GPlot-Editor zu benutzen und eine Konfiguration von Null an aufzubauen.
Der Anfaenger soll sich in Geduld ueben.
1. Warten bis events gekommen sind, dann kann man ein FileLog mit Dropdown erweitern.
2. Nochmal warten, bis Events in die Datei geschriebn sind, und danach die Plot-Datei bauen.
Ich wuesste nicht, wie ich das sonst mit Dropdown loesen sollte. Und wer kein Dropdown braucht, der kann die .gplot Datei direkt editieren.
ZitatDer Grund scheint mir zu sein...
Mir scheint der Grund zu sein, dass ich in svg.js Mist programmiert habe, und das doppelte Array nicht als solches geprueft habe. Warum es frueher bei meinem Tests durchgegangen ist, ist mir ein Raetsel.
ZitatReicht das als Bestätigung meines Gefühls, dass die Regexperei in FileLog, GPlot und JS sehr schwer zu durchschauen und zu warten ist?
Ich finde das, was wir jetzt haben, ist deutlich Anfaengerfreundlicher als das, was vor 2-3 Jahren gab. Ich lerne aber gerne dazu.
Zitat von: rudolfkoenig am 24 Januar 2015, 15:26:43
Der Anfaenger soll sich in Geduld ueben.
1. Warten bis events gekommen sind, dann kann man ein FileLog mit Dropdown erweitern.
2. Nochmal warten, bis Events in die Datei geschriebn sind, und danach die Plot-Datei bauen.
Bin mir nicht sicher, ob wir über die selbe Sache sprechen.
Zu meinen Arbeitsschritten:
Ich habe ein FileLog, das gefüllt ist. Ich lege von Hand in der Konfigurationsdatei ein SVG an mit dem FileLog und dem Namen einer Gplot-Datei, die es noch nicht gibt. Soweit alles händisch, weil ich gerne die alleinige volle Kontrolle über den Inhalt, Struktur und Aussehen der Konfigurationsdatei haben möchte (der Save-Knopf ist bei mir ausgeblendet).
Nun will ich mir die GPlot-Datei mit dem GPlot-Editor erstellen lassen. Früher hat mir der GPlot-Editor "Example Lines" aus dem FileLog angezeigt, auch wenn noch gar keine GPlot-Datei existierte. Ich konnte aus den Dropdowns auswählen, "Write .gplot File" drücken und fertig.
Mir geht es also nur darum, dass seit einem kürzlich erfolgten Umbau die Example Lines nur angezeigt werden, wenn es bereits eine GPlot-Datei gibt, während früher immer Example Lines im GPlot-Editor angezeigt wurden. Ich verstehe auch nicht (weder logisch noch nach Kontemplation des Codes), warum das nicht mehr geht.
Zitat
Mir scheint der Grund zu sein, dass ich in svg.js Mist programmiert habe, und das doppelte Array nicht als solches geprueft habe. Warum es frueher bei meinem Tests durchgegangen ist, ist mir ein Raetsel.
Ich habe jetzt mal nur schnell die svg.js ausgetauscht, aber sehe keine Besserung. Ich kann leider nicht auf meinem Entwicklungssystem mit einer vollständig aktuellen Codebasis testen, weil ich just für dieses Device IPv6 brauche, was hier nicht richtig funktioniert. Ich warte bis morgen früh und mache dann ein Update.
Zitat
Ich finde das, was wir jetzt haben, ist deutlich Anfaengerfreundlicher als das, was vor 2-3 Jahren gab. Ich lerne aber gerne dazu.
Ich bezog mich nicht auf das User-Interface und die Anfänger. Das hat enorme Fortschritte gemacht.
Ich bezog mich auf mich armen Entwickler, der die Komplexität im Zusammenspiel zwischen Events, Regexps, FileLogs, GPlot-Editor, SVG, JS und FHEMWEB nicht mehr überblickt, und nun nicht mehr selbst Hand anlegen kann, um identifizierte Probleme zu reparieren.
Viele Grüße
Boris
ZitatMir geht es also nur darum, dass seit einem kürzlich erfolgten Umbau die Example Lines nur angezeigt werden, wenn es bereits eine GPlot-Datei gibt
Aah.
Da SVG neuerdings mehrere Quellen (FileLog/LogProxy/etc) unterstuetzt, muss man als erstes fuer eine Line die Quele festlegen und Write .gplot ausfuehren, damit man Beispiele sieht. Sonst muesste der Editor von allen existierenden Quellen die Beispieldaten abholen, und nicht nur von den vorhandenen, und das fand ich zuviel.
Zitat von: rudolfkoenig am 24 Januar 2015, 16:23:48
Da SVG neuerdings mehrere Quellen (FileLog/LogProxy/etc) unterstuetzt, muss man als erstes fuer eine Line die Quele festlegen und Write .gplot ausfuehren, damit man Beispiele sieht. Sonst muesste der Editor von allen existierenden Quellen die Beispieldaten abholen, und nicht nur von den vorhandenen, und das fand ich zuviel.
Das SVG-Device wird also qua GPlot-File an seine Quellen gebunden. Habe das auch gerade mal ausprobiert: je nachdem, welche Quelle man im GPlot-Editor auswählt, erscheinen die entsprechenden Beispielzeilen. Sehr hübsch.
Aber was hält Dich davon ab, auch ohne GPlot-File die Quellen in einem Dropdown anzuzeigen? Die suchst Du Dir ja immer alle zusammen, egal was im GPlot-File an Quellen verzeichnet ist.
Und wozu wird das Internal $hash->{LOGDEVICE} denn noch benötigt (siehe auch Doku zu SVG)?
Viele Grüße
Boris
ZitatAber was hält Dich davon ab, auch ohne GPlot-File die Quellen in einem Dropdown anzuzeigen?
Wie geschrieben:
ZitatSonst muesste der Editor von allen existierenden Quellen die Beispieldaten abholen, und nicht nur von den vorhandenen, und das fand ich zuviel.
ZitatUnd wozu wird das Internal $hash->{LOGDEVICE} denn noch benötigt (siehe auch Doku zu SVG)?
Fuer Kompatibilitaet mit alten .gplot Dateien, fuer ad-hoc SVG Dateien (die urspruenglich Form, aufgerufen vom FileLog-Raum-Ansicht), und noch ein Sonderfall, was mir jetzt nicht genau einfaellt. Im Prinzip koennte es aber weg.
Habe nochmal mit dem Gplot-Editor herumgespielt und jetzt verstanden, was Sache ist: wenn ich die Quelle in der linken Dropdown-Box auswähle, passiert noch nichts. In der rechten Dropdown-Box werden nur die Regexps zu der bereits vorhandenen Quelle angezeigt. Das ist kontraintuitiv. Erst wenn ich speichere (und vorher nicht vergesse, ein Label einzutragen), werden die Example Lines für diese Quelle vorgeladen. Versteht das der durchschnittliche Anwender und bin nur ich die ganze Zeit zu blöd gewesen?
Intuitiv würde ich erwarten, dass die jeweiligen Example Lines angezeigt werden und die rechte Dropdown-Box mit Regexps befüllt wird, sobald ich in der linken Dropdown-Box die Quelle wähle (on the fly).
Idealerweise zeigt der Gplot-Editor immer (also auch bei fehlenden oder kaputten Quellenangaben in der Gplot-Datei oder bei fehlender Gplot-Datei) eine leere Zeile mit Eingabefeld für das Label, Dropdown-Box mit Quellen (voreingestellt auf die erste aus der Liste) und Dropdown-Box mit den zugehörigen Regexps an, und darunter die Example Lines für die Zeile, die man gerade editiert.
Ist vermutlich sehr viel Arbeit, das umzusetzen.
Viele Grüße
Boris
ZitatIdealerweise zeigt der Gplot-Editor immer (also auch bei fehlenden oder kaputten Quellenangaben in der Gplot-Datei oder bei fehlender Gplot-Datei) eine leere Zeile mit Eingabefeld für das Label, Dropdown-Box mit Quellen (voreingestellt auf die erste aus der Liste) und Dropdown-Box mit den zugehörigen Regexps an, und darunter die Example Lines für die Zeile, die man gerade editiert.
oder fhem.log als quelle. sollte ja jeder haben. ich kann diese verwirrung nachvollziehen.
wo wir schon mal an dieser stelle sind, kann ich mir folgenden wunsch nicht verkneifen. könnte man nicht alle files, die im logverzeichnis sind, als quelle auswählbar machen. also auch files zulassen, zu denen es kein filelog-device gibt. ich denke da an daten, die sonstwo entstanden sind. eventuell sogar auf einem anderen fhem system.
@Boris: Kompromiss: beim Focus in den neuen Zeile wird im Example-Fenster ein Hilfetext angezeigt:
ZitatSet the label and 'Write .gplot file' first in order to get example data and correct parameter choice
@frank: da SVG auf eine Quelle angewiesen ist, muesste man dafuer temporaere FileLogs anlegen, was vermutlich mit sehr viel Nebeneffekten verbunden ist, weiterhin funktioniert es nicht fuer die DbLog Leute.
Zitat von: rudolfkoenig am 25 Januar 2015, 15:40:32
@Boris: Kompromiss: beim Focus in den neuen Zeile wird im Example-Fenster ein Hilfetext angezeigt:
Damit kann ich leben.
Dazu muss der GPlot-Editor im Gegensatz zu jetzt auch eine .gplot-Datei erzeugen, wenn noch keine Quellen ausgewählt sind. Im Moment weigert er sich in diesem Fall.
Viele Grüße
Boris
Hallo Rudi,
Zitat von: rudolfkoenig am 24 Januar 2015, 15:26:43
Mir scheint der Grund zu sein, dass ich in svg.js Mist programmiert habe, und das doppelte Array nicht als solches geprueft habe. Warum es frueher bei meinem Tests durchgegangen ist, ist mir ein Raetsel.
bin auf der Version per update von heute morgen (plus aktualisiertes fhem.pl von heute Nachmittag).
Die Plots werden nicht aktualisiert.
In der JS-Konsole sehe ich
longpollSVG filter:0.hr.edv2.e.EP_POWER_METER.|0.hr.edv2.e.EP_ENERGY_METER.
und
inform timer 0.hr.edv2.e.EP_POWER_METER.|0.hr.edv2.e.EP_ENERGY_METER.
zeigt mir das Events einlaufen. Dazu sagt die JS-Konsole
"20:10:25.065 Rcvd: ["0.hr.edv2.e-EP_ENERGY_METER","0.0076175001449883","0.0076175001449883"]" fhemweb.js:154
"20:10:25.065 Rcvd: ["0.hr.edv2.e-EP_ENERGY_METER-ts","2015-01-25 20:10:25","2015-01-25 20:10:25"]" fhemweb.js:154
Hilft Dir das bei der Fehlersuche weiter?
Du bist sicher, dass die endständigen Punkte hinter der regexp egal sind? Die regexp
0.hr.edv2.e-EP_ENERGY_METER.
matcht nämlich nicht
0.hr.edv2.e-EP_ENERGY_METER
.
Viele Grüße
Boris
Der Regexp 0.hr.edv2.e-EP_ENERGY_METER. sollte matchen, da es nicht mit 0.hr.edv2.e-EP_ENERGY_METER sondern mit 0.hr.edv2.e-EP_ENERGY_METER:0.0076175001449883 verglichen wird. Ausschnitt:
log("longpollSVG filter:"+flog);
for(var j=0; j < devs.length; j++) {
var d = devs[j];
var ev = d[0]+":"+d[1];
if(ev.match(flog)) {
log("longpollSVG: reload SVG");
Im log sieht man vorher die Ausgabe von d. In der alten Version habe ich auf devs[0]:devs[1] geprueft, was natuerlich Unsinn war. Kannst du bitte ev auch noch ausgeben?
Zitat von: rudolfkoenig am 26 Januar 2015, 07:35:47
Im log sieht man vorher die Ausgabe von d. In der alten Version habe ich auf devs[0]:devs[1] geprueft, was natuerlich Unsinn war. Kannst du bitte ev auch noch ausgeben?
Du meinst in den Ausgaben auf der JS-Konsole?
Weißt Du, ob man die Ausgaben der JS-Konsole beim Firefox in eine Datei leiten kann? Das rauscht sonst alles nur so vorbei.
Kann sein, dass ich mich erst am Wochenende wieder melde, weil ich höchstens noch heute spät abends kurz an meinen Rechner komme.
Viele Grüße
Boris
Hallo Rudi,
Zitat von: rudolfkoenig am 25 Januar 2015, 15:40:32
@Boris: Kompromiss: beim Focus in den neuen Zeile wird im Example-Fenster ein Hilfetext angezeigt:
habe das gerade getestet mit negativem Ergebnis (per Update von gestern Abend):
- Log ist gefüllt.
- .gplot-Datei fehlt noch; auf der Detail-Seite des SVG zeigt mir der GPlot-Editor Cannot read /opt/fhem/www/gplot/Test.gplot an.
- Die erste, noch leere Zeile für eine Datenzeitreihe ist da. Ebenso der Hinweistext Example lines for input:
Set the label and 'Write .gplot file' first in order to get example data and correct parameter choice. - Ich schreibe Power / W in das Label-Feld und drücke den Write-Knopf.
- Ich werde auf die Detail-Seite zurückgeworfen, der allerdings der ganze Anfang fehlt (Beginnt mit dem Fehlertext und geht weiter mit <table><tr>.... vom GPlot-Editor. Ganz oben steht: missing data in logfile: won't write incomplete .gplot definition
Viele Grüße
Boris
Hallo Rudi,
Zitat von: rudolfkoenig am 26 Januar 2015, 07:35:47
Im log sieht man vorher die Ausgabe von d. In der alten Version habe ich auf devs[0]:devs[1] geprueft, was natuerlich Unsinn war. Kannst du bitte ev auch noch ausgeben?
Bitte finde hier hoffentlich alle erforderlichen Angaben:
1. GPlot-Datei im Anhang.
2. Events: Ausgabe von
inform timer 0.hr.edv2.e.EP_POWER_METER.
liefert auf der Konsole:
fhem> 2015-01-31 08:44:27 HXBDevice 0.hr.edv2.e EP_POWER_METER: 105.11093091167
3. Zum selben Zeitpunkt zeichnet mir die JS-Konsole folgendes auf:
"08:44:27.081 Rcvd: ["0.hr.edv.e","2015-01-31 08:44:27","<div id=\"0.hr.edv.e\" class=\"col2\">2015-01-31 08:44:27</div>"]" fhemweb.js:154
"08:44:27.089 Rcvd: ["0.hr.edv.e-state","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.089 Rcvd: ["0.hr.edv.e-state-ts","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.090 Rcvd: ["0.hr.edv2.e","2015-01-31 08:44:27","<div id=\"0.hr.edv2.e\" class=\"col2\">2015-01-31 08:44:27</div>"]" fhemweb.js:154
"08:44:27.091 Rcvd: ["0.hr.edv2.e-EP_POWER_METER","105.11093091167","105.11093091167"]" fhemweb.js:154
"08:44:27.092 Rcvd: ["0.hr.edv2.e-EP_POWER_METER-ts","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.092 longpollSVG filter:0.hr.edv2.e.EP_POWER_METER." fhemweb.js:154
"08:44:27.093 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:154
"08:44:27.093 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:154
"08:44:27.093 longpollSVG filter:comp.nas.drivepm.|comp.nas.drivepm.|comp.nas.drivepm.|comp.nas.drivepm." fhemweb.js:154
"08:44:27.093 longpollSVG filter:comp.nas.power." fhemweb.js:154
"08:44:27.094 longpollSVG filter:comp.nas.PeripheralTemp.|comp.nas.SystemTemp.|comp.nas.CPUTemp." fhemweb.js:154
"08:44:27.094 longpollSVG filter:0.hr.vent.*" fhemweb.js:154
"08:44:27.667 Rcvd: ["0.hr.rack.e","2015-01-31 08:44:27","<div id=\"0.hr.rack.e\" class=\"col2\">2015-01-31 08:44:27</div>"]" fhemweb.js:154
"08:44:27.668 Rcvd: ["0.hr.rack.e-state","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.668 Rcvd: ["0.hr.rack.e-state-ts","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.668 longpollSVG filter:0.hr.edv2.e.EP_POWER_METER." fhemweb.js:154
"08:44:27.668 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:154
"08:44:27.669 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:154
"08:44:27.669 longpollSVG filter:comp.nas.drivepm.|comp.nas.drivepm.|comp.nas.drivepm.|comp.nas.drivepm." fhemweb.js:154
"08:44:27.669 longpollSVG filter:comp.nas.power." fhemweb.js:154
"08:44:27.669 longpollSVG filter:comp.nas.PeripheralTemp.|comp.nas.SystemTemp.|comp.nas.CPUTemp." fhemweb.js:154
"08:44:27.669 longpollSVG filter:0.hr.vent.*" fhemweb.js:154
"08:44:27.942 Rcvd: ["0.hr.rack.e","2015-01-31 08:44:27","<div id=\"0.hr.rack.e\" class=\"col2\">2015-01-31 08:44:27</div>"]" fhemweb.js:154
"08:44:27.943 Rcvd: ["0.hr.rack.e-state","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.944 Rcvd: ["0.hr.rack.e-state-ts","2015-01-31 08:44:27","2015-01-31 08:44:27"]" fhemweb.js:154
"08:44:27.944 longpollSVG filter:0.hr.edv2.e.EP_POWER_METER." fhemweb.js:154
"08:44:27.944 longpollSVG filter:0.hr.edv.e.EP_POWER_METER.|0.hr.edv.e.EP_ENERGY_METER." fhemweb.js:154
"08:44:27.944 longpollSVG filter:0.hr.rack.e.EP_POWER_METER.|0.hr.rack.e.EP_ENERGY_METER." fhemweb.js:154
"08:44:27.944 longpollSVG filter:comp.nas.drivepm.|comp.nas.drivepm.|comp.nas.drivepm.|comp.nas.drivepm." fhemweb.js:154
"08:44:27.944 longpollSVG filter:comp.nas.power." fhemweb.js:154
"08:44:27.944 longpollSVG filter:comp.nas.PeripheralTemp.|comp.nas.SystemTemp.|comp.nas.CPUTemp." fhemweb.js:154
"08:44:27.944 longpollSVG filter:0.hr.vent.*" fhemweb.js:154
Viele Grüße
Boris
Zitat.gplot-Datei fehlt noch
Der Editor kann keine .gplot Datei erstellen, nur eine existierende modifizieren.
Aus diesem Grund fuehrt "Create SVG plot" im FileLog Detail-Ansicht folgende Befehle aus:
define SVG_Log.FileLogName SVG FileLogName:template:CURRENT
set SVG_Log.FileLogName copyGplotFile
ZitatBitte finde hier hoffentlich alle erforderlichen Angaben:
Ich habe versucht, mit den Daten aus deinem JavaScript Log das Problem Nachzustellen, kann ich aber nicht. Die plausibelste Erklaerung ist fuer mich, dass dein Browser eine verarltete Version von svg.js verwendet. Kannst du bitte (wie geschrieben) zwischen den beiden Zeilen in svg.js:
var ev = d[0]+":"+d[1];
if(ev.match(flog)) {
eine zusaetzliche mit
log(ev);
einbauen?
Zitat von: rudolfkoenig am 31 Januar 2015, 13:24:22
Ich habe versucht, mit den Daten aus deinem JavaScript Log das Problem Nachzustellen, kann ich aber nicht. Die plausibelste Erklaerung ist fuer mich, dass dein Browser eine verarltete Version von svg.js verwendet. Kannst du bitte (wie geschrieben) zwischen den beiden Zeilen in svg.js:
...
einbauen?
Sorry, hatte ich überlesen.
svg.js von gestern abend, sieht jetzt so aus:
Zitat
...
log("longpollSVG filter:"+flog);
for(var j=0; j < devs.length; j++) {
var d = devs[j];
var ev = d[0]+":"+d[1];
log("###"+ev+"###");
if(ev.match(flog)) {
log("longpollSVG: reload SVG");
...
FHEM und Browser neu gestartet.
Ich bekomme weiterhin meine Events in der FHEM-Konsole aber auf der JS-Konsole kommt gar nichts mehr an.
Ich baue jetzt eine auch von Dir einsetzbare Testumgebung mit dem aktuellen SVN-Stand auf und melde mich dann wieder.
Grüße
Boris
Hallo Rudi,
bitte finde anbei eine Konfigurationsdatei. Diese enthält auch eine Anleitung, wie Du testen kannst.
Außerdem ist ein Log von der JS-Konsole drin mit dem zusätzlichen Logging. Daran kannst Du schon ohne Testlauf die Ursache des Problems erkennen (Zeilen der Form ###...### mit dem longpollSVG-Filter vergleichen).
Viele Grüße
Boris
Ich glaub, ich habe es jetzt gefunden.
Habe fhemweb.js angepasst, und eingecheckt.
Hallo Rudi,
1)
Danke für die Anpassung. Mit der von mir bereit gestellten Testkonfiguration funktioniert es nun. Wenn ich nun mein Namensschema mit den Punkten im Namen verwende, passiert folgendes:
a) Ausgehend von "Create SVG Plot" in der Detailsicht des FileLog verweigert der GPlot-Editor die Arbeit (keine sinnvolle Zeile).
b) Wenn ich die GPlot-Datei von Hand anlege, funktioniert es dennoch nicht.
Neue veränderte Testkonfiguration anbei (31859-2.cfg).
2)
Das Problem, dass man trotz existierendem SVG-Device bei fehlender GPlot-Datei im GPlot-Editor nicht weiterkommt, könnten wir mit beigefügtem Patch lösen. Er nimmt bei fehlender GPlot-Datei das Template. Komischerweise funktioniert der GPlot-Editor aber nach dem ersten "Write .gplot File" nicht mehr. Das ist mir unerklärlich.
Viele Grüße
Boris
Nachtrag:
3)
Im Modus "Line" stimmt etwas mit der Anzeige nicht. Es müssen mehr als drei Punkte sein, um überhaupt etwas zu sehen, und der letzte wird nicht gezeigt. Man sieht das rasch, wenn man mit meiner obigen Testumgebung drei Werte 5, 10, 20 eingibt und im GPlot-Editor zwischen Punkten und Linien hin- und herstellt. Wenn man noch 1000 dazu eingibt, sieht man die die ersten drei mit Linien verbunden aber die 1000 fehlt. Vermutlich ein Nebeneffekt der Spline-Interpolation.
Vorneweg: ich finde die Idee mit nc und ECMD klasse.
1a) Ist wohl ein SVG Fehler (Invalid path attribute), sieht man im JS Konsole. Entsteht durch eine Optimierung bei line, cubic & co, falls die letzten x Werte im SVG identisch sind. Habs gefixt und eingecheckt.
1b) ist vermutlich mit 1a) identisch.
2) habs eingecheckt, bei mir funktioniert es.
3) ist vermutlich auch das in 1a) beschriebene Geschichte.
Anmerkung zu 2: Hat auch jemand an DbLog Anwender gedacht? Die brauchen als template nämlich die templateDB.gplot
Zitat von: rudolfkoenig am 01 Februar 2015, 14:55:48
Vorneweg: ich finde die Idee mit nc und ECMD klasse.
Schön. Dabei war es eigentlich ein Akt der Verzweiflung. ;D
Zitat
1a) Ist wohl ein SVG Fehler (Invalid path attribute), sieht man im JS Konsole. Entsteht durch eine Optimierung bei line, cubic & co, falls die letzten x Werte im SVG identisch sind. Habs gefixt und eingecheckt.
1b) ist vermutlich mit 1a) identisch.
2) habs eingecheckt, bei mir funktioniert es.
3) ist vermutlich auch das in 1a) beschriebene Geschichte.
1) Einen neuen Plot aus dem FileLog heraus mit "Create SVG Plot" anlegen funktioniert auch bei mir jetzt.
2) Ein SVG-Gerät ohne existierende GPlot-Datei mit dem GPlot-Editor bearbeiten funktioniert bei mir immer noch nicht. Du kannst es nachstellen, wenn Du die beiden auskommentierten Zeilen nach
# Plot ... in 31859-2.cfg aktivierst und vor dem Test noch sicher stellst, dass kein myGplot.gplot im GPlot-Verzeichnis liegt. Man sieht dann den SVG-Plot mit den Werten aus dem Template. Er zeigt aber keine FileLogs an. "Write .gplot" schickt dann den Browser in die Wüste.
3) Funktioniert.
Werde morgen ein Update fahren und auf dem Produktivsystem das Ganze nochmal anschauen und gelegentlich auch noch zwei saubere Templates beisteuern.
Grüße
Boris
Zitat von: betateilchen am 01 Februar 2015, 16:53:05
Anmerkung zu 2: Hat auch jemand an DbLog Anwender gedacht? Die brauchen als template nämlich die templateDB.gplot
Ja ich.
Grüße
Boris
Nicht unbedingt, im Editor kann man neuerdings alle verfuegbaren Datenquellen auswaehlen, und damit von FileLog auf DbLog umstellen. Oder diese gemischt verwenden.
Dann muss man das vermutlich in der 93_DbLog irgendwann anpassen. Wenn ich in der Detailansicht eines DbLog-Devices auf "Create SVG plot" klicke, wird die templateDB gezogen.
Sollte doch auch egal sein.
Hallo Rudi,
meine Tests haben ergeben, dass mit der aktuellen Version alles läuft, wie ich es mir vorstelle:
- Aktualisierung der Plots findet statt.
- GPlot-Editor funktioniert auch, wenn man das SVG-Device ohne vorhandene .gplot-Datei von Hand angelegt hat.
Besten Dank für Deine Arbeit.
Grüße
Boris