eCharts in FHEM (Version 0.0.12.1)

Begonnen von andies, 06 Februar 2024, 22:06:15

Vorheriges Thema - Nächstes Thema

MadMax

Sieht cool aus, ist die intigration von DBLog geplant?

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

MadMax

#16
Hallo,

ich habe das einfach mal auskommentiert, prinzipiell funktioniert DBLog also ;)
Du verwendest ja die funktion von SVG.

    #if(!IsDevice($1, "FileLog")) {
    #    return "failed: LogDevice ".$1." does not exist or is not of TYPE=FileLog"; #cannot handle DbLog at the moment
    #}

Die Min/Max werte werden wohl nicht übernommen.

Gruß
Max

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

andies

Zitat von: MadMax am 25 Februar 2024, 15:25:24Sieht cool aus, ist die intigration von DBLog geplant?
Hallo Max, ich habe derzeit kein DbLog und hatte das deshalb auskommentiert. Bei der nächsten Version mache ich das rein, dann schauen wir mal. Nur etwas Vorsicht: Ich hatte (gerade wieder) Abstürze von FHEM, weil ich da Fehler mache. Also wenn du das produktiv einsetzt, und ich kann das ja nicht testen, kann es den einen oder anderen Absturz geben, besser gut sichern.

Das mit den Minima und Maxima verstehe ich nicht. Die wurden bei SVG separat ermittelt, das macht aber inzwischen eCharts für mich. Ich muss nur die Daten holen und mW ist der Prozess so, dass es fast egal ist, ob die Daten im Format FileLog oder DbLog vorliegen. Es gibt da eine interne Variable ($da), da sind die Daten drin und mehr brauche ich eigentlich nicht. Theoretisch (siehe oben) sollte das also gehen.

Sobald ich das rendern (da verstehe ich nämlich etwas nicht) hinkriege, gibt es eine neue Version und da ist dann DbLog freigegeben. 
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: MadMax am 25 Februar 2024, 15:45:51Die Min/Max werte werden wohl nicht übernommen.
Ach so, das musst Du einstellen:
attr myChart marker <ich kenne jetzt den 'title' der Datenreihe in der gplot-Datei nicht>:max,avg
wobei der title aus dieser Zeile sein muss
plot "<IN>" using 1:2 axes x1y1 title 'Kern' ls l0 lw 1 with lines(Steht alles in der Hilfedatei des Moduls)
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Ich meine damals das die Skala immer beo 0 beginnt und nicht bei z.b. 3000mV in meinem beispiel.

Ich konnte das mit
min => 'dataMin', max => 'dataMax'

In Zeile 574 und 580 lösen.

Eventuell kannst du das eleganter übernehmen.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

andies

Gute Idee, danke!

Wenn da feste Werte gegeben sind, werde ich versuchen die aus ,,y2range" etc zu übernehmen. Aber wie erkenne ich die Anwendung von dataMin? Man könnte das aus ,,y2range=[min:max]" auslesen - ich weiß aber, dass andere da halsbrecherische Konstruktionen haben. Da weiß ich nicht, wie ich die erkennen soll; evtl. finde ich den Code in SVG.pm.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Habe ich jetzt eingebaut. Das ist wie folgt:
  • Man kann das direkt in der gplot-Datei eingeben, da wird nun auch min:max erkannt (was mW bei gplot nicht geht).
  • Man kann das aber auch mit einem Attribut überschreiben, das Attribut heißt yrange und gilt für beide y-Achsen.
Details stehen in dem Hilfetext, wenn man das Attribut aufruft. Das erkläre ich gern noch ausführlicher, wenn der Text nicht klar ist.

Ist jetzt Version 0.0.8, oben.

Ich war etwas faul und habe getrickst, da bleibt ein TODO. Ich kann derzeit nur die ersten beiden y-Achsen (also yrange und y2range) so beeinflussen. Mir ist inhaltlich nicht klar, wieso man mehr als zwei y-Achsen haben sollte, das wird ja total unübersichtlich. Also habe ich da etwas zweimal programmiert (einmal yrange, einmal y2range) und nicht eine Schleife über alle möglichen 8 y-Achsen geschrieben. Ist, wie gesagt, ein TODO.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Hallo andies,

ich war mal so frech ein wenig zu basteln.

Zeile 398, zwei neue Arrays für die Legende, Name und Farbe.
Zeile 423, befüllen des Namen für die Legende
Zeile 483, befüllen der Farbe für die Legende (Positiver Nebeneffekt, die Farbe beim Moseover in der Tooltip Box werden auch korrekt angezeigt)
Zeile 541, neues Attribus für die Hintergrundfarbe
Zeile 543, übergebend er Colors
Zeile 544, übergebend er Legende
Zeile 584, hmin und hmax mit "dataMin" und "dataMax" vorbelegen (Verhalten wie beim SVG)
Zeile 616, hmin und hmax mit "dataMin" und "dataMax" vorbelegen (Verhalten wie beim SVG)
Zeile 740, attribut backgroundColor hinzugefügt


So finde ich das jetzt brauchbar und beser als die SVGs.
Danke dafür!

Das einzige was noch nicht geht und was ich jetzt noch nicht rausgefunden habe ich das ich wie im SVG auf den vorherigen Tag wechsel kann.
Du darfst diesen Dateianhang nicht ansehen.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

andies

Super, danke dafür! Das stelle ich oben als Version 0.0.8.1 ein, richtig?

Ja, das mit den Links in der SVG ist mir auch schon aufgefallen. Da ist das Problem, dass sich SVG den Bereich der herauszulesenden Daten aus einem GET holt - was bei eCharts ja nicht geht. Hier müssen alle Daten im Voraus geladen werden. Ich habe momentan keine Idee, wie man das lösen kann (natürlich so, wie das in den  ersten Versionen war - ich lade das ganze Jahr und das dauert dann ewig). Buttons in der eChart bringen ja nichts, man muss auf eine neue HTML-Seite kommen.

Ich kämpfe noch mit dem rendern, weil ich die Bilder per Telegram verschicken will. Das will ich noch einbauen, da werde ich wohl auf Node.js zurückgreifen. Das ganze war bei SVG einfacher, da gab es einfache Bibliotheken und fertig.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

PS Mir juckt das so ein wenig in den Finger, wenn man sich das mal anschaut:
mehrere x-Achsen in eCharts
Da könnte man zB Daten aus zwei (identischen) Zeitperioden miteinander vergleichen. Wie war der Stromverbrauch gestern und vorgestern? Wie war die Regenmenge dieses Jahr und letztes Jahr usw usf. Man müsste dazu nur die Daten etwas anders speichern (derzeit sind die in einem array, also Datum und Wert zusammen - das müsste man trennen) und dann wäre das auch möglich.

Leider habe ich keinen richtigen Anwendungsfall dafür und vor allem fehlt mir eine Idee, wie der Nutzer halbwegs vernünftig eingibt, dass er so etwas haben will und man diesen doch speziellen Fall leicht erkennt. Eine Variante wäre "x1y1" und "x2y1" in der gplot-Datei zum Beispiel, dann muss aber auch gesagt werden, wie zeitversetzt das ist (Tage? Wochen? XTage?...). Es gibt so viele Möglichkeiten in eCharts, da ist die richtige GUI für den Nutzer das größere Problem. Das muss ja bedienbar bleiben und nicht eine Programmieraufgabe für jeden Anwender.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Das klingt alles sehr interessant.
Wo holt das SVG mit einem GET die zeitspanne? Habe ich in der 98_SVG.pm so nicht gefunden.
Wenn es ok für dich ist würde ich ein wenig mit basteln und die Änderungen hier mit posten?
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

carlos

Ich habe hier noch ein Problem mit den Umlauten.
Im svg steht "Füllstand".

Gruß

Hubert
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

andies

#27
Zitat von: MadMax am 27 Februar 2024, 17:28:26Wo holt das SVG mit einem GET die zeitspanne?...
Wenn es ok für dich ist würde ich ein wenig mit basteln und die Änderungen hier mit posten?

Sehr gern - wir müssen nur koordinieren, dass wir uns nicht in die Quere kommen (sonst ändern wir parallel und müssen das zusammenführen, geht aber auch). Da ich die nächste Zeit nicht unendlich viel daran arbeiten kann, passt das schon und wir können uns ja absprechen, wer woran bastelt.

Zu dem Zeitholen. Die Daten aus den Logfiles bzw DbLog werden durch einen FHEM-Befehl ausgelesen, Zeile 1271 (Zeilennummern in SVG.pm)
    my $cmd = "get $src $fname INT $f $t ".$s->{arg};
(so einen Befehl kann man ja auch in die Kommandozeile eingeben,
get FileLog_GartentorTemp CURRENT INT 2024-02-27_01:35:00 2024-02-27_16:34:59 4:Gartentor.temperatur.*::)
und $f und $t oben sind dann $from und $to. Dieser Befehl schreibt die Daten dann in $da (Zeile ca. 1168), und dort werden sie dann weiterverarbeitet.

Die Variablen $f und $t wiederum werden übergeben in SVG_getData($$$$$). Und diese Funktion kommt aus verschiedenen Quellen, aber markant ist zB Zeile 649ff.
# Debugging: show the data received from GET
sub SVG_showData()
oder Zeile 1159, da wird das auch geholt, oder Zeile 975 (Definition $SVG_devs{$d}{from}) usw usf.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: carlos am 27 Februar 2024, 17:46:13Ich habe hier noch ein Problem mit den Umlauten.
Ja, das habe ich auch. Das scheint ein encoding-Problem zu sein. Ich weiß nicht Recht, wie man das in den Griff bekommt. Intern schreibe ich jetzt ue statt ü, nicht die beste Lösung.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

MadMax

Beim SVG wird die Zeitspanne und der Anfang ja über den link im Browser übertragen. Ich habe nur nicht gefunden wie das beim SVG ausgelesen wird.

Das mit dem Koprdinieren und zusammen führen sollten wir doch hinbekommen.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax