Minimal/Maximal Wert bestimmen

Gast #4538400
Guten Abend
Ich baue mir mit einem Raspberry eine Wetterstation. Ich möchte nun den 
min/max Wert einer bestimmten Zeitspanne bestimmen (Tag, Woche, Monat, 
Jahr).
Den Temperaturwert wird mittels RS232 aus Raspberry übertagen.
Wie kann ich in der Empfangsroutine einen Code schreiben, ohne dass ich 
mich durch die Logdaten des letzten Jahres wühlen muss?

Gibt es da einen effizienteren Ansatz?

Vielen Dank
Gast #4538412
Wie liegen die Werte vor - mit Zeitstempel?

Wohin werden sie mit RS232 übertragen, zum PC zur Auswertung?

Kann das nicht im RasPi selbst gemacht werden?
Gast #4538422
Du könntest ja in ein eigenes File die Max-Werte von jedem Tag inkl. 
Zeitstempel speichern.
Dann beschränkt sich deine Suche auf 7 Tage für die Woche, 28-31 für den 
Monat und 365/366 fürs Jahr.
Gast #4538427
Ich empfange den Temperaturwert über RS232 vom Funkempfäger. Im 
Empfängerskript, welches auf dem Raspberry läuft, merke ich mir die 
Uhrzeit und schreibe es danach in eine Logdatei. Zusätlich läuft auf dem 
Pi ein Webserver, welcher die Daten für eine Website aufbereitet.

Da ich ca. alle 2min einen neuen Temperaturwert empfange, müsste ich um 
den Jahresmaximalwert zu bestimmen 250'000 Zeilen durchsuchen. Alle 
Timestamps umwandeln und Temperaturwerte vergleichen dauert so eine 
Weile.

alles klar?
Gast #4538438
Harry L. schrieb:
> MRTT nutzen.....

Noch nie gehört. Was ist das? Google findet mangels Suchgeschick auch 
nichts :P

>Du könntest ja in ein eigenes File die Max-Werte von jedem Tag inkl.
>Zeitstempel speichern.
>Dann beschränkt sich deine Suche auf 7 Tage für die Woche, 28-31 für den
>Monat und 365/366 fürs Jahr.

Hmmm.. ja das tönt doch sinnvoll!
Auf jeden Fall ist es deutlich effizienter und schneller...
Gast #4538440
Leg die Daten doch in einer Datenbank deiner Wahl ab (sqlite / MySQL). 
Auf dem Raspi gibts da doch 1000 Möglichkeiten. Da ist das Abfragen 
beliebiger Werte dann gar kein Problem mehr.

Gibt es auch schon fertig mit Virtualisierung: "Volkszähler".


Ansonsten: Welche Programmiersprache hast du dir denn ausgesucht? ;)
Gast #4538445
schon was von datenbank gehört?
pi mit z.b. mysql o.ä..
python skript zum auslesen der rs232.
eintagen der werte in die db mit zeitstempel/ort.
min/max wert über zeitstempel fenster (unix zeitformat erleichtert das 
rechnen).
lässt sich auch mit php machen. oder so.

cu
Gast #4538447
S R schrieb:
> Leg die Daten doch in einer Datenbank deiner Wahl ab (sqlite / MySQL).
> Auf dem Raspi gibts da doch 1000 Möglichkeiten. Da ist das Abfragen
> beliebiger Werte dann gar kein Problem mehr.
>
> Gibt es auch schon fertig mit Virtualisierung: "Volkszähler".
>
> Ansonsten: Welche Programmiersprache hast du dir denn ausgesucht? ;)

Python brauche ich. Bin nicht Fan davon aber das ist ein anders Thema.

Datenbanken finde ich unsympatisch, da mir nicht klar ist was im 
Hintergrund passiert. Zudem habe ich noch nie damit gearbeitet.
Die Werte speichere ich als .csv Datei und so kann man ohne 
Datenbankverwaltung darauf zugreifen (Excel, Notepad..)
Gast #4538508
chrisHome schrieb:
> Python brauche ich. Bin nicht Fan davon aber das ist ein anders Thema.

Ich bin Fan von Python. ;)

> Datenbanken finde ich unsympatisch, da mir nicht klar ist was im
> Hintergrund passiert. Zudem habe ich noch nie damit gearbeitet.
> Die Werte speichere ich als .csv Datei und so kann man ohne
> Datenbankverwaltung darauf zugreifen (Excel, Notepad..)

Oh, aber das ist doch ein Paradebeispiel für eine Datenbank! Die 
Datenbank kannst du dir (also jede Tabelle) auch als csv exportieren. 
Dafür gibt es die Standardsoftware "phpmyadmin".


Ändert aber nix daran, dass es genau für deine Anwendung schon den 
"Volkszähler" gibt. Gibt es als Raspi-Image, einfach aufspielen und fast 
fertig.

Die Daten übergibst du (z.Bsp.) an eine PHP-Schnittstelle mit der python 
urllib, und dann hast du eine prima Visualisierung mit allen Diagrammen 
und was auch immer schon fertig... Aber natürlich läuft da eine 
Datenbank ;)
#4538522
chrisHome schrieb:
> Datenbanken finde ich unsympatisch, da mir nicht klar ist was im
> Hintergrund passiert

Der Vorteil einer Datenbank ist das du Minma und Maxima sehr leicht 
abfragen kannst. Einfach ein SQL Statement und z.B. über PHPMYSQLAdmin 
kannst du direkt auf der DB in einem GUI arbeiten.

Bsp. für Maximum im Jahr 2015. In der Datumsspalte liegt das Datum als 
hh:mm:ss dd:MM:YYYY vor und zwar seit 2014 - 2016
1
SELECT max(Temperatur) From Wetterdaten WHERE YEAR(Datum)= 2015

Und schon hast du den Maxwert aus dem Jahr 2015. Du musst das Ergebnis 
dann nur in PHP,Phython o.ä. verarbeiten. Ist einfacher und schneller 
als tausende Zeilen zu vergleichen.

Gruß JackFrost
#4538523
chrisHome schrieb:
> Harry L. schrieb:
>> MRTT nutzen.....
>
> Noch nie gehört. Was ist das? Google findet mangels Suchgeschick auch
> nichts :P

Sorry, vertippt; meinte natürlich MRTG.

Das Ding dabei ist: Das nutzt eine RRDB. (Round Robbin DataBase)
Das hat den Vorteil, daß die Datenmenge nicht ins unendliche wachsen 
kann, und ältere Wert nur "unschärfer" werden, aber die relevanten Peaks 
(Min/Max) erhalten bleiben.

Klassisches Beispiel für sowas:

http://oss.oetiker.ch/mrtg/

Harry
Gast #4538542
ohne daß ich mir hier nun alles durchgelesen habe, denke ich, es ist 
nicht so sehr aufwendig. Du nimmst einige Speicherzellen und legst dort 
je nach Zeitzuordnung den jeweils ersten Wert ab. Anschließend 
vergleichst du den nächsten kommenden Wert ob er größer oder kleiner 
ist. Wenn Er kleiner ist als der erste Wert, dann wird dieser als 
tiefster Werd in den Speicherplatz abgelegt. Ist er es nicht, dann mach 
damit etwas anderes?, nämlich den Vergleich auf bin ich größer als der 
Wert im Max-Speicher, wenn ja, dann ab damit in dem Max-Speicher. Dann 
kommt auch schon der nächste Wert. Letztlich brauchst du (365+52+12)*2 
Speicherzellen pro Jahr, die auf diese Art befüllt werden.
Gast #4538612
Bastian W. schrieb:
> Bsp. für Maximum im Jahr 2015. In der Datumsspalte liegt das Datum als
> hh:mm:ss dd:MM:YYYY vor und zwar seit 2014 - 2016

Ein - entschuldige - bescheuerteres Datum/Zeitformat gibt es ja wohl 
nicht. Wahrscheinlich gibt es auch noch einmal im Jahr eine Lücke von 
einer Stunde und ungefähr ein halbes Jahr später dafür eine Stunde 
doppelt :-(

Bei Zahlen schreibst du doch auch nicht die Einer vor die Tausender 
und verwendest dann noch für Dezimaltrennzeichen und 
Tausendertrennzeichen das selbe Symbol.
#4538777
Hallo

meine Lösung wäre:

- Min/Max für jeden Zeitraum speichern (inkl. Zeitstempel)
- nach jeder Messung Messwert mit Min/Max vergleichen, falls aktueller 
Messwert zu Min/Max wird nachfolgenden Schritt überspringen
- nach jeder Messung prüfen ob gespeicherter Min/Max noch nicht zu alt 
ist, falls doch neuen Min/Max im Zeitraum suchen

Damit musst du zwar bei jeder Messung prüfen ob die Min/Max-Werte noch 
im Zeitraum liegen, aber nur bei Bedarf die kompletten Log-Daten 
durchsuchen. Falls der aktuelle Messwert Min oder Max ist kannst du 
sogar die Altersprüfung überspringen.

Silvio

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.