Raspberry PI v2 - Smart Meter - Messung mit äquidistanter zeitlicher Auflösung

  • Hallo ihr,


    ich bin neu im Forum und im Umgang mit einem Raspberry PI.
    Für ein Projekt an unserer Uni müssen wir per Raspberry PI v2 einen Smart Meter (Easy Meter Q3DA1024) auslesen und sollen mit den Daten eine Verbraucheridentifikation über maschinelles Lernen realisieren.
    Da wir relativ wenig Ahnung von Raspberry Programmierung haben und es ein schon bestehendes Skript gibt, mit dem die Daten ausgelesen und in eine CSV Datei geschrieben werden haben wir dieses erstmal benutzt und an unsere Aufgabenstellung angepasst. Weiter haben wir uns um die Weiterleitung, -verarbeitung und -bearbeitung der Daten in einer PostGre Datenbank gekümmert und stehen jetzt allerdings vor dem Problem, dass die Daten vom Smart Meter nicht in äquidistanten Zeitschritten ausgelesen werden (zwischen 6 - 14 s).
    Die Messung ist auf ein 2-Sekundenraster begrenzt durch das Smart Meter (wahrscheinlich durch die IR Schnittstelle des Smart Meters)



    Ich wollte jetzt fragen ob es jemandem evtl möglich ist über das bestehende Skript zu schauen und sagen kann wo Verbesserungen möglich sind und ob direkt Fehler zu erkennen sind ... für mich liest sich das alles nur wie Bahnhof :huh:


    Wir haben die Vermutung das es an den Datagrammen liegt bzw. am Auslesen der einzelnen Daten aus dem String des Smart Meters liegen könnte.



    Ich hab das Skript mal als .txt Datei in den Anhang gepackt ... also falls jemand Zeit, Ahnung und Interesse hat wäre es echt sehr nett wenn wir ne kleine Hilfestellung bekommen könnten :danke_ATDE: :danke_ATDE:
    [hr]

    Files

    • RPI Skript.txt

      (4.96 kB, downloaded 78 times, last: )
  • Quote

    eine Verbraucheridentifikation über maschinelles Lernen realisieren.


    Bitte was wollt ihr erreichen?

    Quote

    Da wir relativ wenig Ahnung von Raspberry Programmierung


    Es gibt keine Raspberry Programmierung. Könnt ihr Programmieren oder nicht? Und wenn nein warum macht ihr so ein Projekt?


    Bin ich der einzige der äquidistanz googlen musste um dann festzustellen das in diesem Zusammenhang viel bekanntere und treffendere Worte gibt?


    Wie sieht denn so ein String aus der von dem Teil zurückgeliefert wird?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo pgraspberry,


    herzlich Willkommen in unserem Forum!


    ABER ...


    Für ein Projekt an unserer Uni müssen wir per Raspberry PI v2 einen Smart Meter (Easy Meter Q3DA1024) auslesen und sollen mit den Daten eine Verbraucheridentifikation über maschinelles Lernen realisieren.
    Da wir relativ wenig Ahnung von Raspberry Programmierung haben und es ein schon bestehendes Skript gibt, mit dem die Daten ausgelesen und in eine CSV Datei geschrieben werden haben wir dieses erstmal benutzt und an unsere Aufgabenstellung angepasst.


    ... hier wird niemand Eure Projekte für die Uni lösen.


    Der Raspberry Pi lässt sich genauso programmieren wie jeder andere Computer auch. Er hat ein Linux-Betriebssystem, auf dem Skriptsprachen wie Bash und Python, Compilersprachen wie C und C++ und viele andere Programmiersprachen laufen. Wenn Ihr von Raspberry-Programmierung keine Ahnung habt, dann liegt es nahe, dies generell auf die Programmierung zu erweitern.
    Und das ist schlecht, weil Eigeninitiative hier sehr wichtig ist.


    Wenn Ihr ein Programm oder ein Skript selber geschrieben hättet und eine Kleinigkeit passt nicht, dann würde es hier wohl die Lösung geben.




    Weiter haben wir uns um die Weiterleitung, -verarbeitung und -bearbeitung der Daten in einer PostGre Datenbank gekümmert und stehen jetzt allerdings vor dem Problem, dass die Daten vom Smart Meter nicht in äquidistanten Zeitschritten ausgelesen werden (zwischen 6 - 14 s).
    Die Messung ist auf ein 2-Sekundenraster begrenzt durch das Smart Meter (wahrscheinlich durch die IR Schnittstelle des Smart Meters)


    Euer Skript sieht jetzt nicht so aus, als dass es 6 - 14 Sekunden brauchen würde, um Daten auszulesen und in eine Datenbank zu schreiben. Also sollte genug Zeit bleiben, um auf den Ablauf einer äquidistanten Zeitspanne zu warten. Es gibt mehrere Linux-Kommandos (u.a. [font="Courier New"]date[/font] in Verbindung mit passenden Argumenten), mit denen Ihr die aktuelle Zeit auslesen könnt. Dann braucht ihr eigentlich nur Folgendes zu machen:
    - vor einem Lese / Datenbank-Schreib-Zyklus die aktuelle Zeit ermitteln (beim ersten Mal vielleicht sogar warten, bis die Sekundenanzahl ganzzahlig durch 10 teilbar ist - Vorteil wird gleich deutlich)
    - Daten auslesen, verarbeiten, bearbeiten, was auch immer
    - Datenbank-Gedöns erledigen
    - aktuelle Zeit ermitteln
    - Warten, bis Sekundenanzahl ganzzahlig durch 10 teilbar ist.
    Und schon habt Ihr äquidistante Zyklen.


    Wenn das dann funktioniert, könnt Ihr von jeder Zeiterfassung die allererste Zeiterfassung abziehen. Dann entfällt in einer ersten Optimierungsstufe das initiale Warten auf durch 10teilbare Sekunden.



    Ich wollte jetzt fragen ob es jemandem evtl möglich ist über das bestehende Skript zu schauen und sagen kann wo Verbesserungen möglich sind und ob direkt Fehler zu erkennen sind ... für mich liest sich das alles nur wie Bahnhof :huh:


    • Besser strukturieren
    • Kommentieren


    Dann fällt das Erfassen und Verstehen leichter.


    Abschließend:
    Zu jedem Linux-Kommando gibt es sog. Man-Pages. Das sind Anleitungen zum Verständnis eines Linux-Kommandos.
    Wenn Ihr in die Konsole z.B. einmal

    Code
    man date


    eingebt, dann erhaltet Ihr Infos zum Linux-Kommando und dessen Argumente, um genau das erwünschte Ergebnis zu erhalten.


    In höheren Programmiersprachen wird "äquidistante Zeitstspanne" oftmals als "IdleTimer" bezeichnet. Dies erzeugt ein Ereignis, durch dessen Erkennung Euer Zyklus automatisch gestartet wird. Dazu bedarf es nur der einmaligen Definition des Timers. Sowas gibt's für C, C++, Lazarus, FreePascal und wie sie alle heißen.



    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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

    Edited once, last by Andreas ().

  • Die Erkennung verschiedener Verbraucher im Haushalt soll mit Hilfe von maschinellem Lernen mit Matlab geschehen, was mit erstellten Testdaten auch funktioniert.


    Wir haben keine bis maximal wenig Ahnung, zumindest nicht von bash. Das Projekt haben wir uns ausgesucht da uns gesagt wurde das es ein bestehendes funktionsfähiges Skript gibt und an dem Raspberry nur geringfügige Änderungen vorgenommen werden müssen.


    Ob ich jetzt äqudistant oder gleichmäßig verteilt schreibe macht für mich keinen Unterschied ehrlich gesagt, aber gut.


    "id,standort,datum,uhrzeit,ver_ges_kwh,verbr_l1_w,verbr_l2_w,verbr_l3_w,verbr_akt_ges_w" ist der Aufbau des Strings oder was genau meintest du ?

  • Die Erkennung verschiedener Verbraucher im Haushalt soll mit Hilfe von maschinellem Lernen mit Matlab geschehen

    Der Thread ist zwar schon sehr alt und ich bezweifle, dass ihr hier noch aktiv seid, doch seid ihr damit weitergekommen?

    Bitte was wollt ihr erreichen?

    Deren Vorhaben gehört zum Forschungsgebiet von "Non-intrusive Load Monitoring" (NILM) und ist ziemlich geil, wenn es denn funktioniert. Ich beschäftige mich gerade selbst damit, allerdings noch theoretisch.

    Kelvin