RRDTool Laufzeit

  • Schönen guten Morgen,

    ich bin gerade dabei mein RRDTool Skript für 2 Klimaanlagen zu schreiben. Mein Skript zeichnet auf wann welche Klimaanlage läuft. An einer Stelle komme ich aber leider nicht weiter. icon_confused.gif Ich möchte gerne noch unter mein Diagramm, mit einem GPRINT Befehl oder so, noch die Laufzeit hoch zählen lassen.
    Hat einer vielleicht eine Idee wie das funktioniert??

    Wäre echt nett wenn mir einer helfen könnte. icon_wink.gif

    Gruß Kellermann

  • Ich denk das beste wär wenn du uns dein Script zum ermitteln und anzeigen der Daten zeigst um dir auch besser/gezielter helfen zu können ;)

    Weiss nicht genau wieso oder wie du RRDtool nutzt, genausowenig welche Daten du erfasst - um auch eine Laufzeit anzuzeigen müsstest du aber auch die Zeit mit speichern

    Als kleines Anschauungsbeispiel: CPU/Sys-Infos
    (am Ende des Posts das Bild im Spoiler)

  • Oh hier ist natürlich mein Skript: :)

    Ich hoffe das Skript hilft.;)
    Aber ich hätte noch paar Fragen...

    1. Die Wartedauer ist ja momentan auf 5 Minuten gesetzt. Kann ich diese auch auf 1 Minute setzten und es bleibt dann alles??

    Und 2. Das Skript läuft auf einem Raspberry Pi und soll damit zwei Klimaanlagen aufzeichnen. Falls dann der RPi durch einen Stromausfall etc. vielleicht mal ausgeschaltet wird, wie kann man dann am besten überprüfen, ob dei Datenbank schon besteht, damit man die alten Daten noch hat?

    Aber danke schon mal für eure Hilfe. :)

    • Offizieller Beitrag
    Code
    try:
       with open('/home/pi/Desktop/Programme/klimaanlagentest.rrd'): pass
    except IOError:
       print "Database does not exist. Create a new one here

    allerdings würde ich bei so grossen wartezeiten, gar keine benutzen und das ganze über nen cronjob laufen lassen bzw bei kleineren Zeiten in python direkt

    Code
    import time
    time.sleep(300)

    allerdings würde ich bei so grossen wartezeiten, gar keine benutzen und das ganze über nen cronjob laufen lassen

  • Schonmal danke für das erste. :)

    Das mit

    Code
    time.sleep(300)


    hab ich ja schon. Das funktioniert auch einwandfrei. Meine Frage ist halt, ob das auch mit einer Minute geht? Ich hab mal

    Code
    time.sleep(60)


    gesetzt und aufeinmal wurde nichts mehr in die Datenbank geschrieben und nichts mehr dargestellt...

    Und die 2. Frage ist halt ja noch, wie ich die Laufzeit unter dem Diagramm hoch zählen lassen kann?:huh:

  • Kann es sein das du die Frage bereits im Debianforum gestellt hast? http://debianforum.de/forum/viewtopi…144704&p=950846

    Anstatt das python Script quasi 5 oder 1ne Minute schlafen zu lassen würde ich das ebenfalls über die crontab ausführen lassen, die crontab führt es dann jede Minute aus und liest die Daten aus

    Das nächste was mir auffällt ist das du ein Leerzeichen in einem Verzeichnissnamen hast:
    /home/pi/Desktop/RRDTool Graphen/klimaanlagen-%s.png
    Sowas sollte man generell vermeiden, ersetz das Leerzeichen lieber durch ein Unterstrich

    Und nun zu deiner Laufzeit:

    Ich kenn mich leider weder mit python noch mit RRDtools grossartig aus - solche Dinge habe ich bisher über bash Scripts und einer SQL Datenbank geregelt...

    Du speicherst bisher nur die Daten von den GPIO Pins in die RRD Datenbank - für eine Laufzeit Anzeige benötigt man aber normalerweise auch noch den Zeitpunkt wann die Daten erfasst/ausgelesen wurden, am besten als Unixtimestamp da man das am effektivsten verarbeiten kann

    Aber wie gesagt - ich nix ahnung von rrd - über google habe ich dazu folgendes gefunden: http://www.notdefine.de/projects.php?p…ool-unter-linux
    Da wird zumindest laut dem Diagram-Bild auch die Laufzeit angezeigt aber wieso/weshalb/warum kann ich nicht nachvollziehen :blush:

  • Ja hab ich, weil ich das umbedingt klären möchte. :D

    Ok das mit crontab hab ich mal gemacht. Mal sehen ob es funktioniert. ;)
    Das mit dem Verzeichnisnamen hab ich auch geändert. ;)

    Nun muss ich nur noch irgendwie hinbekommen, dass ich die Laufzeit aufzeichnen und darstellen kann... :-/

    Aber danke für deine Hilfe. :)

    Einmal editiert, zuletzt von Kellermann66 (10. September 2013 um 10:07)

  • Also damit meine ich wie lange die Klimaanlagen laufen.
    An denen sind momentan Zähler angeschlossen die die Stunden zählen. Diese sollen dann hierdurch ersetzt werden. Also müsste ich die Stunden von den vorhandenen Zählern übernehmen, also in meinem Skript vordefinieren und diese dann weiter hochzählen lassen. :)

  • Also eine läuft aufjedenfall immer. Es wird nur zwischen durch hin und her geschaltet, damit die beiden Klimaanlagen ungefähr auf dem gleichen Stand sind.

    Ehm ich habe gerade ein kleines Problem. :-/ Also ich habe mein Skript in das crontab geschrieben und ich kann auch sehen, dass das Programm jede Minute ausgeführt wird. Nur wird meine Datei mit dem Graphen nicht mehr aktualisiert. Woran liegt das? Kann das sein, dass ich irgendwas an den RRA's ändern muss weil ich jetzt jede Minute prüfe? Ich glaube auch es ist erst seid der Abfrage, ob es die Datenbank schon gibt, so. Hast du vielleicht eine Idee???:-/

    EDIT_____________
    Habe das Skript aus der crontab Datei rausgenommen und probiere es mit der Schleife nochmal neu. Glaube so wird es wieder klappen und es auch so lassen. ;)

    Einmal editiert, zuletzt von Kellermann66 (10. September 2013 um 11:04)

  • Wenn du das Script in die crontab tust musst du dein Script auch entsprechend anpassen - also time.sleep(300) raus nehmen
    Ansonsten bitte dein aktuelles Script nochmal posten


    Um solch eine Laufzeit zu ermitteln brauchst du halt etwas womit du feststellen kannst ob die Klimaanlage an ist... Wenn ja speicherst du die Zeit des auslesens, wenn nein dann nich bzw dann brauchst du ja auch keine Daten auslesen ;)

  • Jo es läuft auch wieder. :thumbs1:

    Also ich habe es mir so vorgestellt das, wenn z.B. eine Klimaanlage an ist, dass dann eine 1 am GPIO.input ist und dann vielleicht eine Fuktion oder so die Stunden hochzählt. :)
    Und das Ergebniss soll dann unterhalb des Diagramms dargstellt werden. :)

    Einmal editiert, zuletzt von Kellermann66 (10. September 2013 um 11:26)

    • Offizieller Beitrag

    Ich würde die Laufzeit in eine datei schreiben um auch bei einem plötzlichen Neustart des Pis noch die Laufzeitdaten zu haben
    PseudoCode

    Code
    UebernahmeWert = Wert aus Datei (z.B. 5h)
    Startzeit = aktuelle Zeit
    laufzeit = 0
    While True:
         Messung durchführen
         Messzeit = aktuelle Zeit
         Laufzeit = (Messzeit - Startzeit) + Uebernahmewert

    Ich kann das gern auch in richtigen Code übersetzen, leider fehlt mir dazu jetzt grade die Zeit, vielleicht hab ich heut abend ne ruhige Minute

  • Die Laufzeit ergibt sich doch durch das errechnen der verstrichenen Zeit, oder nicht? ;)

    Also angenommen um 13 Uhr startet die Klimaanlage und um 16:30 geht sie aus, dann beträgt die Laufzeit die Differenz also 3 Stunden 30 Minuten

    In Scriptform gäbe es dafür mehrere Möglichkeiten:

    Man speichert sich den Unixtimestamp vom Start und erreichnet dann anhand des Unixtimestamps vom Ende den Differenzwert - das ginge sehr einfach da der Unixtimestamp die Vergangenen Sekunden seit dem 1.1.1970 sind..
    Also als Beispiel:

    Code
    date +%s


    Gibt aus: 1378812422

    Daraus ein Menschlichlesbaren Wert anzeigen:

    Code
    date -d@1378812422 +"%H:%M:%S %d.%m.%Y"

    Nach einiger Zeigt erneut date +%s ausführen: 1378812626
    Das kann man wieder mit dem "Menschlichlesbaren Wert" umwandeln und sieht dann das ca. 3 Minuten vergangen sind..

    Wie kriegt man nun die verstrichene Zeit? Den ersten Wert vom letzten Wert abziehen:
    1378812626 - 1378812422 = 204

    Code
    expr 1378812626 - 1378812422

    Es sind also 204 Sekunden verstrichen .. 204 / 60 = 3,4 Minuten


    Oder man erstellt beim Start eine Datei und verwendet dann die modification-time der Datei, also den timestamp wann die Datei zuletzt verändert wurde (in diesem fall erstellt wurde)

    Code
    root@raspberrypi:~# touch /tmp/1
    root@raspberrypi:~# stat -c%y /tmp/1 
    2013-09-10 13:36:20.891586830 +0200
    root@raspberrypi:~#


    Oder:

    Code
    root@raspberrypi:~# stat -c%Y /tmp/1  
    1378812980
    root@raspberrypi:~#

    Was dann auch wieder im unixtimestamp Format wäre.. Demnach wären dann also 558 Sekunden vergangen zwischen dem ersten "date +%s" und dem letzten stat... ;)

  • Ok, das die Zeit ausgerechnet wird hab ich. Jetzt muss ich nur noch hinbekommen, dass ich den "UebernahmeWert" dazu rechnen kann, dann das die Zeit in Stunden angezeigt wird und dann muss es noch unter das Diagramm. :)

    EDIT: Und dann muss ja noch der aktuelle Stand irgendwie gespeichert werden, falls der RPi mal abstürzt...

    Wisst Ihr wie das geht?? :)

    Einmal editiert, zuletzt von Kellermann66 (10. September 2013 um 14:47)

Jetzt mitmachen!

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