rrdtool - Grafik letzten 24 Stunden erstellen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • hallo,

    ich habe mir lt. dieser anleitung eine wetterstation aufgebaut. https://www.kompf.de/weather/technik.html

    das anzeigen der wöchentlichen temperatur funktioniert schon wie angegeben mit

    Code
    rrdtool graph tempweek.png \
     -s 'now - 1 week' -e 'now' \
     DEF:temps5=weather.rrd:temps5:AVERAGE \
     LINE2:temps5#000000:Keller \
     DEF:temps9=weather.rrd:temps9:AVERAGE \
     LINE2:temps9#0000FF:Außen

    jetzt frage ich mich, wie ich die letzten 24 stunden anzeigen lassen kann? habe schon eine weile gegoogelt, aber es will mir nicht gelingen :helpnew:

  • Hat zwar mit rrdtool nichts zu tun, aber mit Regenmessung.
    Sieh dir mal:
    https://www.elektormagazine.de/magazine/elektor-201406/26503
    an, Regenmessung ohne bewegliche Teile.

    MfG

    Jürgen

  • dankeschön für eure hilfe und den hilfreichen links, funktioniert tatsächlich ganz einfach mit

    Code
    rrdtool graph pfad/day.png --start -1d \

    jetzt würde mich noch interessieren, wie ich die aktuelle temperatur inkl. datum / uhrzeit in der beschreibung angezeigt bekomme, wie auf dem screenshot hier

    Unbenannt.jpg

    Einmal editiert, zuletzt von gruawabua (19. Juni 2017 um 13:00)

  • unten ran


    Wobei temp3 bei mir die Variable ist, die musst du natürlich gegen deine Variable austauschen.

    Mit LAST, MAX und AVERAGE bestimmst du den angezeigten Wert. LAST = letzter Wert, MAX - maximaler Werte während dieses Zeitfensters
    AVERAGE - durchschnittlicher Wert während dieses Zeitfensters.

    Sieht dann so ähnlich aus wie das hier (da sind mehr Werte verbaut)

    temp_all_daily.png

  • funktioniert ebenfalls :danke_ATDE:

    mit dem code

    Code
    $(/bin/date "+%d.%m.%Y %H\:%M\:%S")"

    bekomme ich scheinbar noch das aktuelle datum / uhrzeit angezeigt, aber wie schreibe ich das richtig rein?

  • Code
    --watermark "`date`" \
    --right-axis-label "Celsius" \


    Mit dem watermark schreibt er das aktuelle Datum und Uhrzeit in die unterste Zeile. Das musst du nicht so komplex machen das geht so einfach wie oben zu sehen.

    Right-axis-label ist die Bezeichung die auf der rechten Seite hochkant erscheint. Da steht bei mir Celsius...messe auch div. Temperaturen an unterschiedlichen Stellen.

  • Ich klinke mich mal mit rein, da ich das Thema gerade mitverfolgt habe und rrdtool auf die schnelle installiert habe, um mitzukommen ;), nur das ich die Spannung als Grafik ausgeben möchte. Hat auch alles geklappt, nun sehe ich aber nur eine leere Seite und auf der Achse ist die Skala von 0.0 bis 1.0, statt wie beim erstellen angegeben, 9-14 Volt.
    rrdtool last update volt.rrd zeigt auch korrekt, dass der Wert bei 12.6 Volt liegt. Irgendwas habe ich wohl falsch gemacht, aber ist auch mein erster Kontakt zu rrdtool.
    Nochmal 5 Minuten warten bis zum nächsten Wert ;)

  • rrd zeigt erst was an wenn es eine Zeit lang gelaufen ist und Daten in der rrd Datenbank stehen die ausreichen um die Grafik zu erstellen. Es dauert nach dem Einrichten der Tasks meist so 15- 20 Minuten bis der Graph dann auch was anzeigt.

    Die Skala musst du im Skript forcen:

    Code
    rrdtool graph $DIR/temp_out.png \
    --start -4w \
    --slope-mode \
    --font DEFAULT:11: \
    --title "Berlin Aussentemp." \
    --watermark "`date`" \
    --right-axis-label "Celsius" \
    --upper-limit 32 --lower-limit 0 --rigid \

    du bestimmst mit upper- und lower limit Anfang und Ende des Skala. RRD berechnet die Skalierung automatisch wenn du es nicht definierst, d. h. wenn du misst und erfassts Werte von 10 - 30°C wird rrd nur den Bereich darstellen wo auch gemessen wurde.
    Wenn du eine Zeit lang nur Temperaturen um die 5°C gemessen hast und die limits nicht festgelegt hast wird rrd die Skala von 3 - 7°C darstellen. Wird ein höherer Wert erfasst ändert sich auch die Skalierung beim Generieren der nächsten Grafik.
    Automatisch zusammengefügt:
    --rigid erzwingt die Darstellung der Skala, ich erinnere mich das es ohne --rigid nicht funktioniert hat.

    Einmal editiert, zuletzt von 4zap (19. Juni 2017 um 16:23)

  • Ja, ich habe das Intervall mal auf 5 Min. gestellt, um mehr Messpunkte reinzubekommen, glaube aber eher an ein Problem mit den Berechtigungen, da mein Bild genau so aussieht:
    https://serverfault.com/questions/3343…nan-in-rrd-file
    Aber das --upper-limit 32 --lower-limit 0 hat schon mal etwas gebracht, leider noch keine rote Linie.

  • Dann schau mal auf das Datum deiner rrd Datenbank. Jedesmal wenn du Daten reinschreibst muss sich ja die Uhrzeit der Datei ändern. Daran erkennt man ganz schnell ob Daten reingeschrieben werden oder nicht. Hat die rrd ein altes Datum stimmen meist die Pfade für das Update nicht oder die rrd Datei ist nicht beschreibbar mit der aktuellen Berechtigung.
    Automatisch zusammengefügt:
    In diesem Beitrag https://serverfault.com/questions/334374...n-rrd-file hat er ja danach die Datei mit chmod auf 777 gesetzt. Damit darf jeder alles damit machen. Wenn die rrd Datei aktuelle Uhrzeit anzeigt liegt es nicht daran.

    Einmal editiert, zuletzt von 4zap (19. Juni 2017 um 16:56)

  • Ne ne, die volt.rrd bekommt alle 5 Min. einen neuen Zeitstempel, die Grösse der .rrd verändert sich jedoch nicht, steht immer bei 1192.
    Berechtigung habe ich auf 755 gestellt.
    Wie kann ich denn die Daten auslesen, damit ich sehe, ob was drin ist ?
    lastupdate zeigt mir auch immer den aktuellen Wert an.

    EDIT: Ich werfe morgen wohl die rrd etc. nochmal runter und mache es mit den hier gewonnenen Informationen neu, aber ich versteife mich halt gerne auf die Fehlersuche :) Mal sehen, ob dabei was rauskommt.
    Aber um noch ein paar Infos nachzuwerfen:

    Code
    apt-get install rrdtool
    rrdtool create volt.rrd --step 900 DS:VOLT:GAUGE:900:9:14 RRA:AVERAGE:0.5:12:24 RRA:AVERAGE:0.5:288:31
    sudo crontab -e
    */5 * * * * /bin/bash /home/pi/v2db.sh &


    v2db.sh

    Bash
    #!/bin/bash
    VOLT=$(cat /dev/shm/volt.txt)
    /usr/bin/rrdtool update /home/pi/volt.rrd N:$VOLT


    v2gif.sh

    Bash
    #!/bin/bash
    /usr/bin/rrdtool graph volt.gif -c GRID#ffffff00 -c BACK#ffffff -c SHADEA#ffffff -c SHADEB#ffffff --start -365  --upper-limit 15 --lower-limit 9  --title "Spannung" --vertical-label "Volt" -w 550 -h 220  DEF:VOLT=volt.rrd:VOLT:AVERAGE LINE1:VOLT#ff0000:"Spannung" ;
  • Wie klever ist das eigentlich, eine rrd auf einem Raspi zu verwenden?

    Der Witz ist ja, dass sich die Dateigröße nicht ändert. Es wird ja immer in die gleiche Datei geschrieben, für die Platz auf der Platte reserviert ist.

    Nur ist die Platte beim Raspi eine SD-Karte, und auf die wird alle paar Minuten immer an die gleiche Stelle geschrieben. Und immer die komplette Datenbank, oder? Wie lange macht das die Karte mit?

    Mein Ansatz ist, dass ich die Daten tagesweise in CSV-Dateien schreibe. Diese bleiben zwar auf der Platte und werden immer mehr, aber das ist auch nach Jahrzehnten nur ein Bruchteil des verfügbaren Speicherplatzes. Einmal update+upgrade braucht mehr Platz. Dafür wird die Datei aber nicht wieder angefasst, wenn der Tag vorbei ist, und die nächste Datei wird wieder in einen neuen Block geschrieben.

    Ist rrd hier wirklich sinnvoll?

    Was Anderes ist, wenn man die rrd in einer Ramdisk anlegt, und dann daraus Tageswerte fest abspeichert.

  • Bash
    #!/bin/bash
    
    
    VOLT=$(/usr/bin/rrdtool graph /dev/null --start -900 DEF:VOLTaverage=/home/pi/volt.rrd:VOLT:AVERAGE PRINT:VOLTaverage:LAST:"%3.4lf"|tail -1)
    VOLT=$(echo "scale=2; $VOLT/1" | bc)
    
    
    echo $VOLT

    du kannst in ner bash die rrd abfragen und den wert über echo ausgeben


    Zitat

    Nur ist die Platte beim Raspi eine SD-Karte, und auf die wird alle paar Minuten immer an die gleiche Stelle geschrieben

    Das muss die SD Karte abkönnen. Du magst recht haben, aber ich hab die Karte eben näher betrachtet, es sind noch keine Löcher zu sehen. :D Und Backups haben wir doch alle, oder etwa nicht?

  • schau mal in deine Volt.txt.
    Da müsste ja genau ein Wert drin stehen in numerischer Form, welcher Wert steht drin und ist ein Zeilenumbruch mit drin?
    Ich vermute da sowas. Der Zeilenumbruch versaut es.

    Zweite Frage: Wieso gehst du den Umweg über eine Textdatei? Kannst du nicht den Wert direkt via update in die rrd schreiben?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!