Gleiche Zeitabstände für Datenloggereinträge realisieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
HaPeWe
User
Beiträge: 1
Registriert: Dienstag 10. Dezember 2019, 14:25

Hallo Forum,

folgende Fragestellung:
Ich möchte einen Datenlogger entwickelen, der Sensordaten von einem Raspberry mit einem Python-script einliest verarbeitet und dann in eine Datenbank ablegt.
Als Datenbank würde ich jetzt mal eine mySQL verwenden.

Ich möchte dabei eine feste Abtastrate einstellen, bspw. 500 ms.

Wie kann ich am besten erreichen, dass meine Zeitstempel der Datenbankeinträge immer exakt 500 ms Abstand haben?
Würdet ihr lieber versuchen den Zeitstempel der Sensorabfrage gleich halten und dann erstmal eine gewisse Anzahl von Werten Zwischenpuffern und diese dann in einer Speicheroperation wegschreiben?
Oder lieber eine DB-Verbindung aufmachen und kontinuierlich die Sensorwerte mit dem Abtastratentakt wegschreiben?

Wie bekomme ich die Grenzabtastrate heraus, also die Zeitspanne bei der die Skriptausführung genausolang dauert wie das Wegspeichern?
Habt ihr Erfahrungswerte, wie schnell sich stabil abtasten lässt (mir ist klar, dass das vom Setup und dem Script abhängt)

Wäre bspw. das Schreiben in ein File besser/schneller als in eine DB?

Vielen Dank für alle Hinweise.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Verabschiede dich von dem Gedanken, feste Abtastraten einstellen zu koennen. Der Aufwand dafuer ist massiv, und reicht von der Nutzung eines Echtzeit-Kernels bis hin zur Verwendung von zB C++ und einem IPC-Mechanismus, um da die notwendige Stabilitaet zu bekommen. Wenn das keine Steuer- und Regelaufgabe ist, die das wirklich erfordert (und mit 500ms kann das eigentlich nicht sein), dann ist es diesen Aufriss nicht wert. Alternativ kannst du stattdessen einen simplen, nicht-OS-basierten uC wie einen Arduino nehmen, die Werte mit hoher zeitlicher Wiederholgenauigkeit bestimmen, und dann an den PI uebermitteln. Das korrekt hinzubekommen ist allerdings auch nicht unbedingt trivial, und dann kommt da theoretisch noch das Problem der Zeitdrift mit rein, das du mit abfruehstuecken musst.

Der einfachere und bessere Weg ist zum Zeitpunkt der Messwertaufnahme bestimmst du einen Zeitstempel, und was du dann verschickst und speicherst in der Datenbank ist eben dieses Paar aus (Zeitstempel, Wert). Damit ist der Chronistenpflicht genuege getan. Wer daraus dann partout 500mS-basierte Werte berechnen will, kann das durch Interpolation selber machen.

Welches Abtastinterval erreichbar ist kann ich nicht sagen. 500mS im groben (eben mit Jitter, aber dafuer Zeitstempel) sollte aber klappen. Eine DB wie zB sqlite hat durchaus Vorteile gegenueber einer Datei, weil die recht gut im wirklichen persistieren der Daten ist. MySQL wuerde ich nicht nehmen, ausser du brauchst den entfernten Zugriff. Schneller ist eine Datei, aber auch weniger robust.
Antworten