RRDTool, DS18B20, Python

  • Hallo Zusammen,

    ich plane eine Überwachung unserer Heizung.
    Momentan habe ich einen DS18B20 Sensor im Einsatz. Diesen lese ich auch aus schreibe das ganze in eine Textdatei. Diese Textdatei lasse ich momentan mit Gnuplot darstellen.
    Ich habe jetzt viel über grafische Darstellung gelesen und es wird oft RRDTool in Verbindung mit dem Raspi erwähnt, da diese um einiges Ressourcenschonender sein soll.

    Da ich mir jetzt 10 Sensoren von DS18B20 gekauft habe und gern Vor- und Rücklauf gegenüberstellen will, stellt sich mir die Frage, ob es ein gut verständliches Tutorial gibt, das auf Python basiert.
    Ich lese nun seit einigen Tagen, aber ich verstehe den Zusammenhang von Python und RRDTool nicht. Es gibt auch wirklich viele Tutorials im Internet (leider kaum welche auf Pyhton Basis) nur werde ich daraus nicht schlau.

    Was ich vor habe:
    Es gibt mehrere Vor- und Rückläufe diese würde ich gerne getrennt voneinander anzeigen.
    Vor- und Rücklauf 1 soll eine Grafik sein,
    Vor- und Rücklauf 2 soll auch eine eigene Grafik sein.
    Dazu hätte ich gern noch ein Grafik für unser Warmwasser.

    Wenn mir dabei jemand helfen könnte, wie ich das mit mehreren Grafiken machen kann und vielleicht mir ein gut verständliches Tut geben könnte, wäre ich sehr dankbar!

    • Offizieller Beitrag

    Was soll den mit python genau gemacht werden. Ich würde mittels python die ganzen Daten in ne Datenbank schreiben und die Grafische Darstellung einem Webserver und einer der unzähligen chart-Frameworks überlassen. Ich krieg bei Round Robin Datenbanken Kopfschmerzen ;)

  • Bin da natürlich auch gerne für anderes Sachen offen.

    Warum bekommst du da eigentlich Kopfschmerzen? Ist RRD echt so schlimm?

    Ich dachte, dass Python die Temperaturen ausliest, und dann an RRDTool übergibt.
    Habe halt vorallem gelesen, dass es sehr schonend sein soll, weil der kleine ja auch nicht so viel Leistung hat. Hab irgendwo im großen Netz gelesen, dass er mit Datenbanken wie SQLight oä. schnell an die Grenzen kommt, vorallem wenn es mehrere Sensoren sind.

    Kannst du mir da etwas, für einen Laien verständliches, Programm oder Tutorial nennen?

    Es sollte auf jeden Fall möglich sein, verschiedene Anzeigemöglichkeiten anzeigen zu lassen.
    Jahr
    Monat
    Woche
    24h
    6h
    die letzten 30 min.

    Abfragen sollen im 10 oder 15 min Takt erfolgen.

    Was mir optisch ganz gut gefallen würde, ist diese hier: http://pi.tafkas.net/temperatures/

    Aber wie gesagt ich bin da gerne offen für alles, solange es nicht allzu schwer ist.

    • Offizieller Beitrag

    Die Anzeigemöglichkeiten sind ja kein problem, sind ja bloß unterschiedlich DB Abfragen

    Code
    Select temp, date FROM Tabelle WHERE date >= heute 00:00
     Select temp, date FROM Tabelle WHERE date >= heute - 1 Monat 00:00
    usw

    .

    rrdtool funktioniert, sieht aber (imho) nicht schön aus und eine Anfängerfreundliche Syntax ist auch was anderes. Wenn man sich mal eingelesen hat, ist diese auch verständlich und nachvollziehbar aber ich mag sie nicht. ;)

    Ich persönlich nutze für charts chart.js in verbindung mit php und irgendeiner Datenbank (atm postgresql) aber sqlite sollte auf dem Pi noch halbwegs performant laufen. Und wenn man dann noch anstelle des Apachen einen Leichgewichtigeren Webserver nimmt, sollte das der Pi stemmen können.

    Es gibt python rrdttol implementierungen (rrdpython)

  • Mit JavaScript (.js) habe ich quasi gar nichts am Hut. Habe mir da auch noch nie Code angesehen.
    Ich denke, wenn ich das ganze auf SQLight umbaue und dann weiterhin Gnuplot verwende, ist das dann der selbe Effekt, wie momentan mit der Textdatei und Gnuplot?

    Die Dokumentation von RRDTool und Python habe ich auch schon gesehen, kann aber damit überhaupt nichts anfangen...

  • Hi,
    ich denke, Python ist da eher marginal beteiligt ...
    Ich fummle auch gerade so nebenbei ein bisschen mit dem rrdtool rum (ich will mysql aus einer Stromverbrauchs-Anwendung rausschmeissen), hab' da aber noch keinen rechten Plan - das Um und Auf scheint das abgelegte Datenformat zu sein.
    Tuts gibt allerdings doch zum Schweinefüttern ( z.B. vom Linux-Magazin auf deutsch -> hier <- ) und auch auf deren Homepage ( -> hier <- ). Da sind auch sehr schön gemachte Anwendungsbeispiele verlinkt.

    cu,
    -ds-

  • Danke erstmal. Aber bei deinem ersten Link wird Perl verwendet. Und bei den 2. Ist die Herstellerseite direkt mit der ich nicht zurecht komme.

    Mit Perl und Shellscript gibts wirklich viele. Da verstehe ich halt leider viel zu wenig davon. Ich komme leider mit Python soweit zurecht das es bisher geht.
    Alles war ich bisher mit Python und RRD gefunden habe war für mich nicht allzu ersichtlich.

  • Ich habe mir jetzt nochmal viel über RRDTool durchgelesen.
    Viele schreiben, dass es die Datenbank für Temperatur uns graphische Auswertung sein soll.

    Allerdings hoffe ich, dass mir jemand zu meinen Fragen helfen kann.
    Ich will das vielleicht am Wochenende umsetzen.

    Ich habe auf der Herstellerseite folgendes Tutoral gefunden.

    Code
    rrdtool create temperature.rrd --step 300 \
      DS:temp:GAUGE:600:-273:5000 \
      RRA:AVERAGE:0.5:1:1200 \
      RRA:MIN:0.5:12:2400 \
      RRA:MAX:0.5:12:2400 \
      RRA:AVERAGE:0.5:12:2400

    Und folgende Erklärung ist mit dabei:

    Zitat

    This sets up an RRD called temperature.rrd which accepts one temperature value every 300 seconds. If no new data is supplied for more than 600 seconds, the temperature becomes *UNKNOWN*. The minimum acceptable value is -273 and the maximum is 5'000.

    A few archive areas are also defined. The first stores the temperatures supplied for 100 hours (1'200 * 300 seconds = 100 hours). The second RRA stores the minimum temperature recorded over every hour (12 * 300 seconds = 1 hour), for 100 days (2'400 hours). The third and the fourth RRA's do the same for the maximum and average temperature, respectively.

    Ich würde jetzt gerne mal die einzelnen Zeilen aufsplitten:

    Code
    rrdtool create temperature.rrd --step 300 \


    Temperatru.rrd = Datenbankname
    step 300 = es wird alle 5 Minuten ein Wert hinzugefügt

    Code
    DS:temp:GAUGE:600:-273:5000 \


    DS = Data Source ( ich vermute so eine Art Tabelle innerhalb der Datenbank)
    temp = Tabellename
    GAUGE = ?
    600 = wenn 600 Sekunden(10Min) kein Wert eingetragen wurde, wir ein "Unknown" eingetragen.
    -273 = Minimalwert
    5000 = Maximalwert

    Code
    RRA:AVERAGE:0.5:1:1200 \


    RRA = ?
    Average = Durchschnittswert
    0.5 = ?
    1 = ?
    1200 = ?

    Es wird zwar erklärt, dass 1200 * 300 Sekunden, 100 Stunden sind. Allerdings kann ich mit den Werten nichts anfangen.
    Kann es sein dass die 1 der Multiplikator für die 1200 auf die Dauer der Eintragung ist?

    Code
    RRA:MIN:0.5:12:2400 \


    .
    .
    .
    2400 = Stunden ( Wie in der Beschreibung vom Hersteller beschrieben sind die 2400 eine Stundenangabe. )

    -----------------------------------------
    Was hier aber nicht auf geht. In der 2. Zeile wird einfach von 1200 gesprochen ohne Werteangabe.
    In der 3. Zeile wird von 2400 Stunden gesprochen

    Kann mir das vielleicht jemand kurz und knapp erklären.

    Ich würde gerne:
    - 10 Temperatursensoren speichern
    verschiedene Anzeigen auswerten:
    - 1 Stunde
    - 6 Stunden
    - 1 Tag
    - 1 Woche
    - 1 Monat
    - 1 Jahr

    Ich habe leider keine Ahnung wie man das mit den vielen Zahlen und alles bewerkstelligt....

    Bitte schreibt mir keinen kompletten Code ich will mir selber den Kopf zerbrechen. Aber vielleicht kann mir jemand helfen, wenn mir jemand die ganzen Angaben oben ausfüllt!

    Danke

  • Hallo wusa.
    ich habe meine Heizungsüberwachung mit RRD realisiert und das funktioniert sehr gut.
    Bevor du richtig los legst solltest du dir die genaue Struktur der Datenbank überlegen.
    Es empfiehlt sich für jede Grafik eine eigene Datenbank anzulegen. Die Datenbank(en) ist/sind dann kleiner und damit schneller. Außerdem kannst mit einer Anfangen und wenn alles klappt brauchst du alle nur noch kopieren und die Namen entsprechend anpassen. Ein späteres ändern einer Datenbank ist ssssehr aufwendig.

    Zitat

    rrdtool create temperature.rrd --step 300 \

    hast du richtig gedeutet.

    Zitat

    DS:temp:GAUGE:600:-273:5000 \


    temp ist Name des wertes und muss eindeutig sein. Pro Datenquelle ist ein DS erforderlich.
    GAUGE ist der Datentyp es gibt folgende Typen
    GAUGE: Absolutwert
    COUNTER: Zähler nur ansteigend, gespeichert wird die Differnez zum Vorwert.
    DERIVE: Wie Counter aber auch fallende Werte zulässig
    Den Rest hast du schon selbst erklärt.

    Zitat


    RRA:AVERAGE:0.5:1:1200 \
    RRA:MIN:0.5:12:2400 \
    RRA:MAX:0.5:12:2400 \
    RRA:AVERAGE:0.5:12:2400


    Dient der Daten Archivierung

    Zitat

    RAA:datenart:xff:stufen:zeilenzahl


    datenart:
    AVERAGE = Mittelwerte,
    MIN = Minimalwerte,
    MAX = Maximalwert
    xff:
    Wert zwischen 0 und 1 an. Bei einem Wert von 0.5 muss mindestens die Häifte der Werte vorliegen.
    stufen:
    Anzahl Werte die in die Berechnung des Datenpdes eingehen.
    zeilenanzahl:
    legt fest, für wieviele Messintewalle das Archiv Daten vorhält.
    (Quelle: Munin - Graphisches Netzwerk- und System-Monitoring)

    Ich komprimiere meine Daten nicht weiter, sondern mache die Datenreduktion bei der Grafikerstellung.

    Gruß aus der Stadt der CeBIT
    Jochen

  • Hallo wusa,

    sehr gute Insperationen für dein Projekt kannst du auf folgenden Links finden.

    http://www.kompf.de/weather/technik.html

    und folgende.

    Beispiele zu RRD- Tool Grafik

    http://www.arbeitsplatzvernichtung-durch-outsourcing.de/marty44/rrdtool.html

    RRDtool Wizard

    http://www.famzah.net/rrdwizard/rrdcreate.php

    Zu RRDtool create

    rrdtool create temperature.rrd --step 300 \
    DS:temp:GAUGE:600:-273:5000 \

    Der zu erwartente Messwert wird nicht im Bereich von -273 bis 5000 C liegen.

    ich habe z.B. mit

    DS:temps9:GAUGE:1200:-40:70 \ für Ausenfühler
    DS:temps10:GAUGE:1200:0:90 \ für Heizungsfühler

    eingestellt.

  • Hallo wusa,
    ich schon wieder. Habe noch 'ne Frage zur Aufgabenstellung:


    a) 10 Temperaturwerte in 1 Grafik oder oder mehren Grafiken
    b) die verschiedenen Anzeigen in einer Grafik (veränderliche Zeitachse) oder in 6 Grafiken.
    Insofern ist diese Überlegung wichtig, da für Grafik im Falle a) eine eigne RRD-Datei empfiehlt
    und im Falle b) je Grafik ebenfalls - aus Performance - eine eigne RRD-Datei empfiehlt (dann kommen unterschiedliche RAA-Sätze zum Einsatz).
    Zum Testen schreib doch einfach deinen Temperaturwert zusätzlich in eine - mit dem Tool http://www.famzah.net/rrdwizard/rrdcreate.php entworfene - RRD-Datei und guck dir das Ergebnis an.

    Gruß aus der Stadt der CeBIT
    Jochen

  • Hi


    a) 10 Temperaturwerte in 1 Grafik oder oder mehren Grafiken
    b) die verschiedenen Anzeigen in einer Grafik (veränderliche Zeitachse) oder in 6 Grafiken.
    Insofern ist diese Überlegung wichtig, da für Grafik im Falle a) eine eigne RRD-Datei empfiehlt
    und im Falle b) je Grafik ebenfalls - aus Performance - eine eigne RRD-Datei empfiehlt (dann kommen unterschiedliche RAA-Sätze zum Einsatz).


    Performance ist bei der Sensorenanzahl kein Thema. Und falls du verschiedene Grafiken haben willst, dann nimmt man nur den einzelnen Sensor und den passenden Zeitbereich.

    Ich habe ähniches mit meiner Heizung am laufen. Sechs Sensoren werden mit python (60 Zeilen) in eine RRD-Datei gepumpt. Die RRD-Datei ist derzeit für zwei Monate ausgelegt, werde ich aber bei Bedarf erweitern. Die Grafiken (Woche, 48h, 24h,8h,4h,2h,1h) werden als cronjob mit rrdtool erzeugt. Das ganze als Webseite mit Flask (37 Zeilen Python).
    Hier ein paar Grafiken.
    Woche:
    Tag:
    8 Stunden:
    4 Stunden:

    Ich konnte mit den Grafiken feststellen dass meine Heizung taktet und habe nun die Heizungseinstellung soweit angepasst dass dies seltener passiert.

  • So ich melde mich nochmal zurück.

    Ich bin momentan echt am überlegen, ob ich das ganze nicht auf Sqlite3 umsetzen soll. Irgendwie ist das noch am "einleuchtesten".
    RRD verschleiert irgendwann die Daten (soviel ich jetzt gelesen habe) und wenn ich mal eine Gegenüberstellung oder sagen wir mal einen Wert aus Vorjahr nachsehen will, dann denke ich, dass SQL am leichtesten ist.

    Über die Anzeige habe ich mir noch keine Gedanken gemacht. Vielleicht über Gnuplot. Das spielt glaube ich relativ gut mit Sqlite zusammen.

    Die Frage ist nur, wie ihr/ich so eine Sqlite3 Datenbank aufbauen würdet?
    Einen Table "Temperatur" und die 10 Werte darunter? Oder gibt es "saubere" Lösungen?

    Und welches Time-Format wäre am besten?

    Danke

  • wusa:

    da ich schon länger mit dem Gedanken spiele, div. Temperaturen an meiner Heizung auszulesen habe ich noch ein paar Fragen bzgl. der von Dir eingesetzten DS18B20.

    Wie hast Du diese in Dein Heizungssystem integriert? Soweit ich weiß verfügen Heizungen über eigene Fühler im Heizkreislauf, wenn man die Steuerung der Heizung direkt mit dem Raspi anspricht, könnte man direkte Einstellungen vornehmen lassen. So wie ich das sehe, sind das bei Dir zwei paar Schuhe.

    Da ich momentan mit einem Sensor Temperatur und Luftfeuchtigkeit messe, habe ich diese via Python in eine Textdatei ausgeben lassen. Da ich plane, einen Webserver einzurichten der mir aktuelle Daten anzeigen soll, plane ich ebenfalls mit SQLite3 - um Daten über längere Zeiträume vergleichen bzw. auswerten zu können. Ich denke, bei vielen Daten kommt man einfach nicht um eine gescheite DB herum.

    Mfg

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Hallo sls,

    da ich nicht in die Heizung eingreifen möchte, und auch nichts an der Heizung steuern möchte, habe Wasserdichte DS18B20 im Einsatz.
    Ich will quasi nur die Temperaturen im Vor- Rücklauf, und Warmwasserspeicher messen.

    Ich habe 10 Stück. Integriert wurden die Sensoren noch nicht. Ich bin immer noch am probieren und erst, wenn es in der Trockenübung sauber läuft, werden diese in meine Heizung integriert.
    Gedacht habe ich mir das ganze, da meine Rohre alle Isoliert sind, dass ich einfach die Fühler innerhalb der Isolierung stecke. Somit liegen dies komplett auf den Rohren auf und werden von Außen über die Isolierung geschützt. Ich denke damit kann man einigermaßen zuverlässige Werte erwarten.
    Zusammengeschlossen werden diese über ein Stück Cat5 Kabel.

  • Hi wusa,

    alles klar.

    Ich überlege gerade, ob es nicht Sinnvoll ist, für jede Temperatur (Vor-, Rücklauf und Speicher) in SQL ein eigenes Table zu entwerfen, in welchen die Temperaturen aufgelistet sind.

    Somit könnte man z.B. eine Grafik erstellen lassen, die verdeutlicht wie der Abfall konkret aussieht. Besonders über die Nachtabsenkung.

    MfG

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

Jetzt mitmachen!

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