rrdtool - Grafik letzten 24 Stunden erstellen

  • 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


  • 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)


    [Blocked Image: http://knipsfisch.de/aq/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.

  • wahnsinn :danke_ATDE:


    ich habe bei mir


    Code
    --right-axis 1:0


    damit auch rechts beschriftet ist, weil ja die werte rechts am aktuellsten sind

  • 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:[hr]
    --rigid erzwingt die Darstellung der Skala, ich erinnere mich das es ohne --rigid nicht funktioniert hat.

    Edited once, last by 4zap ().

  • 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/questi…no-values-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:[hr]
    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.

    Edited once, last by 4zap ().

  • 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



    Quote

    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?

  • Ich habe jetzt mal mit rrdtool fetch volt.rrd --start 0 --end 12 die Werte ausgeben lassen und es scheint als würde er meine Voltzahlen nicht als solche erkennen, denn er schreibt mir nan, also "Not a Number", obwohl in der Text datei die Voltzahl als Nummer a la 12.65 angezeigt wird.

  • 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?