Stromzählgerät mit welchen Programmierungen

  • Hallo Zusammen,

    nachdem ich mir jetzt tausende Seiten zu dem Thema angeschaut hab, möchte ich auch einen Stromzähler mit dem Raspi auslesen.
    Da aber alles, was ich gesehen habe, sehr speziell ist, ist es mir lieber, ich fange selber von vorne an.

    Auch ich möchte mit dem Raspy den S0-Bus am GPIO auslesen. Das ist das kleinere Übel als alter Elektronik-Bastler.
    Nachdem ich auch ein rieeesen langes Raspy-Buch studiert habe, habe ich mein erstes Python-Script geschrieben, welches auch schon sehr schön flutscht.

    Aber was mich einfach unsicher macht, sind die vielen verschiedenen Skripte, die ich in verschiedenen Sprachen schreiben muss.

    Könnt Ihr mir mal sagen, ob mein angedachter Weg so richtig ist:

    1. Mit dem Python-Skript, das in einer Endlosschleife läuft und nach dem Hochfahren automatisch gestartet wird, zähle ich die Impulse der S0-Schnittstelle. Diese schreibt mir das Script regelmässig (zum Beispiel alle 100 Impulse) fortlaufen mit Datum und Uhrzeit in eine csv-Datei. (Das Script funktiniert auch schon und ich hänge es mal an).
    2. Dann scheibe ich ein Bash-Script, mit dem ich die Werte der csv z. B. alle 10 Minuten in eine rrd-Datenbank weiterschreibe.
    Das Bash-Script lasse ich durch die (glaube Cron-Tab) auch regelmässig alle 10 Minuten ausführen und lasse mir aus der rrd-Dabenbank schöne Bilder mit Diagrammen auf die SD-Karte legen.
    3. Ich erstelle eine Html-Seite, die php-Code enthält und die Bilder automatisch aktualisiert.
    4. Mit dem Apache-Server mache ich die Html-Seite aus meinem privaten Lan zugänglich.

    Oh mann - und ich dachte, das geht alles mit Python.

    Aber gut - ist der Weg grundsätzlich so o.k? Bevor ich jetzt groß weitermache?

    Pfirt Eich
    Andi


    P.s. Leider krieg ich das Python-Script über den VNC-Server nicht auf meinen Windows-PC, sonst würde ich es gerne hier mal einstellen.

  • Das geht ja auch alles mit Python. Mindestens mal das Bash-Skript ist überflüssig, du kannst genauso gut direkt mit RDD sprechen. Entweder durch das Python-Binding (zB https://github.com/commx/python-rrdtool, kA ob es noch bessere gibt), oder mit denselben befehlen, die auch im bash-skript stehen. Nur aufgerufen von Python, mit dem subprocess-Modul.

    Auch das HTML und den Webserver kannst du mit Python machen.

    Insofern... schmeiss weg, was du nicht brauchst/willst.

  • Es gibt direkt ein Modul für Pyhton und rrdtool

    Code
    apt-get install -y python-rrdtool

    Und dann würde ich das Python Script direkt als Deamon schreiben. So das es startet und dann die ganze Zeit im Hintergrund läuft.
    Guck Dir dazu mal python-deamon an.
    Im Grunde forken, setpid, ggf. SIG Handler einbauen, stdin, stdout und stderr umleiten und dann den Parent beenden.
    Im Fork kannst Du die PID auslesen und wegschreiben nach /var/run/DeinTool.pid um sie später auszulesen und später auch wieder ein SIG schicken zum beenden und weitere Handler, wie z.B. Config neu einlesen und weitere Dinge.

  • Hallo,

    Und Dank Euch gleich mal.
    Dann werd ich auf jeden Fall mal versuchen die RRD ins Python-Script zu fummeln.

    Was ist denn der Unterschied ob ich es als Deamon laufen lass?

    Und wie isn des mit der Datenbank und den Daten? Wieviel Datensätze passen mir denn da rein und was passier wenn mir der Raspi mal abkackt? Kann man von der RDD ne Sicherung erstellen?

    Ach und noch ne Frage: Damit das Script nicht nach dem 1. Durchlauf stoppt, hab ich über der Abfrage des Gpios eine Endlosschleife mit While 1:
    Macht man das so, oder blockiert mir die Schleife den ganzen Raspi?
    In der Zeile wo der Gpio abgefragt wird, wartet das Script auf eine Flanke.

    Dank Euch
    Andi

    Einmal editiert, zuletzt von Tecci (26. Januar 2017 um 21:09)

  • In die Datenbank passt so viel wie Platz auf der Platte ist.
    Du kannst aber auch im rrd dafür sorgen das Daten nach X Tagen, Wochen und Monate interpoliert werden, also platzsparend speichern.

    Je nachdem wie du das mit der while true Schleife machst kann das schon Last machen.
    Kann man aber dadurch verhindern das es kurz Pause macht und nicht direkt nach einem Job wieder von vorne läuft. Und du kannst später auch noch gucken in welchem Status das System insgesamt ist. IO Last usw und die Pause dynamisch dazu anpassen.

    Cron ist auf dem Pi nicht zeitlich genau weil der Pi keine Clock on Board hat. Ausserdem läuft es dann und ist nicht davon abhängig.
    Kannst auch alles im einem bauen. Auslesen und wenn das Script merkt das man wieder Zeit ist die Bilder zu basteln macht es das dann eben. Dann am besten als fork. Dann laufen beide unabhängig voneinander. Der Bild-mach Job läuft dann einfach und wenn fertig beendet er sich und gut.
    Musst dann halt per lock-File am besten checken ob er schon läuft. Damit er sich nicht selbst überholt wenn später mal viele Daten drin sind.

  • Hallo Ruediger,

    vielen Dank für Deine Tipps.
    Ich werde das damit versuchen.

    Aber ich glaube Du überschätzt mich etwas. Von den meisten Sachen, die Du schreibst, verstehe ich nur Bahnhof. Aber es hilft ja nix, da muss ich jetzt durch.

    Danke nochmal.
    Automatisch zusammengefügt:
    Na toll - bei mir scheiterts ja schon von Anfang an.

    Habe das rrd-tool nun wie von Dir Rüdiger beschrieben installiert.
    Wenn ich jedoch ein Python-Script erstelle, wo nur import rrdtool drin steht, kommt schon folgende Fehlermeldung in der Shell:
    Traceback (most recent call last):
    File "/home/pi/rddtest.py", line 3, in <module>
    import rrdtool
    ImportError: No module named 'rrdtool'

    Einmal editiert, zuletzt von Tecci (27. Januar 2017 um 19:25)

  • Sorry, hätte ich natürlich gleich mitschreien können.

    Aber unabhängig davon, habe ich es heute mit einem Bash-Script probiert.
    Ich bekomme aber nur hunderte Fehlermeldungen und stecke jetzt bei der einen fest.
    Ehrlich gesagt, bin ich kurz vor dem Aufgeben.
    Entweder meldet er einen Fehler, dass ich für was keine Berechtigung habe. Dann findet er wieder eine Datei nicht.
    Ich hänge mal den Code an und die Fehlermeldung lautet:

    pi@raspberrypi / $ ./home/pi/rrdscript
    Auf gehts -rrd auslesen
    ERROR: creating '/strom.rrd': Keine Berechtigung
    RRD wurde jetzt erstellt
    ERROR: /home/pi/strom.rrd: found extra data on update argument: U
    ERROR: Could not make sense out of 'c'

    Hier der code:

  • Ich bin kein Bash-Profi, aber es sieht zB so aus als wuerde die Variable RRDDIR nicht existieren, denn er versucht /strom.rrd statt /home/pi/strom.rrd zu erzeugen. Das liegt dann ueblicherweise an irgendwelchen obskuren whitespace-Fehleren. Also

    FOO = name

    geht, aber

    FOO=name

    nicht. Oder umgekehrt. Darum benutze ich bash nur selten. Wenn du die Python-route verfolgen willst, kann ich dir dabei helfen (und brauche Informationen). Wenn nicht - andere hier kennen sich mit bash aus, vielleicht kommt da ja wer aus dem Gebuesch.

  • Erst mal Danke für Deine Geduld - das ist ein Hoffnungsschimmer für mich! :)

    Also zurück zu Python:
    Wenn ich im Terminal eingebe apt-get install -y python-rrdtool, kommt:
    E: Sperrdatei /var/lib/dpkg/lock konnte nicht geöffnet werden. - open (13: Keine Berechtigung)
    E: Sperren des Administrationsverzeichnisses (/var/lib/dpkg/) nicht möglich, sind Sie root?

    Wenn ich eingebe pip install rrdtool, kommt:
    Downloading/unpacking rrdtool
    Downloading rrdtool-0.1.11.tar.gz
    Running setup.py (path:/tmp/pip-build-nB1VB_/rrdtool/setup.py) egg_info for package rrdtool
    /tmp/tmp_python_rrdtoolgbBw1K/test_rrdtool.c:2:17: fatal error: rrd.h: Datei oder Verzeichnis nicht gefunden
    #include <rrd.h>
    ^
    compilation terminated.
    Error: Unable to compile the binary module. Do you have the rrdtool header and libraries installed?
    Complete output from command python setup.py egg_info:
    /tmp/tmp_python_rrdtoolgbBw1K/test_rrdtool.c:2:17: fatal error: rrd.h: Datei oder Verzeichnis nicht gefunden

    #include <rrd.h>

    ^

    compilation terminated.

    Error: Unable to compile the binary module. Do you have the rrdtool header and libraries installed?

    ----------------------------------------
    Cleaning up...
    Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-nB1VB_/rrdtool
    Storing debug log for failure in /home/pi/.pip/pip.log

    Wenn ich eingebe #pip install rrdtool, tut sich gar nix

    Irgendwie muss es aber mit install rrdtool gefunzt haben, da es in python2 zu funktionieren scheint.

    Ich hoffe, Du kannst damit was anfangen?
    Gruß
    Andi

  • Servus Andi,


    ...
    E: Sperrdatei /var/lib/dpkg/lock konnte nicht geöffnet werden. - open (13: Keine Berechtigung)
    E: Sperren des Administrationsverzeichnisses (/var/lib/dpkg/) nicht möglich, sind Sie root?

    es ist durchaus sinnvoll, Fehlermeldungen auch zu lesen und sie nicht einfach nur beiläufig zur Kenntnis zu nehmen :fies:

    Bist Du root?
    Nein, wohl nicht, denn dazu musst Du sudo vor apt-get ... stellen.
    cu,
    -ds-

  • Ich muss dreamshader beipflichten. Die Fehlermeldungen sind recht klar. Mal fehlt dir root-Zugriff, mal die Entwicklerversion des rddtools. Da gibt's bestimmt irgendein dev-Paket. Auf meinem Ubuntu Mate zB librrd-dev - ich vermute, dass auch das bei dir installierbar ist, und dann kann pip auch funktionieren.

  • Sorry Leute,
    aber zwischen Fehlermeldungen lesen und Fehlermeldungen verstehen ist halt ein Unterschied.
    Und da ich leider keine Linux-Kenntnisse habe, stelle ich mich wahrscheinlich etwas dumm an.

    Ich dachte halt einfach wenn ich nach einem fest vorgegebenen Weg vorgehe, kann nichts schiefgehen.
    Scheinbar ist das aber nicht so, da ich mit allen von mir gefundenen und in diesem Beitrag gefundenen Befehlen nicht weiterkomm.

    Ungefähr so, als wenn ich schreibe: Mein Auto geht nicht mehr. und ich bekomme als Antwort, "Dann reparier Deine Einspritzanlage".

    Und glaubt mir: Auch sudo habe ich mit Sicherheit auch schon probiert.
    Ich bin halt mal ein Neuling, dem Sachen und Fehlermeldungen, die für Euch selbstverständlich sind, gar nichts sagen.

  • Tja ...


    ... lesen und Fehlermeldungen verstehen ist halt ein Unterschied.
    ... Ich bin halt mal ein Neuling, dem Sachen und Fehlermeldungen, die für Euch selbstverständlich sind, gar nichts sagen.


    sorry, aber das ist keine cryptische Fehlermeldung in nepalesisch sondern ein klarer Hinweis aus deutsch: "sind sie root"
    Das hat nix mit verstehen und erst mal auch nichts mit Anfänger und Linux zu tun.
    Wenn denn alle Stricke reissen, kann man danach auch mal einen Suchmaschine befragen ...


    Und glaubt mir: Auch sudo habe ich mit Sicherheit auch schon probiert.

    Hast Du? Was kam denn da für eine Fehlermeldung?
    Poste doch mal die Ausgabe von

    Code
    sudo  apt-get install -y python-rrdtool

    Solange Du den ersten Schritt nicht erfolgreich durchgeführt hast, brauchst Du den nächsten gar nicht machen. Das ist so wie im richtigen Leben ...
    Und das hat überhaupt nichts damit zu tun, dass hier jemand was von "reparier Deine Einspritzanlage" sagt.
    Ein bisschen Aufmerksamkeit, nachdenken und auch mal selbstständig was recherchieren ist wohl nicht zuviel verlangt. :fies:

    btw: dieses Forum ist kein Linux-Grundlagen Board. Dazu gibt es jede Menge andere Foren und Tutorials. Du kannst nicht erwarten, dass wir hier jeden bei der Hand nehmen und ihm auch noch die Grundlagen seines Betriebssystems vermitteln.
    Wenigstens das Basiswissen sollte man sich schon selbst erarbeiten, wenn man sich einen raspi zulegt und damit was machen möchte.

    cu,
    -ds-

  • Du hast ja Recht.
    Aber eins kannst Du mir glauben, ich google mir hier die Finger wund.
    Und mein Raspi-Buch mit 1100 Seiten ist schon bald mit mir verheiratet.
    Nur für mich als Neuling ist das sehr viel Stoff auf einmal.

    Also zurück zum Anfang:
    Wenn ich das von Dir geschriebene Kommando mit sudo eingebe, kommt keine Fehlermeldung, sondern:


    Wie gesagt, mit python2 funktioniert es scheinbar. Vielleicht sollte ich es einfach damit erst mal probieren.

  • Hallo Tecci,

    und? Wo ist da jetzt ein Problem? Das Programm teilt Dir jetzt irgendwas mit. Kannst Du durchlesen, ignorieren. Du kannst aber auch den Ratschlag beherzigen und mal

    Code
    sudo apt-get autoremove

    eingeben, um Platz auf der SD-Karte zu schaffen. Kannst Du machen, musst Du aber nicht.

    Welches 1100 Seiten starkes Buch ackerst Du denn durch? Ich habe mich da mit leichterer Kost begnügt und alles, was ich als so bedeutsam empfand, dass ich es vermutlich gebrauchen könnte, habe ich dann auch ausprobiert. So ein popeliges update/upgrade gehört zu den ganz elementaren Befehlen. Die sollten sitzen und keinerlei Probleme bereiten (wie 10 bis 20 anderer Linux-Kommandos inkl. Optionen auch).

    :s

    Vielleicht investierst Du nur Zeit in die noch nicht passende Lektüre?


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Andreas: nö ... da geht's primär um das rrdtool ...

    Also ... dann hätte wir noch einige imho offene Punkte, die _deets_ hinterfragt hatte:


    Gleiches Python fuer Installation und Versuch verwendet? Was war denn die Ausgabe von "pip install rddtool"?


    Ich bin kein Bash-Profi, aber es sieht zB so aus als wuerde die Variable RRDDIR nicht existieren, denn er versucht /strom.rrd statt /home/pi/strom.rrd zu erzeugen. Das liegt dann ueblicherweise an irgendwelchen obskuren whitespace-Fehleren. Also

    FOO = name

    geht, aber

    FOO=name

    nicht. Oder umgekehrt. Darum benutze ich bash nur selten. Wenn du die Python-route verfolgen willst, kann ich dir dabei helfen (und brauche Informationen). Wenn nicht - andere hier kennen sich mit bash aus, vielleicht kommt da ja wer aus dem Gebuesch.


    ...
    Da gibt's bestimmt irgendein dev-Paket. Auf meinem Ubuntu Mate zB librrd-dev - ich vermute, dass auch das bei dir installierbar ist, und dann kann pip auch funktionieren.

    Wie sieht es damit aus?
    Notfalls musst Du Dir wohl eine Installations-Anleitung für rrdtool suchen.

    cu,
    -ds-

  • Also da es ja mit python2 einwandfrei klappt, habe ich es jetzt erst mal damit versucht.
    Und nachdem ich den ganzen Nachmittag alle möglichen Code-Varianten ausprobiert habe (das rrd-tool ist da je nach Programmiersprache verschieden), hat es endlich geklappt.

    Er hat mir die Datenbank ohne Fehlermeldung erstellt und auch ein .png daraus erzeugt. Phuuuuu.
    Aber jetzt hänge ich wieder an einer Fehlermeldung fest. Ich glaube es hat irgendwas mit dem Format der Variable data zu tun, in welchen die Werte vorliegen.
    Könnt Ihr mir dazu helfen?

    ich habs auch schon ohne "$" vorab probiert. Da kommt der gleiche Fehler.


    Code
    Traceback (most recent call last):
      File "/home/pi/rrdtest2.py", line 15, in <module>
       rrdtool.update('/home/pi/test.rrd', 'N:$data')
    error: /home/pi/test.rrd: conversion of '$data' to float not complete: tail '$data'

Jetzt mitmachen!

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