Forum: Mikrocontroller und Digitale Elektronik Minimal/Maximal Wert bestimmen


von chrisHome (Gast)


Lesenswert?

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

von Oberon (Gast)


Lesenswert?

> Den Temperaturwert wird mittels RS232 aus Raspberry übertagen.

Dunkel sind die Worte, kraus der Gedanke. Wochenende!

von chrisHome (Gast)


Lesenswert?

Ich versuche Grammatikfehler zu vermeiden. Wer doch einen findet darf 
damit machen was er will :P

von Jakob (Gast)


Lesenswert?

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?

von chris (Gast)


Lesenswert?

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.

von Harry L. (mysth)


Lesenswert?

MRTT nutzen.....

von chrisHome (Gast)


Lesenswert?

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?

von chrisHome (Gast)


Lesenswert?

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...

von S R (Gast)


Lesenswert?

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? ;)

von pipp (Gast)


Lesenswert?

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

von chrisHome (Gast)


Lesenswert?

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..)

von Jakob (Gast)


Lesenswert?

Kaum weiß man, was er will, schon sind hilfreiche Antworten
möglich...

von S R (Gast)


Lesenswert?

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 ;)

von Bastian W. (jackfrost)


Lesenswert?

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

von Harry L. (mysth)


Lesenswert?

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

von UGast (Gast)


Lesenswert?

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.

von Noch einer (Gast)


Lesenswert?

> mrtg

Besser die Low-Level-Komponenten http://oss.oetiker.ch/rrdtool/

Geniales Teil für eine Wetterstation!

Man darf nur nicht sekündliche Werte loggen - nach einem Jahr ist bein 
Raspi die SD-Karte hinüber.

von WA (Gast)


Lesenswert?

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.

von Silvio G. (technofreak)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.