[FHEM-Tablet-UI] Chart

Begonnen von RoBra81, 18 Dezember 2015, 13:42:10

Vorheriges Thema - Nächstes Thema

eki

Nein, das geht bisher nicht. Ich bin aber gerade sowieso an einigen Verbesserungen dran und schau mal ob ich das einbauen kann.

eki


Aeroschmelz

#152
Hallo,

ich bin etwas ratlos. Seit dem letzten Update wird bei mir die Windgeschwindigkeit in FHEM selbst angezeigt, aber nicht mehr im Tabletui mit dem Chart Widget. Ich habe schon in TabletUi mehrere Testcharts zum Ausprobieren angelegt. Egal was ich mache es hakt aber immer nur bei der Windgeschwindigkiet mit der Variablen "Balkon:windVelAverage". Alle anderen Werte werden beim Ersetzen dieser Variablen angezeigt. Hat jemand eine Idee, was ich falsch mache?

Hier die Plot Definition:

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics ("Nord" 0, "Ost" 90, "Süd" 180, "West" 270, "Nord" 360)
set y2tics
set grid ytics
set ylabel "Windrichtung"
set y2label "Wind [m/s]"
set yrange [0:360]
set y2range {"[0:".($data{max2}+0.5)."]"}

#myDbLog Balkon:windVelAverage::
#myDbLog Balkon:WindGust::
#myDbLog Balkon:windDirAverage::

plot "<IN>" using 1:2 axes x1y2 title 'Wind' ls l0fill_gyr lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Windböen' ls l0fill_stripe lw 1 with cubic,\
     "<IN>" using 1:2 axes x1y1 title 'Richtung' ls l6fill lw 1 with points


Hier das gleiche für FHEM:


<div class="noswipe container center"
                data-type="chart"
            data-device="Balkon"
            data-logdevice='["myDbLog","myDbLog","myDbLog","lp"]'
            data-logfile='["HISTORY","HISTORY","HISTORY","HISTORY"]'
            data-columnspec='["Balkon:windDirAverage","Balkon:windVelAverage","Balkon:WindGust","ConstY:180"]'
                data-style='["ftui l6dash",["fill",["0","#33CC33","1"],["4","#CCCC00","0.7"],["8","#CC0000","0.4"]],"ftui l2fill","ftui l1"]'                       
                data-ptype='["quadraticSmooth","lines","cubic","lines"]'
            data-uaxis='["secondary","primary","primary","secondary"]'
            data-legend='["Richtung","Geschwindigkeit","Boen",""]'
           
                data-prefetch="true"
                data-yunit="m/s"
            data-yunit_sec="&deg;"
                data-ytext="Windgeschw."
                data-ytext_sec="Windrichtung"
           
                data-minvalue="0"
            data-maxvalue="auto"
            data-minvalue_sec="0"
                data-maxvalue_sec="360"
                data-y_margin="1"
                data-y_margin_sec="2"
                data-xticks="auto"
                data-yticks="auto"
            data-yticks_sec='[[0,"Nord"],[90,"Ost"],[180,"Sued"],[270,"West"],[360,"Nord"]]'
               
                data-daysago_start="1"
            data-daysago_end="-1"
            data-crosshair="true"
            data-cursorgroup="1"
            data-scrollgroup="1"
            data-showlegend="true"
                data-height="95%"
                data-width="98%">
            </div>


cpl_ir

Hallo Zusammen,

ich habe ein Problem mit dem Chart-Widget.

Ich habe einen modifizierten  LaCross TX 25 IT als Temperatursensor und als Wassermelder.
Dieser liefert mir 2 Readings  "temperature" und "temperature2", die auch im Log-File so erscheinen.


2018-04-08_11:52:34 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_11:57:55 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_12:07:40 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_12:13:01 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_12:23:03 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_12:28:07 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_12:33:36 KG_Werkstatt_Temp_Wasser battery: ok
2018-04-08_12:38:09 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_12:43:13 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_12:53:15 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_12:58:19 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_13:08:22 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_13:13:42 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_13:23:45 KG_Werkstatt_Temp_Wasser temperature: 13.9
2018-04-08_13:29:05 KG_Werkstatt_Temp_Wasser temperature2: -25.3
2018-04-08_13:33:43 KG_Werkstatt_Temp_Wasser battery: ok
2018-04-08_13:39:07 KG_Werkstatt_Temp_Wasser temperature: 13.9


In Fhem bekomme ich damit auch eine entsprechende Graphik (s. Anhang) die in Ordnung ist.

Mit dem Chart-Widget mit der Definition


<div    data-type="chart"
data-device="KG_Werkstatt_Temp_Wasser"
data-logdevice="FileLog_KG_Werkstatt_Temp_Wasser"
data-logfile="-"
data-columnspec='["4:temperature","4:temperature2"]'
data-style='["ftui l1","ftui l2"]'
data-ptype='["lines","lines"]'
data-uaxis='["secondary","primary"]'
data-legend='["Temperatur","Wassermelder"]'
data-yunit="°C"
data-ytext="Wassermelder"
data-minvalue="-30"
data-maxvalue="50"
data-yunit_sec="°C"
data-ytext_sec="Temperature"
data-height="195"
data-minvalue_sec="-30"
data-maxvalue_sec="50"
data-nofulldays="true"
data-daysago_start="0"
data-daysago_end="-1"
data-cursorgroup="1"
data-scrollgroup="1"
data-xticks="auto"
class="big">
</div>


bekomme ich den im Anhang ebenfalls dargestellten Verlauf.

Der Graph mit Reading "temperature2" - die fiktive Wassermeldertemperatur - wird richtig dargestellt

Der Graph mit Reading "temperature" - wird nicht richtig dargestellt. Anscheinend werden für die Darstellung die beiden  Readings "temperature" und "temperature2" ausgewertet und gezeichnet.

Warum ist das so, hat jemand eine Idee warum das so ist und wo der Fehler liegt?

Danke für die Hilfe.

Stephan





RaspberryPi3,HMLAN,Homematic,Fritz!Box 7390,ESP8266, UVR1611

eki

Wenn du in die columnspec noch den ':' mit in die regexp einfügst, sollte es klappen (siehe auch mein Feedback in diesem Thread vom 16.10.2017).

data-columnspec='["4:temperature\\x3a","4:temperature2\\x3a"]'

cpl_ir

@eki: super, tausend Dank, das war es (hat mich gestern einige Stunden gekostet).

Mit

data-columnspec='["4:temperature\\x3a","4:temperature2\\x3a"]'

funktioniert es wie es soll (s. Anhang).

Ich hatte schon die Vermutung, dass beim "parsen" mit der "Zahl am Ende" irgendetwas nicht passt.
Aber bei einen aufwändigeren Plot meiner kompletten UVR1611 Heizungssteuerung sind auch Zahlen am Ende der readings und das funktioniert seltsamerweise einwandfrei (s. Anhang).


<div    data-type="chart"
data-logdevice='["myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen","myuvrsen"]'
data-columnspec='["4:UVRSena.USen1","4:UVRSena.USen2","4:UVRSena.USen3","4:UVRSena.USen4","4:UVRSena.USen5","4:UVRSena.USen6","4:UVRSena.USen7","4:UVRSena.USen9","4:UVRSenb.USen10","4:UVRSenb.USen11","4:UVRSenb.USen12","4:UVRSenb.USen14"]'
data-style='["ftui l2","ftui l4","ftui l6","ftui l1","ftui l2dot","ftui l5","ftui l1","ftui l0","ftui l2dot","ftui l4dot","ftui l5","ftui l4dot"]'
data-ptype='["lines","lines","lines","lines","lines","lines","lines","lines","lines","lines","lines","lines"]'
data-uaxis='["primary","secondary","primary","primary","primary","primary","primary","primary","primary","primary","primary","secundary"]'
data-legend='["1TKollektor","2TWWPuffer","3TSRL1","4TSRL2","5TZircoRL","6TPufferm","7TPuffero","9TKesselVL","10THK1VLHK","11THK2VLFBH","12TAussen","14TWarmwasser"]'
data-yunit="°C"
data-ytext="Temperature"
                                 .......
                                 .......
data-xticks="auto">
</div>


Mir ist das nicht klar und ich verstehe es auch nicht, warum es einmal mit Zahl am Ende funktioniert und einmal nicht.

Ist es sinnvoll bei "data-columnspec" den ":" beim reading immer wie oben mit zu übergeben?

Nochmal Danke!

Stephan
RaspberryPi3,HMLAN,Homematic,Fritz!Box 7390,ESP8266, UVR1611

eki

#156
Das mit dem ':' ist leider nicht so einfach. Es gibt durchaus Readings, die keinen ':' enthalten, das hängt mehr oder weniger am device und daran, was das Device in die Readings schreibt. Immer einen ':' dranzuhängen wäre also nicht so sinnvoll. Darüber hinaus ist der ':' ja auch noch als Trenner zwischen den einzelnen Teilen der columnspec genutzt.
In Deinem Fall brauchst Du den ':' nur deshalb, weil die Regexp sonst eben auf beide Zeilen anspringt ('temperature' als Regexp schlägt eben bei 'temperature' und bei 'temperature2' an, aber 'termperature:' schlägt bei 'temperature2:' nicht an.
In dem anderen Beipiel hast Du diese Zweideutigkeiten nicht (hat nichts mit den Zahlen am Ende zu tun, sondern nur mit der Eindeutigkeit der Regexp, wenn Du z.B. ein Reading mit Namen 'UVRSena.USen11' hättest würde das auch mit 'UVRSena.USen1' vermischt).

ChrisW

Wie kann ich farbige Anzeigen wie im plot "l0fill_gyr" realisieren ?

Und ein schöne Monatsansicht ??
habe nun ganz viel rumprobiert und so halbwegs nun eine brauchbare lösung gefunden für eine Monatsansicht. Jedoch verschieben sich die Angaben unten in der Leiste etwas ..
der 1.11. ist vorhanden wird aber da es um 23:57 Uhr daher schaut es so aus als ob es den 1. nicht gibt. Den 2, Wert nicht beachten der kommt später....

Code:
<div data-type="chart"
data-title="Akt: VERBRAUCH: $data{currval1} kW • Solar: $data{currval2} Watt"
data-title_class="titlewhite"
data-logdevice='["EnergieM","EnergieM"]'
    data-columnspec='["6:Hausstrom.day:","4:AC.Power:.*$val=($fld[3]*/1000)"]'
data-style='["ftui l2fill","ftui l0fill"]'
data-ptype='["bars","histeps"]'
data-uaxis='["primary","secondary"]'
data-legend='["Verbrauch","Solar"]'
data-yunit="kW"
data-ytext="Verbrauch (kW)"
data-minvalue="10"
data-maxvalue="45"
data-yunit_sec="kw"
data-ytext_sec="Solar (kW)"
data-height="240"
data-yticks="auto"
data-minvalue_sec="auto"
data-maxvalue_sec="auto"
data-cursorgroup="1"
data-scrollgroup="1"
data-xticks="auto"
    data-showlegend="true"
    data-crosshair="true"
data-nofulldays="true"
data-daysago_start="0M"
data-daysago_end="now"
data-xticks_round="d"
>
</div>
Raspberry PI3 mit allem möglichen.

eki

Zur ersten Frage. Das geht relativ einfach, in dem Du data-style="SVGplot l0fill_gyr" angibst.

Zum Monatsplot. Hast Du für die Werte, die Du darstellen willst nur einen Wert im Logfile pro Monat oder gibt es den gleichen Wert öfter. Was ist der Zeitstempel für den Wert?

ChrisW

hi, danke muss ich mal testen.

So schauen die Logs aus:


2018-11-01_23:57:10 Hausstrom first_day: 0
2018-11-01_23:57:10 Hausstrom day: D01 Wd: 23.44 kWh Wm:  23.44 kWh C:  0.00 €
2018-11-02_23:57:12 Hausstrom first_day: 0
2018-11-02_23:57:12 Hausstrom day: D02 Wd: 28.24 kWh Wm:  28.24 kWh C:  0.00 €
2018-11-03_23:57:15 Hausstrom first_day: 0
2018-11-03_23:57:15 Hausstrom day: D03 Wd: 21.59 kWh Wm:  21.59 kWh C:  0.00 €
2018-11-04_23:57:19 Hausstrom first_day: 0
2018-11-04_23:57:19 Hausstrom day: D04 Wd: 31.83 kWh Wm:  31.83 kWh C:  0.00 €
2018-11-05_23:57:21 Hausstrom first_day: 0
2018-11-05_23:57:21 Hausstrom day: D05 Wd: 26.64 kWh Wm:  26.64 kWh C:  0.00 €
2018-11-06_23:57:22 Hausstrom first_day: 0
2018-11-06_23:57:22 Hausstrom day: D06 Wd: 22.55 kWh Wm:  22.55 kWh C:  0.00 €


Aktuell ist es halt so das tag 1 nichts ist ... das ist so ein wenig verschoben ich denke weil er das immer noch nicht nach Tagen aufteilt :/
Raspberry PI3 mit allem möglichen.

eki

Wenn Du "bars" als Style verwendest, dann liegt die Mitte des Balkens immer an dem Zeitpunkt auf der X-Achse, der bei dem jeweiligen Wert im Logfile steht. In Deinem Fall, da der erste Messwert, der ins Zeitfenster fällt, am Ende des 1.11. liegt, wird also die Mitte des Balkens auf das Ende des 1. Tages gelegt. Das ist eigentlich schon richtig und so gewollt (ich will im Plot eigentlich immer das anzeigen, was auch im Logfile steht, und daran nichts ändern).
Um das bei Dir jetzt zu verbessern, würde ich Dir vorschlagen, als data-ptype "fsteps" verwenden und zusätzlich durch Nutzung von Logproxy dafür zu sorgen, dass die Werte am Anfang und Ende entsprechend verlängert werden. Folgendes wäre zu tun:
1. In FHEM ein logproxy Device definieren.
define lp logProxy

2. Deine Chart Definition folgendermaßen anpassen:
statt
data-ptype='["bars","histeps"]'
data-ptype='["fsteps","histeps"]'

statt
data-logdevice='["EnergieM","EnergieM"]'
data-logdevice='["lp","EnergieM"]'

statt
data-columnspec='["6:Hausstrom.day:","4:AC.Power:.*$val=($fld[3]*/1000)"]'
data-columnspec='["FileLog:EnergieM,extend=60*60*24:6:Hausstrom.day:","4:AC.Power:.*$val=($fld[3]*/1000)"]'


ChrisW

hui das wird aber langsam kompliziert :/ mit den Plots geht eine Monatsansicht ganz einfach. So schaut es aktuell nach der änderung aus .. der 1. ist immer noch nicht am anfang.. Vielelicht muss der Zeitraum anders angepasst werden ?
log EnergieM
018-11-01_23:57:10 Hausstrom first_day: 0
2018-11-01_23:57:10 Hausstrom day: D01 Wd: 23.44 kWh Wm:  23.44 kWh C:  0.00 €
2018-11-02_23:57:12 Hausstrom first_day: 0
2018-11-02_23:57:12 Hausstrom day: D02 Wd: 28.24 kWh Wm:  28.24 kWh C:  0.00 €
2018-11-03_23:57:15 Hausstrom first_day: 0
2018-11-03_23:57:15 Hausstrom day: D03 Wd: 21.59 kWh Wm:  21.59 kWh C:  0.00 €
2018-11-04_23:57:19 Hausstrom first_day: 0
2018-11-04_23:57:19 Hausstrom day: D04 Wd: 31.83 kWh Wm:  31.83 kWh C:  0.00 €
2018-11-05_23:57:21 Hausstrom first_day: 0
2018-11-05_23:57:21 Hausstrom day: D05 Wd: 26.64 kWh Wm:  26.64 kWh C:  0.00 €
2018-11-06_23:57:22 Hausstrom first_day: 0
2018-11-06_23:57:22 Hausstrom day: D06 Wd: 22.55 kWh Wm:  22.55 kWh C:  0.00 €
2018-11-07_23:57:22 Hausstrom first_day: 0
2018-11-07_23:57:22 Hausstrom day: D07 Wd: 21.53 kWh Wm:  21.53 kWh C:  0.00 €


tabletuicode:
<div data-type="chart"
data-title="Akt: VERBRAUCH: $data{currval1} kW • Solar: $data{currval2} Watt"
data-title_class="titlewhite"
data-logdevice='["myLogProxy","myLogProxy"]'
    data-columnspec='["FileLog:EnergieM,extend=60*60*24:6:Hausstrom.day:","FileLog:SOLAR.File,extend=60*60*24:4:Daily.Energy.Last:"]'
data-style='["ftui l2fill","ftui l0fill"]'
    data-ptype='["fsteps","histeps"]'
data-uaxis='["primary","secondary"]'
data-legend='["Verbrauch","Solar"]'
data-yunit="kW (Verbrauch)"
data-ytext="Verbrauch (kW)"
data-minvalue="0"
data-maxvalue="45"
data-yunit_sec="kw (Solar)"
data-ytext_sec="Solar (kW)"
data-height="240"
data-minvalue_sec="0"
data-maxvalue_sec="45"
data-cursorgroup="1"
data-scrollgroup="1"
data-xticks="auto"
    data-showlegend="true"
    data-crosshair="true"
data-nofulldays="true"
data-daysago_start="0M"
data-daysago_end="now"
data-xticks_round="d"
>
</div>

Ein Bild im Anhang .. in diesme Falle noch eine Idee für eine bessere / schönere Darstellung ? Solar geht da ein wenig unter weil es dahinter liegt ;)

Vielen Dank
Raspberry PI3 mit allem möglichen.

eki

Gibt es denn in Deinem Logfile überhaupt Werte, die vor dem 1.11. liegen, oder sind die in einem anderen File?

ChrisW

Nein es gibt keine weiteren habe zum 1.11. damit angefangen. Ist das der Grund ? Die anderen Balken passen mit dem Corsor geschaut Perfekt in die Balken.

Aber die beschreibung unten ist auch nicht ganz so toll man muss teilweise die Tage erraten weil da so große Lücken sind kann man den da was dran machen?
Raspberry PI3 mit allem möglichen.

eki

Das erklärt zumindest warum das ganze logProxy Gedöns nichts bringt (ab Dezember sollte das dann klappen).

Ich nehme an, in deinem zweiten Satz redest Du über die X-Achse. Hier gibt es sehr viele Möglichkeiten zu formattieren. Bitte schau Dir mal das Chart Wiki dazu an. Wenn Du z.B. jeden Tag sehen willst, kannst Du data-xticks="1440" setzen (entspricht einem Tag in Minuten).