MicroPython, Datenbank oder einfache Datei für Sensordaten?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    ich spiele mit einem Raspberry PI Micro W und da angeschlossene Sensoren für die Luft herum.

    Live via WebServer in HTML alles anzeigen läuft so weit.

    Nun möchte ich mal Daten Speichen und als Graphen darstellen.
    Wie speichert man am sinnvollsten die Sensordaten? Datenbank oder eine Datei beschreiben?


    Und wie bekommt man beim Abspeichern von den Daten einen Loop hin? So das z.B. die Daten der vergangenen 24h lediglich abgespeichert werden.


    Googeln ist der blanke Wahnsinn. Darum frage ich mal hier. Bis lang habe ich hier selber top Hilfe bekommen oder mir erlesen können.

  • MicroPython, Datenbank oder einfache Datei für Sensordaten?? Schau mal ob du hier fündig wirst!

  • Zur hilfreichsten Antwort springen
  • Hallo,

    was ist denn ein "Raspbery Pi Micro W"? Das Modell gibt es IMHO nicht... Meinst du den Pi Zero W oder einen Pico W?

    Unabhängig davon: kommt drauf an. Eine DB hat den Vorteil, dass du Daten i.d.R. beliebig selektieren und aggregieren kannst. Dann du das nie brauchst kannst du die Daten auch linear in eine Datei schreiben.

    Wenn du Daten nicht unbegrenzt lange brauchst, kannst du a) entweder periodisch selber aufräumen, b) eine Datenbank wie RRDtool benutzen, die von vorneherein nur Platz für X Einträge vorsieht oder c) eine Datenbank nehmen, die eine TTL (time to live) pro Eintrag kennt, wie z.B. Redis.

    Wie viele Daten sind das denn in 24h? Eine andere Alternative wäre noch, die Daten gar nicht zu speichern, sondern einfach im RAM zu halten.

    Gruß, noisefloor

  • Keine Ahnung, wieviel Speicher das Teil hat, aber zunächst würde ich die Daten sammeln und bevor der Speicher voll ist, übertragen.

    Je nach Format, Daten schreiben:

    Code
    f = open('daten.csv', 'w')
    f.write('daten')
    f.close()

    https://docs.micropython.org/en/latest/esp8266/tutorial/filesystem.html#

  • Pico W ist gemeint.

    Menge? Stimmt, begrenzter Speicher! Verdammt....

    Ich werde den Pico W dann wohl mit einem SDKartenmodul erweitern.

    Ich dachte jeweils 1 mal je min. Daten zu erfassen und zu speichern. Die ältesten sollen max 24h alt sein. Z.B. ....

  • Bevor du aufrüstest schätz' doch erstmal ab, ob der Speicher nicht reicht. 1x pro Minute sind in 24h nur 1440 Werte. Du kennst den Wert an sich, also kannst du abschätzen, wie viel Platz du pro Wert brauchst. Du kennst dein Programm und deinen Pico, also kannst du nachschauen, wie viel Speicher du frei hast.

    Gruß, noisefloor

    • Hilfreichste Antwort

    Hallo Bluhminga,

    vielleicht geht es sogar ohne Speichern der Daten.

    Du brauchst möglicherweise nicht jeden Wert zu speichern, sondern nur den, der sich signifikant von dem zuletzt gespeicherten Unterscheidet.

    Beispiel:

    Du möchtest die Temperatur im Tagesverlauf speichern. Angenommen, der Temperatursensor hängt nicht so, dass er der prallen Sonne ausgesetzt ist sondern gut im Schatten positioniert ist (wie es sein sollte).

    Du brauchst mit Sicherheit nicht im Minutenabstand 20.1, 20.1, 20.1, 20.2, 20.2, 20.1, 20.2, ... zu speichern. Bei der graphischen Darstellung des Verlaufs siehst Du da eh keinen Unterschied.

    Möglicherweise - und das kannst nur Du entscheiden - reicht es, die Zeit mit der signifikanten Änderung zu speichern.


    Bei einem Reinraum-Monitoring-Projekt haben wir das so gemacht. Der Temperaturverlauf war jeden Tag recht ähnlich. Morgens um 7 kamen die Mitarbeiter. Durch deren Körperwärme und den Betrieb der Maschinen stieg die Wärmelast, die der Reinraum aufnahm. Folge: Die Temperatur stieg um einige Grad, bevor die Heizung / Kühlung darauf reagierte. Nach 30 Minuten war die Temperatur wieder im üblichen Bereich geregelt.

    In der Pause sank die Wärmelast - aber die Außentemperatur stieg. Folge: Das System Heizung / Kühlung hat sich neu eingeregelt.

    Etc.

    Die Temperatur jedes Raumes wurde im Intervall 15 Minuten abgefragt. Wenn der Wert innerhalb +/- 0,2 K um den zuletzt gespeicherten Wert lag, wurde der abgefragte Wert nicht gespeichert.

    Der Tag hat 24 Stunden * 4 Viertelstunden. Das sind 96 Abfragen pro Tag. Wir hatten durchaus Tage, in denen keine 10 Werte gespeichert wurden. Das sprach dann durchaus für die Qualität der Klimaanlage.

    Genauso haben wir es mit der relativen Luftfeuchtigkeit, dem Differenzdruck und den Partikelzählungen gemacht.


    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.

  • Ich würde die Daten in einer strukturierten, binären Datei speichern.

    Müsste auch mit Micropython funktionieren:

    Das macht aber nur Sinn, wenn der Code verstanden worden ist.

    Welche Buchstaben bei struct wofür steht, kann hier nachgelesen werden: https://docs.micropython.org/en/latest/libr…l#module-struct

    Q ist z.B. ein unsigned long long (8 Bytes).

    Eine Klassenmethode, um die Datenbank zu laden, ist auch vorhanden. Die Dateigröße kann auch ausgegeben werden.

    Ganz vergessen, die write Methode schreibt beim aktuellen pointer und dann springt der pointer ein weiter. Wenn die Größe überschritten worden ist, fängt er wieder beim Anfang an (modulo-Operation).

Jetzt mitmachen!

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