Hallo,
ich hoffe mir kann jemand in diesem Forum weiterhelfen. RRDTool sollte nicht so unbekannt sein.
Ich habe mir einen Regensensorempfänger mit einem Arduino gebaut, welcher die Messwerte in absoluten mm ausgibt. Das ganze möchte ich nun per RRDTool visualisieren.
Ich messe alle 5min einen Wert und habe die RRD-Datenbank in Python wie folgt angelegt:
ret = rrdtool.create("%s" % (rrd_file),
"--step","%s" % (300),
"--start",'0',
"DS:raingauge:DERIVE:%s:0:U" % (300 * 6),
"RRA:AVERAGE:0.5:1:2016",
"RRA:AVERAGE:0.5:6:1488",
"RRA:AVERAGE:0.5:16:1656",
"RRA:AVERAGE:0.5:60:1752",
"RRA:AVERAGE:0.5:120:1752",
"RRA:AVERAGE:0.5:300:1752",
"RRA:MIN:0.5:1:2016",
"RRA:MIN:0.5:6:1488",
"RRA:MIN:0.5:16:1656",
"RRA:MIN:0.5:60:1752",
"RRA:MIN:0.5:120:1752",
"RRA:MIN:0.5:300:1752",
"RRA:MAX:0.5:1:2016",
"RRA:MAX:0.5:6:1488",
"RRA:MAX:0.5:16:1656",
"RRA:MAX:0.5:60:1752",
"RRA:MAX:0.5:120:1752",
"RRA:MAX:0.5:300:1752")
Der Sensor gibt mir Werte wie: 33,50 (mm). Pro Wippe wird um 0,25 mm erhöht. Da DERIVE von RRDTool nicht mit Float arbeitet, gebe ich die Werte mit 100 multipliziert an RRDTool weiter.
Folgende Werte wurden z.B. eingefügt:
06/25/18 20:15:10 = collectRainGauge => N:3650
06/25/18 20:20:07 = collectRainGauge => N:3650
06/25/18 20:25:11 = collectRainGauge => N:3675
06/25/18 20:30:10 = collectRainGauge => N:3675
D.h. es gab eine Änderung von 0,25mm, also ein Update RRDTool mit dem Wert 25. Die Grafik liefert aber einen Wert von 80m im entsprechenden Zeitraum (siehe Anlage). Die Grafik wird im Grunde mit folgenden Parametern erstellt (eine Umrechnung auf mm, also / 100 habe ich erstmal weggelassen):
$options=array(
"--vertical-label", "mm / 100",
"--title","Niederschlagsmenge (Zeitraum: $term)",
"-w", $width,
"-h", $height,
"-s", "now - $term",
"-e", "now",
"--full-size-mode",
"DEF:raingauge=$rrd_file:raingauge:AVERAGE",
"CDEF:rainph=raingauge,100,/,3600,*",
"CDEF:rainpd=rainph,100,/,24,*",
"CDEF:rainpm=rainpd,30,*",
"VDEF:totalrain=rainpm,AVERAGE",
"LINE2:raingauge#0000FF:Regenmenge\\n",
"GPRINT:totalrain:Total %6.0lf mm/Monat");
Wo liegt mein Denkfehler?
Ich glaube den Fehler gefunden zu haben.
Die 80 m = 0,08 werden von RRDTool bei DERIVE so berechnet: 25 / 300 (Sekunden = Messinterval) = 0,083 pro Sekunde. Nun fehlt mir dennoch eine vernünftige Darstellung der Niederschlagsmenge pro Stunde/Tag/Monat. Die Berechnung hier im Graphen ganz unten (https://www.kompf.de/weather/technik.html) verstehe ich nicht. Nehmen wir an, es bleibt bei 25 (0,25 mm) am Tag, dann würde die Berechnung 0,08 * 3600 (Sekunden pro Tag) liefern = 288 (2,88mm). Am Tag hat es aber nur 25 (0,25mm) geregnet :o