FTUI Neue Version chart_widget

Begonnen von eki, 31 Januar 2016, 00:17:26

Vorheriges Thema - Nächstes Thema

eki

Da das Chart Widget eigentlich alles kann, was der FileLog get Befehl kann, geht der logproxy Ansatz sicher auch irgendwie. Am einfachsten wäre vermutlich eine Funktion zu schreiben, und die über Logproxy zu verwenden (so ähnlich, wie das im Chart Wiki auch als Beispiel für die Wetter harts vorgeschlagen wird).

uwirt

Das wurde hier zwar scheint mir schon mal besprochen. Nur leider kriege ich das nicht hin. Vielleicht kann mir jemand helfen:

Die Zeile im in der Log-Datei sieht folgendermassen aus:
2020-12-28_18:45:32 Mean_Barometer filteredPressure: 0
2020-12-28_18:45:32 Mean_Barometer Pressure: 839.5
2020-12-28_18:45:32 Mean_Barometer CurrTemp: -3.3
2020-12-28_18:45:32 Mean_Barometer CurrVap: 4.11040772566799
2020-12-28_18:45:32 Mean_Barometer relPressure: 995.385029834631
2020-12-28_18:45:32 Mean_Barometer filteredPressure: 0
2020-12-28_18:45:32 Mean_Barometer Pressure: 839.5
2020-12-28_18:45:32 Mean_Barometer CurrTemp: -3.3
2020-12-28_18:45:32 Mean_Barometer CurrVap: 4.11040772566799
2020-12-28_18:45:32 Mean_Barometer relPressure: 995.385029834631



Ich möchte "relPressure" darstellen:

div data-type="simplechart"
     data-device="Mean_Barometer"
     data-logdevice="FileLog_DOIF_Barometer"
     data-columnspec="4:relPressure\\x3a" 
     data-minvalue="auto"
     data-maxvalue="auto"
     data-yticks="2.50"
     data-width="375px"
     data-height="105px"
     data-daysago="1"
     data-yunit=" hPa"
     class="top-space">
</div>



Es wird keine Kurve gezeichnet!
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

eki

Du verwendest data-type="simplechart", der Thread hier bezieht sich auf data-type="chart". Bei simplechart werden einige Dinge anders funktionieren. Entweder, Du stellst auf chart um oder, Du kannst es mal mit (ist aber nur eine Vermutung)
data-columnspec="4:relPressure.*" versuchen.

CQuadrat

Zitat von: eki am 06 Juli 2020, 08:58:38
Mit 'bars' und 'ibars' funktioniert das Stapeln leider noch nicht, da muss ich mir noch mal Gedanken machen, wie ich das einbauen kann (hat aber noch nie funktioniert).

ibars funktioniert immer noch nicht richtig? Korrekt?
Wenn ja, würde ich mich selber mal am Code probieren.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

eki

Ich hatte da im Nachgang der genannten Info noch einiges gemacht und verbessert. Ob das aber in allen Kombinationen funktioniert, kann ich schwer sagen, weil ich einfach nicht alles testen kann, dazu fehlt mir die Zeit.

Ich würde eher vorschlagen, dass Du das mal ausprobierst und testest und mir die Probleme nennst, dann kann ich versuchen das zu lösen. Das ist leider erstens ziemlich tief im Bauch des Moduls und außerdem muss ich zugeben, dass Du da wahrscheinlich mit dem Code nicht viel Freude haben wirst, weil das leider doch ziemlich "gewachsen" ist.

Ich hatte mir schon mal überlegt, im Zug von FTUI3 das chart noch mal komplett zu überarbeiten, aber da habe ich mich noch nicht dazu durchgerungen.

CQuadrat

#620
Ein erster Hack von mir macht mal zumindest für mich das was ich benötige:

case 'ibars':
res.push("M" + arg[0][0] + "," + (closed?min:arg[0][1]) + " L");
for (i=0,l=arg.length-1;i<l;i++) {
if(arg[i]) {
res.push(arg[i][0] + "," + arg[i+1][1]);
res.push(arg[i+1][0] + "," + arg[i+1][1]);
res.push(arg[i+1][0] + "," + (closed?min:arg[i+1][1]));
}
}
  res.push("L" + arg[arg.length-1][0] + "," + (closed?min + " Z":arg[arg.length-1][1]));
break;


Das ist aber nicht ausreichend getestet. Und Spezialfälle habe ich auch nicht probiert.

Abgesehen davon, weiß ich gar nicht, ob es eine offizielle Definition für ibars im FHEM-Kontext gibt. Siehe z.B. hier:
Zitathttps://forum.fhem.de/index.php/topic,35268.msg1130345.html#msg1130345
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

eki

Danke für den Patch. Ich werde mir das mal anschauen und ein paar Tests bei mir machen. Falls ich keine Seiteneffekte finde, werde ich das übernehmen.

Ob und wie ibars im FHEM Kontext "definiert" sind, ist aus meiner Sicht nicht relevant (ich habe mich am Anfang mal an die Möglichkeiten zur Darstellung im Plotmodul des FHEMWEB Frontends angelehnt, das dann aber immer weiter ergänzt), es gibt das Feature im Chart und daher sollte es auch funtionieren.

Ich habe mal das FTUI Chart Wiki (https://wiki.fhem.de/wiki/FTUI_Widget_Chart) ergänzt und dort ist jetzt auch eine Auflistung der verschiedenen Plottypen mit jeweils einem Beispiel enthalten. Das macht das Thema hoffentlich ein bisschen klarer.

CQuadrat

#622
Danke.
Ich verstehe aber ibars so, dass die linken und rechten Flanken der Balken auf den Werten sitzen. Im Prinzip wie bei wie fsteps.

So verstehe ich auch das "normale" SVG-ibars (https://forum.fhem.de/index.php/topic,35268.msg275817.html#msg275817).

So wie es jetzt im Wiki dargestellt ist, sind die ibars im Prinzip ja nur "vollständige" bars.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

eki

#623
So war das beim Chart noch nie. Beim SVG ist das so, das stimmt, das macht aber für mich für ein Barchart nicht so viel Sinn, daher habe ich es so implementiert. Wenn wir das änder wollen, dann sollte man das als Zusatzfeature vorsehen. Das gilt im Übrigen auch für die Bars, und dort macht es aus meiner Sicht noch weniger Sinn. Und ja, die Ibars sind "nur" Bars ohne Lücke (das war, glaube ich, auch der Grund, warum das mal eingeführt wurde)

CQuadrat

Ich benutze die ibars in der Regel, um kumulierte Werte, die zwischen zwei Zeitpunkten entstanden sind, darzustellen. Das kann z.B. die Regenmenge innerhalb einer Stunde oder der Wasserverbrauch der ganzen Woche sein.
Im Log steht daher zum Zeitpunkt tn der Wert xn, der in der Periode davor (tn-1 bis tn) entstanden ist. Daher soll das ibar von tn-1 bis tn reichen und die Höhe xn haben.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

eki

... mal ne blöde Frage, warum machst Du das nicht mit fsteps und einem fill Style (siehe unten)? Verstehe mich nicht falsch, ich kann das schon in's Chart einbauen, möchte aber nicht zu viele Varianten haben, die dann im Ergebnis das Gleiche liefern, die vielen Möglichkeiten, die es jetzt schon gibt, machen die Nutzung ja nicht unbedingt einfacher.

CQuadrat

#626
Da fehlen mir die senkrechten Striche zwischen den Balken, die die Abgrenzungen der Balken verdeutlichen.

Da es bei der Darstellung um einen kumulierten Wert zwischen zwei Zeitpunkten geht, ist mir wichtig, dass der Flächeninhalt des Balken erkennbar ist.

fsteps dagegen ist ja "nur" eine Kurve.

FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

eki

So, unten ist eine neue Version angehängt, bei der ich das jetzt folgendermaßen umgesetzt habe:

  • wenn data-ptype="ibars": Alles bleibt wie gehabt (wegen Rückwärtskompatibilität).
  • wenn data-ptype="ibars-start": Die Balken werden so gezeichnet, dass der Balken ab dem Messpunkt auf die Messpunkt Höhe springt und auf der Höhe bis zum nächsten Messpunkt gezeichnet wird, der Punkt liegt also am Start des Balkens.
  • wenn data-ptype="ibars-end": Die Balken werden so gezeichnet, dass der Balken  direkt nach dem vorigen Punkt auf die Messpunkt Höhe springt und dann auf der Höhe bis zum Messpunkt bleibt, der Punkt liegt also am Ende des Balkens.

CQuadrat

FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

eki

Es gibt mal wieder ein neues "Release" siehe ersten Eintrag (https://forum.fhem.de/index.php/topic,48450.msg401006.html#msg401006) hier im Thread.