FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cwagner am 01 August 2015, 15:25:14

Titel: [Bitte löschen] DbLog mit SVG-Plot: currval, min/max funktionieren nicht...
Beitrag von: cwagner am 01 August 2015, 15:25:14
Die Umstellung FileLog auf DbLog war dank der guten Doku und des Wiki-Eintrages (http://www.fhemwiki.de/wiki/SVG-Plots_von_FileLog_auf_DbLog_umstellen (http://www.fhemwiki.de/wiki/SVG-Plots_von_FileLog_auf_DbLog_umstellen)) ziemlich einfach. Ich sehe zahlreiche Vorteile in einer Datenbankspeicherung anstelle von zahlreichen flachen Dateien, die auch noch aus Performance-Gründen z.B. in Monatsdateien zerlegt werden.

Für meine vielen Datenvisualisierung mit SVG-Plots hatte ich einige Anpassungsarbeit. An dieserStelle komme ich nun überhaupt nicht mehr zum Ziel: In der Überschrift meiner Plots lasse ich mir zum aktuellen Zeitpunkt meistens den aktuellen Wert z.B. currval1 und dazu Minimum, Durchschnitt und Maximum zeigen (min1 /avg1 /max1). Das klappt wunderbar außer in den Fällen, wo ich mit delta-h oder delta-d Stunden- oder Tagessalden bilde. Da wird nämlich anders als bei FileLog nicht mehr der jüngste Tagessalo für Currval1 herangezogen, sondern der letzte Datenpunkt. Witzigerweise funktioniert AVG1 richtig, min1 und max1 geben verwenden den 1. bzw. den letzten Datenpunkt, der für die Salden verwendet wurden, sum1 saldiert die Stundensalden richtig.

Ein Beispiel (es werden die Stromverbrauchsdaten sowie die Solarernte dargestellt. Die Definition ist:
# Created by FHEM/98_SVG.pm, 2015-07-22 22:09:37
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 '<TL>'
set ytics
set y2tics
set grid y2tics
set ylabel "Strom kWh"
set y2label "PV kwH"

#logdb Strom:kWh:0:delta-h
#logdb Strom_PV:kWh:0:delta-h
#logdb Strom:kWh:0:delta-d
#logdb Strom_PV:kWh:0:delta-d

plot "<IN>" using 1:2 axes x1y1 title 'Strom' ls l6fill lw 2 with bars,\
     "<IN>" using 1:2 axes x1y1 title 'PV' ls l4fill lw 2 with bars,\
     "<IN>" using 1:2 axes x1y2 title 'Strom_TAG' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'PV_TAG' ls l0 lw 1 with lines


Die "preprocessed input"-Daten lauten:
get logdb HISTORY INT 2015-08-01_00:00:00 2015-08-02_00:00:01 Strom:kWh:0:delta-h Strom_PV:kWh:0:delta-h Strom:kWh:0:delta-d Strom_PV:kWh:0:delta-d
2015-08-01_00:30:00 0.32
2015-08-01_01:30:00 0.29
2015-08-01_02:30:00 0.21
2015-08-01_03:30:00 0.3
2015-08-01_04:30:00 0.26
2015-08-01_05:30:00 0.27
2015-08-01_06:30:00 0.31
2015-08-01_07:30:00 0.49
2015-08-01_08:30:00 0.63
2015-08-01_09:30:00 0.22
2015-08-01_10:30:00 0.67
2015-08-01_11:30:00 0.69
2015-08-01_12:30:00 0.56
2015-08-01_13:30:00 1.04
2015-08-01_14:30:00 0.27
2015-08-01_15:30:00 0.11
#Strom:kWh::delta-h:
2015-08-01_00:30:00 0
2015-08-01_01:30:00 0
2015-08-01_02:30:00 0
2015-08-01_03:30:00 0
2015-08-01_04:30:00 0
2015-08-01_05:30:00 0
2015-08-01_06:30:00 0
2015-08-01_07:30:00 0.07
2015-08-01_08:30:00 0.4
2015-08-01_09:30:00 0.89
2015-08-01_10:30:00 1.2
2015-08-01_11:30:00 1.53
2015-08-01_12:30:00 1.58
2015-08-01_13:30:00 1.55
2015-08-01_14:30:00 1.39
2015-08-01_15:30:00 0.33
#Strom_PV:kWh::delta-h:
2015-08-01_12:00:00 6.64
#Strom:kWh::delta-d:
2015-08-01_12:00:00 8.94
#Strom_PV:kWh::delta-d:


Mit der Titelzeile:
"Stündlicher Stromverbrauch aktuell: $data{currval1} ($data{min1} / $data{avg1} / $data{max1}) kWh | Verbrauch bis jetzt: " .round($data{sum3},1). " kWh | Ertrag PV aktuell: " .round($data{currval2},1). " (" .round($data{min2},1). " / " .round($data{avg2},1). " / " .round($data{max2},1). ") kWh | Ertrag bis jetzt: " .round($data{sum4},1). " kWh"
Ausgegeben wird:
Stündlicher Stromverbrauch aktuell: 72662.71 (72656.42 / 0.41 / 72662.71) kWh | Verbrauch bis jetzt: 6.6 kWh | Ertrag PV aktuell: 24410.5 (24401.7 / 0.6 / 24410.5) kWh | Ertrag bis jetzt: 8.9 kWh

Erwarten würde ich in diesem Fall:
Stündlicher Stromverbrauch aktuell: 0.11 (0.21 / 0.41 / 1.04) kWh | Verbrauch bis jetzt: 6.6 kWh | Ertrag PV aktuell: 0.38 (0.0 / 0.6 / 1.58) kWh | Ertrag bis jetzt: 8.9 kWh


Die Werte currvalN, minN, maxN  nehmen also nicht Werte aus dem Ergebnis-Array, sondern den jeweilig entsprechenden Messwert.
Wie gesagt: Exakt dieselbe Titelzeile funktioniert unter FileLog auf der Stelle wieder wie erwartet.

Herzliche Grüße

Christian