rrdtool - Grafik

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,
    Ich habe mit Linux nur Probleme und heute geht es um folgendes: Ich will einen Luftdrucksensor BMP085 über I2C Bus auslesen, die Daten in einer rrd-Datenbank sammeln und per Grafik auswerten. Dabei gehe ich nach einer Anleitung von http://www.kompf.de vor. Bisher hat noch kein Kommando auf Anhieb geklappt, Herr Kompf antwortet auf Anfragen nicht - es ist frustrierend. Im Moment hänge ich an der Stelle, wo aus der rrd-Datenbank die Daten in einer Grafik angezeigt werden sollen.
    Daten gesammelt?
    Originaltext H. Kompf:
    Nach einiger Zeit kontinuierlicher Datenerfassung lohnt es sich, einen Blick auf die Grafikfähigkeiten von RRDtool zu werfen. Das folgende Kommando erzeugt die Grafikdatei pressure.png mit dem Luftdruckverlauf der letzten Woche:

    rrdtool graph pressure.png \
    -s 'now - 1 week' -e 'now' \
    -A -Y -X 0 \
    DEF:psea=pressure.rrd:psea:AVERAGE \
    LINE2:psea#0000FF:

    Ich habe diesen Text genau so in Idle eingegeben und ausführbar gemacht. Wenn ich nun run mode eingebe, erhalte ich eine Fehlermeldung zu dem Befehl "graph": invalid Syntax!!!

    Das kann doch nicht sein! Vielleicht kann mir jemand weiterhelfen.

  • Hallo dbv
    ich muß nochmal nachfragen, wahrscheinlich stelle ich mich sehr dumm an. Ich sitze also vor dem Grafikdesktop mit der großen Himbeere. Jetzt will ich diesen Text (w.o.) eingeben. Ich rufe also das LX-Terminal auf, und tippe (oder paste) den Text rein. Das ist aber eine einmalige Sache. Ich will ja die Grafik öfter aufrufen und muß daher diesen Text abspeichern. Wie mache ich das? Für einen Anfänger ist das schon verwirrend: Idle 1, Idle 2 und Idle 3, Shellscript, Nano, bin und bash und chmod usw..... Und in den Büchern ist es auch nicht ausreichend und nachvollziehbar erklärt. Also, sei bitte nachsichtig und vielen Dank für Deine Antwort im Voraus!

    • Offizieller Beitrag

    Ich bin die Nachsichtigkeit in Person ;). Das LX Terminal ist schon ein richtiger Ansatz. mittels

    Code
    rrdtool create pressure.rrd...

    ertsellst du eine Datenbank namens pressure.rrd die muss nur ein mal geschehen. Das Script zum Beschreiben der Datenbank (das ist das was in IDLE geschrieben werden "muss" und bunte schrift im tutorial hat ;) ). Wenn es dir nur um die erstellung des Graphen geht:

    LXTerminal öffnen

    Code
    nano graph.sh


    diesen Text reinkopieren

    Code
    #/bin/bash
    rrdtool graph pressure.png \
      -s 'now - 1 week' -e 'now' \
      -A -Y -X 0 \
      DEF:psea=pressure.rrd:psea:AVERAGE \
      LINE2:psea#0000FF:


    Speichern und beenden,dann

    Code
    chmod +x graph.sh

    Nun kannst du Graph immer mittels

    Code
    ./graph.sh

    generieren.

    Zur Information, das Script und auch die Datenbank liegen in

    Code
    /home/pi
  • Hallo dbv,
    vielen Dank, endlich eine Erklärung, die ich verstehe und nachvollziehen kann. Ich bekomme aber trotzdem noch keine Grafik zu sehen. Wahrscheinlich habe ich an dem vorangegangenen Script auch etwas falsch gemacht. Könntest Du dir die Anleitung von H. Kompf http://www.kompf.de/weather/pibaro.html nochmal ansehen. Es geht um die Stelle, wo die RRD-Datenbank definiert wird.

    "rrdtool create pressure.rrd-- step 900\
    usw........

    Dann heißt es weiter: Nun ergänzt man noch das Script ..... usw.

    Ich habe diese beiden Texte in ein PythonScript geschrieben.
    Wenn Du mir hier nochmal helfen könntes, würde ich Dich in mein Nachtgebet mit einschließen.

    https://www.forum-raspberrypi.de/images/smilies…_danke_ATDE.gif

    • Offizieller Beitrag

    Hiho,
    also zuerst erstellt du die Datenbank
    LxTerminal auf und den kompletten rrdtool create befehl reinkopieren und enter, daraufhin wird eine Datenbank(Datei) erstellt namens pressure.rrd.
    (Das muss nur einmal gemacht werden)
    Da ein Datenbank ohne Werte ziemlich sinnlos ist musst du diese natürlich auch füllen. hier kommt das python scrypt ins spiel welches komplett so aussieht
    [code=php]
    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    from Adafruit_BMP085 import BMP085
    import os, rrdtool


    bmp = BMP085(0x77)
    temp = bmp.readTemperature()

    # Read the current barometric pressure level
    pressure = bmp.readPressure()

    # Set the altitude of your current location in meter
    altitude = 95
    psea = pressure / pow(1.0 - altitude/44330.0, 5.255)

    print "Temperature: %8.2f °C" % temp
    print "Pressure: %8.2f hPa" % (pressure / 100.0)
    print "Pressure at sea level: %8.2f hPa" % (psea / 100.0)


    # insert data into round-robin-database
    data = "N:%.2f:%.2f" % (temp, psea/100.0)
    rrdtool.update(
    "%s/pressure.rrd" % (os.path.dirname(os.path.abspath(__file__))),
    data)[/php]

    dieses Script fügt, jedesmal wenn du es aussführst, einen Datensatz in die DB ein. Nun kannst du dich natürlich hinsetzen und aller x Minuten das Script ausführen....aber das wäre dann doch eine zu grosse Zeitverschwendung. Hier bietet sich der Einsatz von Cronjobs an.

    Nachdem du nun ein paar Daten in der DB hast sollte das oben beschriebene Script auch einen graphen erstellen. Er erstellt eine Datei names pressure.png, von alleine Öffnet (wie du es vielleicht erwartest) es sich aber nicht. du musst nach /home/pi navigieren und das Bild dann einfach öffnen.

    Hoffe ich habe etwas Licht ins dunkel gebracht :)

  • Hallo dbv,
    vielen Dank für Deine Anleitung - aber bei mir funktioniert es so nicht! Wahrscheinlich mache ich wieder etwas falsch.
    Ich habe mich in der Anleitung von H. Kompf bis zu der Stelle vorgearbeitet, wo es heißt:
    Aufzeichnung mit RRDtool. Wenn ich also eingebe: ./Adafruit_BMP085_example.py, dann erhalte ich schon die gewünschten 3 Werte! Nun muß ich also die rrdtool-Datenbank mit den Parametern DS, RRA usw. anlegen. Du schreibst, ich soll das LXTerminal aufmachen und die 7 Zeilen eingeben. Das scheint aber nicht zu funktionieren. Ich habe jetzt zwar unter /home/pi/ eine Datei mit dem Namen pressure.rrd, aber ob dies eine Datenbank ist? Mir kommt es nicht so vor.
    Dann hast Du mir den Text für ein Script vorgegeben. Diesen hab ich ja schon bis zum Punkt ....print "pressure at sea level: .......usw. als Änderung im Script Adafruit_BMP085_example.py erfasst und erfolgreich verarbeitet. Dein weiterer Scripttext ab # insert data into round-robin-database unterscheidet sich grundlegend von dem Text von H. Kompf. Ist das so in Ordnung?
    Irgendwo bekomme ich auch die Meldung: pressure.png ist kein rrdtool file!

    Die ganze Sache scheint mir nun doch schwieriger zu sein, als ich geglaubt habe.Einfach ne Anleitung abtippen und dann funktionierts ist nicht drin. Ich hoffe auf Deine Unterstützung!

Jetzt mitmachen!

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