Stromzählgerät mit welchen Programmierungen

  • Na super ... :thumbs1: ... geht doch, oder? ;


    Allerdings kann ich Dir da jetzt nicht weiterhelfen ... Python ist ein Thema, mit dem ich nix am Hut hab.
    Kleiner Tipp: such' doch mal nach dem allgemeinen Teil (dem Teil ohne spezielle Namen aus Deinem Programm) ... also z.B. "to float not complete: tail" ...
    Evtl. wirst Du da schon fündig.


    cu,
    -ds-

  • Habe natürlich schon gegooglet, aber da kommt nicht viel Hilfreiches.
    Irgendwas, dass das rrd-tool mit unsichtbaren Zeichen nicht klarkommt, die von einer Windows-Maschine her kommen.
    Vielleicht liegts daran, dass ich über einen Windows-PC per VNC am Raspi arbeite.
    Egal - das krige ich schon hin.


    Aber kann ich bitte nochmal die python-Freaks aktivieren?
    Wie kann ich es denn einfach und sinnvoll angehen, dass mir das Skript automatisch z. B. alle 5 Minuten einen Wert in die rrd schreibt?
    Ich kann ja in der rrd einen Zeitwert festlegen, in dem die rrd einen Wert erwartet, aber das heisst ja noch lange nicht, dass sie auch einen bekommt.


    Hab gelesen man rechnet die aktuelle Zeit minus die Zeit der letzten DB-Aktualisierunge und nimmt die Differnenz als Grenzwert.
    Geht des so?


    Muchas Gracias

  • Die RRD-Bindungen für Python scheint es tatsächlich nur für Python 2 zu geben.


    Zu Deinem Skript: Willst Du tatsächlich nur den letzten Datensatz in die Datenbank eintragen? Wie sieht denn der Inhalt von data aus? Versuch's mal mit


    Code
    rrdtool.update('/home/pi/test.rrd', 'N:'+data)


    Prinzipiell verstehe ich den Ansatz, die Daten erst in eine CSV-Datei und erst von dort in die RRD zu schreiben nicht. Wozu soll das gut sein? Warum lässt Du Dein Python-Skript nicht direkt in die RRD schreiben?

  • Hallo Manuel,


    der Ansatz mit erst in die csv schreiben, kam vom Anfang des Projekts.
    In einem Beispiel wurde mit python die csv erzeugt und dann mit einem bash-script die Datenbank daraus erzeugt und periodisch gefüllt.


    Nachdem ich jetzt aber alles in python2 machen kann Stromzähler abgreifen und rrd erzeugen, werde ich es ohne csv machen.
    Die csv war nur zum testen ob ich überhautp die rrd hinkriege.


    Ich werde mir von python dann wahrscheinlich direkt in die rrd schreiben und parallel jede Stund einen Eintrag in eine unabhängige csv schreiben.
    Sollte mal was mit der Datenbank sein, habe ich wenigstens die Daten nochmal in einer Universal-Datei.


    Aber hast Du evtl. für mich nen Tipp, wie ich das mit der zeit hinkriege, dass mir python alle 5 Minuten einen Eintrag in der rrd macht?


    Pfirte
    Andi
    Automatisch zusammengefügt:[hr]
    Halt - Brrrt !
    Habs jetzt mal wo anders hingeschoben, da es ja jetzt speziell um Python geht:
    http://www.forum-raspberrypi.d…e-bestimmte-funktion-fest


    Tschüssn

    Edited once, last by Tecci ().

  • Hallo,


    mannoooo.
    Was hatn python2 jetzt schon wieder gegen meine Formatierung fürs csv-schreiben?
    Das hat bei python3 wiederum schon schön geklappt.


    Und irgendwas scheint auch mit der gpio-Abfrage nicht zu stimmen.
    Könnt ihr mir mal reinschauen, an was es liegen könnte?



    Code
    Traceback (most recent call last):
      File "/home/pi/kwlogger v1.py", line 43, in <module>
       cw.writerow([impuls, strftime("%d.%m.%y",lt), strftime("%H:%M:%S",lt)])  #Neuen KW-STand schreiben
    TypeError: argument must be 9-item sequence, not builtin_function_or_method
    >>> TypeError: impulszaehler() takes no arguments (1 given)
    TypeError: impulszaehler() takes no arguments (1 given)
    TypeError: impulszaehler() takes no arguments (1 given)
  • Du hast zwei Fehler. du rufst localtime nicht auf, also ist lt nicht die Zeit, sondern die Funktion zur zeitnahme. Und du brauchst ein Argument fuer die Funktion impulszaehler.

  • Wenn du eine Funktion schreibst, dann bekommt die 0-n Argumente:


    Code
    def eine_funktion(mit, einer, reihe, von, argumenten):
            print(mit + einer * reihe - von /  argumenten)


    Das is wirklich Python absolut-nur-5-Minuten-ins-Tutorial-geschaut-Level. Du solltest mal so ein Tutorial durcharbeiten, das klaert solche Probleme dann ggf. schneller fuer dich schon alleine.

  • Aha, dann müsste bei mir das Argument die Variable Impuls sein, die in der Funktion verarbeitet wird, oder?

  • Also ich hatte mir die Teile zu Funktionen sehr oft durchgeschaut, aber auf die Funktion, die von callback aufgerufen wird, muss man es scheinbar etwas anders sehen. Die Funktion bekommt den Kanal mitgeteilt, ja. Aber innerhalb der Funktion brauche ich die Variable, die den Kanal enthält gar nicht.
    Ich habe jetzt in der Funktion einfach ein (n) in Klammern gesetzt, obwohl ich es in der Funktion nicht brauche.
    Außerdem musste ich noch die Variable in der Funktion auf global setzen.
    Und jetzt geht's.


    Sorry aber nochmal, mit dem Verstehen einer Funktion wäre das nicht getan und ich bin echt etwas enttäuscht, dass Du Dich bei jeder Gelegenheit so profilieren musst.
    Es gibt halt mal Anfänger und glaube mir, ich google mir hier die Finger wund und versuche nicht den Eindruck zu erwecken, ich möchte mir den Code schreiben lassen.
    Ich denke das kann man auch an meinem Script sehen.


    Dann kommt noch dazu dass scheinbar Python nicht gleich Python ist.
    Alleine die Befehle zum rrd-Tool werden von google in etlichen verschiedenen Formaten gefunden.


    Also was ist dabei eine Lösung zu geben und diese kurz zu erklären?

  • Das *du* die Variable nicht brauchst, kann der Autor der Bibliothek nicht wissen. Andere brauchen sie, und darum uebergibt er sie. Es steht dir ja frei (so wie du es tust), diese zu ignorieren.


    Was meine Profilierungssucht angeht - die haelt sich prinzipiell in Grenzen. Das ist eher Genervtheit, zum 10tausendstenmal die selben, grundlegenden Probleme erlaeutern zu sollen. Und dabei auch immer und immer wieder festzustellen, dass es eine gewisse "Servicementalitaet" gibt - es soll gefaelligst laeuffaehiger Code abgeliefert werden, man sei ja nun mal Anfaenger, und koenne das nicht.


    Ich soll also


    - deinen Code hier rauspulen
    - den bei mir zum laufen bringen (was ggf. das installieren diverser Pakete und anklemmen von nicht vorhandener Hardware bedeutet).
    - hier posten, und auch noch umfangreich erklaeren, auf die Gefahr hin, dass du einer von wenigen bist, die eine Erklaerung *wollen*, statt einfach nur eine lauffaehige Loesung, wie die meisten.


    Viel Arbeit. Und jetzt nehmen wir die mal 10, am Tag, und dann sind wir ungefaehr bei dem, was ich (oder andere) hier zu bringen haetten deiner Vorstellung nach.


    Ist mir zu viel. Ich habe dir in jedem meiner Postings knappe, aber immer zielfuehrende Kommentare hinterlassen. Teilweise garniert mit dem Hinweis, dass die Loesung fuer das Problem sich durch Eigenarbeit auch erreichen laesst durch Links auf Dokumentation oder Verweise auf Tutorials, in der Hoffnung, dass damit dann die Probleme hier diskutiert werden, fuer die du das *nicht* hinbekommen hast. Wenn man "Python Funktionen Argumente" googelt, findet man einen *Sack* von Tutorial-Seiten, die einem versuchen, das naeher zu bringen. Hast du das mal probiert zu machen? Schien mir nicht so, denn sonst waere meines Erachtens die Folgefrage spezifischer gewesen.


    Wenn dir das zu viel des Guten ist, soll mir das Recht sein. Es ist dein Projekt, dein Code, dein Problem. Wenn dich meine Art dir zu helfen nervt, loesen wir das Problem ganz einfach: ich halte meine Tippfingerchen einfach still :)