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
> Den Temperaturwert wird mittels RS232 aus Raspberry übertagen.
Dunkel sind die Worte, kraus der Gedanke. Wochenende!
Ich versuche Grammatikfehler zu vermeiden. Wer doch einen findet darf damit machen was er will :P
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?
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.
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?
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...
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? ;)
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
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..)
Kaum weiß man, was er will, schon sind hilfreiche Antworten möglich...
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 ;)
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
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
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.
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.