PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RRD Temperatur Graph



Fl!pPy
03.02.10, 16:26
Hallo

Ich habe über einen Com Port eine kleine Temperaturschaltung am laufen. Das ganze wird mithilfe von digitemp ausgewertet. Soweit klappt das auch alles und digitemp schreibt auch die Temperatur in eine Datei. Jetzt möchte ich das ganze aber mit rrdtool graphisch darstellen lassen.
Dafür bin ich dieser (http://arbeitsplatzvernichtung-durch-outsourcing.de/marty44/rrdtool.html) Anleitung gefolgt (steht etwas weiter unten).

Das Update der Datenbank funktioniert einwandfrei. Wenn jetzt aber ein PNG Bild erstellt werden soll kommt folgende Fehlermeldung: ERROR: Not a valid vname: gdurch in line GPRINT:gdurch:Durchschnitt\: %5.2lf Grad\n

Meine erste Vermutung ist, das das Problem an den verschiedenen rrd Versionen liegen könnte. Der selbe Fehler kommt aber auch bei älteren Versionen.

MfG Flippy

minisalami
03.02.10, 18:08
taste dich mal ran, ich glaube mich daran zu erinnern, dass da irgendwas mit den GPRINT-Zeilen bei mir auch nicht funktioniert hat.
Nimm die mal raus, und prüfe, ob der Graph gezeichnet wird.

Viel Erfolg gruß minisalami

Fl!pPy
03.02.10, 20:40
Wenn ich die GPRINT Zeilen entferne funktionierts auch nicht.

HBtux
03.02.10, 22:12
Im Anhang mal das RRDTool-Script von meiner Heizungssteuerung.... (siehe digitemp_HBtux.zip)
Ich weiß allerdings auch gerade nicht mehr jeden Parameter auswendig, was er bedeutet....

Die drei Scripte "digitemp.init", "digitemp.proc" und "rrd-heizung.init" initialisieren einige Veriablen....

Mit dem Script "rrd-heizung-create.sh" habe ich einmalig die RRD-Datenbank angelegt.... (Achtung - Inhalt der DB wird dann jedes Mal gelöscht...)

Nun das eigendliche Script "rrd-heizung-png-dyn.sh"
(hier drinnen findest Du den RRD-Tool Aufruf, mit dem die Grafik erzeugt wird.)

Den folgenden Befehl kannst Du nach jedem Mal auslesen der Temperaturwerte aus dem digitemp-Script aufrufen.
Es werden dann automatisch 11 Grafiken mit den angegebenen Zeitfenstern erzeugt.
(30M = 30 Minuten / 12S = 12 Stunden / 90T = 90 Tage usw.)

/digitemp/bin/rrd-heizung-png-dyn.sh -s "`/bin/date +'%d.%m.%Y %H:%M:%S'`" -z "30M 60M 3S 6S 12S 24S 30S 3T 14T 31T 90T" -o "-"

Das Datum kannst Du mit dem Parameter -s manuell abweichend vom aktuellen Datum angeben.
Dann wird die Grafik von diesem Datum ausgehend erstellt. (z.B. -s "31.12.2000 23:59:59")

Der Parameter -o "-" oder -o "+" besagt, ob das angegebene Datum das Enddatum oder das Anfangsdatum in der Grafik sein soll. (also Grafik vor- oder rückwärts zeichen)

Und Datei heizung24S.png eine Beispiel-Grafik von mir... ;)

Es kann natürlich sein, dass bei Dir noch ein paar Pfade oder Variablen angepasst werden müssen....

Fl!pPy
05.02.10, 19:39
@HBtux
Danke werd das mal genauer studieren wenn ich unsere Heizungsanlage verkabel :D

Habe aber in der Zwischenzeit was gefunden das scheint größtenteils zu funktionieren. Habe aber das kleine Problem das die angezeigten Daten in den Graphen nicht stimmen. Soll heißen: Temperaturen falsch dargestellt, Lücken zwischendrin oder ab und zu eine richtige Temperatur. Update_rrd wird jede Minute, update_png wird alle 5 Minuten ausgeführt. Ich poste mal die Scripte:

update_png.sh zum erstellen der Graphen

Text beim ausführen in der Konsole:
Webserver digitemp # /opt/rrd/update_png.sh
797x315
797x315
(gibts die Größe der Graphen an)



#!/bin/bash
/usr/bin/rrdtool graph /var/www/localhost/htdocs/monitorix/imgs/temp2.png \
--title "Innentemperatur" \
--width 700 \
-h 250 \
-l 0 -u 25 \
--color BACK#333333 \
--color SHADEA#000000 \
--color SHADEB#000000 \
--color CANVAS#000000 \
--color GRID#999999 \
--color MGRID#666666 \
--color FONT#CCCCCC \
--color FRAME#333333 \
--start -86800 \
--vertical-label " Grad Celsius" \
--no-legend \
DEF:temp=/opt/rrd/sensor_02.rrd:sensor_02:AVERAGE \
AREA:temp#7cfc00
#LINE1:temp#FF0000:temperature

/usr/bin/rrdtool graph /var/www/localhost/htdocs/monitorix/imgs/temp.png \
--title "Aussentemperatur" \
--width 700 \
-h 250 \
-l -10 -u 25 \
--color BACK#333333 \
--color SHADEA#000000 \
--color SHADEB#000000 \
--color CANVAS#000000 \
--color GRID#999999 \
--color MGRID#666666 \
--color FONT#CCCCCC \
--color FRAME#333333 \
--start -86800 \
--vertical-label " Grad Celsius" \
--no-legend \
DEF:temp=/opt/rrd/sensor_01.rrd:sensor_01:AVERAGE \
AREA:temp#7cfc00
#LINE1:temp#FF0000:temperature


update_rrd.sh zum updaten der Datenbank

Text beim ausführen in der Konsole:
Webserver digitemp # /opt/rrd/update_rrd.sh
Sensor 1: 2.25 Grad Celsius
Sensor 2: 17.12 Grad Celsius



#!/bin/bash

T1=`/opt/digitemp/digitemp_DS9097 -s/dev/ttyS0 -t 0 | grep Sensor | awk '{print $7}'`
/usr/bin/rrdtool update /opt/rrd/sensor_01.rrd N:$T1
echo Sensor 1: $T1 Grad Celsius


T1=`/opt/digitemp/digitemp_DS9097 -s/dev/ttyS0 -t 1 | grep Sensor | awk '{print $7}'`
/usr/bin/rrdtool update /opt/rrd/sensor_02.rrd N:$T1
echo Sensor 2: $T1 Grad Celsius

Hier noch die RRD Datenbank:


rrdtool create /opt/rrd/sensor_01.rrd \
DS:sensor_01:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:1200 \
RRA:MIN:0.5:12:2400 \
RRA:MAX:0.5:12:2400 \
RRA:AVERAGE:0.5:12:2400

HBtux
06.02.10, 21:36
Habe aber das kleine Problem das die angezeigten Daten in den Graphen nicht stimmen. Soll heißen: Temperaturen falsch dargestellt, Lücken zwischendrin oder ab und zu eine richtige Temperatur. Update_rrd wird jede Minute, update_png wird alle 5 Minuten ausgeführt. Ich poste mal die Scripte:


Hier noch die RRD Datenbank:


rrdtool create /opt/rrd/sensor_01.rrd \
DS:sensor_01:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:1200 \
RRA:MIN:0.5:12:2400 \
RRA:MAX:0.5:12:2400 \
RRA:AVERAGE:0.5:12:2400
Wenn Du Lücken in der RRD-Datenbank bzw. im Graphen hast, könnten vielleicht die Zeitabstände in der Datenbank nicht mit dem Zeitabstand zwischen zwei Updates übereinsteimmen.

Lege mal die RRD-DB mit der Option --step 60 oder ggf. --step 30 an.
Es liegt schon längere Zeit zurück. Aber wenn ich mich richtige erinnere, muss die Step-Angabe kürzer sein als der Interval des Updates....
Der Standard-Wert für das Step liegt bei 300 Sekunden.

D.h. Deine Datenbank nimmt alle 300 Sekunden einen Wert auf, Du machst aber alle 60 Sekunden ein Update...

Ich habe bei mir die RRD-DB mit --step 60 angelegt und schreibe die Temperaturen alle 2 Minuten....

Du solltest dann aber auch die Speicherdauer für die Temperaturwerte erhöhen. (von Wert 1.200 auf z.B. 12.000)

Fl!pPy
08.02.10, 20:33
@HBTux
Habe deine Tipps mal berücksichtigt und die Datenbank neu gebaut.
Folgendes habe ich beobachtet: Je nachdem, in welchen Zeitabständen ich die Datenbank update, stimmt die Ausgabe mal und mal nicht. Hat also tatsächlich was mit deiner Beschreibung zutun

HBtux
08.02.10, 22:02
Welche Werte sind denn ungenau?
Der aktuelle Temperaturwert oder der Durchschnitts- oder Min-/Max-Wert?

Beim Durchschnittswert kann es natürlich Probleme machen, wenn Werte zwischen drinnen fehlen.

Fl!pPy
09.02.10, 21:04
Also mittlerweile läufts super. Danke nochmal.
Die Werte werden als Durchschnittswerte ausgegeben. Hat sich zudem noch herausgestellt das ich die digitemprc nicht im root Ordner hatte. Daher wurde die Datenbank mit leeren Werten gefüttert :ugly: