U
Uwe Borchert
Guest
Hallo,
Am 21.07.19 um 11:16 schrieb Marc Haber:
Warum ßberhaupt Zeitstempeln? Ich muss doch nur Impulse zählen und
die BlackBox liefert mir auf Anfrage die Impulse bzw die umgerechnete
Regenmenge zurĂźck?
> Wieviel Liter pro m² fielen dann in diesen 15 Minuten?
Also ich wĂźrde da mit nicht mehr als 100 mm Niederschlag ausgehen.
Das wäre fßr die meisten mitteleuropäischen Messstationen mehr als
ein Zehntel des Jahresniederschlags. Extremere Extremregen mit einem
Tagesniederschlag als ein Zehntel des Jahresniederschlages sollte
es wohl kaum gegeben haben? Sehen wir mal beim DWD nach? Lassen
wir uns Google helfen?
"Maximale Niederschlagsmenge Starkregen" Deutschland site:dwd.de
Hier zum verlinken die HTML-Seite mit Link aufs relevante PDF:
Einleger Starkniederschläge in Deutschland
Datum 02.09.2016
Zusatzbericht
Einleger Starkniederschläge in Deutschland (PDF, 667KB, Datei ist
nicht barrierefrei.)
<https://www.dwd.de/DE/leistungen/nationalerklimareport/download_einleger_report_2016.html>
Da gibt es eine Tabelle auf Seite 2:
Dauerstufe 15 min wĂźrde alle 100 Jahre mal 45 mm geben. Das sieht
gut aus. Mit meinen 100 mm war ich mal wieder sehr weit oben, aber
ich bin nun mal etwas abgehoben. Hab ich schon mal erzählt, dass
die Seminarräume des Instituts fßr Meteorologie und Klimatologie
im Karlsruhe im obersten, den 13. Stock, des Physikhochhaus sind?
Das sollte reichen. Selbst bei einem Ausfall mit Reboot wĂźrden
da nur wenige Daten verloren gehen. Und jetzt nehme Dir noch zum
Sichern ins EEPROM einen Ringbuffer und dann gehen nicht mal die
Tagesmengen so richtig kaputt.
---%---%---%---%---%---%---%---%---%---%---%---%---%---%---%---
Da muss man sich nur Gedanken mit den Ein-/Aus-Vorgang machen
und wie man das Ende des RingBuffers bei Neustart erkennt? Hat
da jemand eine gute Idee? Das erste Bit alternieren und nur die
restlichen Bit fßr den Zähler nehmen?
Neustart: Suchen nach Datensatzende und dort weiter machen.
int iPos = ThisSearch()
Suche nach Datensatzende: Erstes Bit im folgenden Datensatz
ist ungleich oder aber alle Ersten Bit haben das gleiche
Vorzeichen, dann war der letzte Wert das Datensatzende.
ThisWrite(iCounter,iPos)
Schreiben: Erstes Bit togglen und Zählerstand dran hängen.
int iCounter = ThisRead(iPos)
Lesen: Differenz zwischen aktuellem und letzten Zählerstand
ist die Zahl der Klicks im Intervall.
int iCounter = GetCounter()
Datenholen: Zählerstand auslesen ... Der liegt im RAM und
wurde durch eine ISR hochgezählt.
Dazu definiert man noch FIRSTPOS und LASTPOS des Ringbuffer
und damit sollte man durchkommen?
main(){
iPos = ThisSearch();
ThisCount = ThisRead(iPos);
Zeitschleife ggf in oder Ăźber Timerinterrupt oder RTC?
{
LastCount = ThisCount;
ThisCount = GetCounter();
if ( ThisCount > LastCount );
{ /* Schreiben bei Bedarf */
/* Zaehlerbehandlung */
iPos++;
if (iPos > LASTPOS)
{
iPos = FIRSTPOS;
}
/* der eigentliche Schreibvorgang */
WriteThis(iCounter,iPos);
} /* Ende Schreiben */
} /* Ende Zeitschleife */
} /* Ende main() */
Lasse da mal 500 Plätzchen im Ringbuffer und Du hast da selbst
bei extremen Regenfällen fast einen ganzen Tag im Puffer. Jetzt
kommt nur noch das Problem mit dem Ăberlauf bzw. ZurĂźcksetzen?
Den Server im Keller kannst Du doch auch nach Oben setzen? Also
ein hohes Regal in etwa 1m50 HĂśhe? Da wĂźrde ich auch Router ggf.
vorhandene NAS und USV hinhängen. Und die Steckdosen erst recht!
MfG
Uwe Borchert
Am 21.07.19 um 11:16 schrieb Marc Haber:
Rainer Knaepper <rainerk@smial.prima.de> wrote:
Wobei... der aktuell hier stattgefundene SchĂźttregen dauerte gerade
einmal 15 Minuten. Wenn man solche Peaks erfassen will, muĂ man wohl
doch Ăśfters zeitstempeln ;-)
... kann diese aber im RAM zwischenlagern. Regen und Stromausfall
zusammen ist ein Risiko das ich in Kauf nehme.
Warum ßberhaupt Zeitstempeln? Ich muss doch nur Impulse zählen und
die BlackBox liefert mir auf Anfrage die Impulse bzw die umgerechnete
Regenmenge zurĂźck?
> Wieviel Liter pro m² fielen dann in diesen 15 Minuten?
Also ich wĂźrde da mit nicht mehr als 100 mm Niederschlag ausgehen.
Das wäre fßr die meisten mitteleuropäischen Messstationen mehr als
ein Zehntel des Jahresniederschlags. Extremere Extremregen mit einem
Tagesniederschlag als ein Zehntel des Jahresniederschlages sollte
es wohl kaum gegeben haben? Sehen wir mal beim DWD nach? Lassen
wir uns Google helfen?
"Maximale Niederschlagsmenge Starkregen" Deutschland site:dwd.de
Hier zum verlinken die HTML-Seite mit Link aufs relevante PDF:
Einleger Starkniederschläge in Deutschland
Datum 02.09.2016
Zusatzbericht
Einleger Starkniederschläge in Deutschland (PDF, 667KB, Datei ist
nicht barrierefrei.)
<https://www.dwd.de/DE/leistungen/nationalerklimareport/download_einleger_report_2016.html>
Da gibt es eine Tabelle auf Seite 2:
Auflistung von maximalen NiederschlagshĂśhen (in mm) je Dauerstufe
(D), die statistisch einmal in 1, 10 und 100 Jahren in Deutschland
auftreten (Wiederkehrintervall T)
Dauerstufe 15 min wĂźrde alle 100 Jahre mal 45 mm geben. Das sieht
gut aus. Mit meinen 100 mm war ich mal wieder sehr weit oben, aber
ich bin nun mal etwas abgehoben. Hab ich schon mal erzählt, dass
die Seminarräume des Instituts fßr Meteorologie und Klimatologie
im Karlsruhe im obersten, den 13. Stock, des Physikhochhaus sind?
Wenn wir von der maximal erwarteten Frequenz von 3 Hz ausgehen, reicht
ein Byte fĂźr 85 Sekunden Gewaltregen, was den Begriff "Ăberlauf"
erklärt. Etwas knapp, also brauchen wir ein unsigned int dafßr, mithin
zwei Byte.
Man kÜnnte auch die Impulse pro Minute zählen und damit die Anzahl der
Datensätze (Zeitstempel plus 8 Bit Zähler) auf 60 prO Stunde
reduzieren. Genauer brauch ich's nicht.
Das sollte reichen. Selbst bei einem Ausfall mit Reboot wĂźrden
da nur wenige Daten verloren gehen. Und jetzt nehme Dir noch zum
Sichern ins EEPROM einen Ringbuffer und dann gehen nicht mal die
Tagesmengen so richtig kaputt.
---%---%---%---%---%---%---%---%---%---%---%---%---%---%---%---
Da muss man sich nur Gedanken mit den Ein-/Aus-Vorgang machen
und wie man das Ende des RingBuffers bei Neustart erkennt? Hat
da jemand eine gute Idee? Das erste Bit alternieren und nur die
restlichen Bit fßr den Zähler nehmen?
Neustart: Suchen nach Datensatzende und dort weiter machen.
int iPos = ThisSearch()
Suche nach Datensatzende: Erstes Bit im folgenden Datensatz
ist ungleich oder aber alle Ersten Bit haben das gleiche
Vorzeichen, dann war der letzte Wert das Datensatzende.
ThisWrite(iCounter,iPos)
Schreiben: Erstes Bit togglen und Zählerstand dran hängen.
int iCounter = ThisRead(iPos)
Lesen: Differenz zwischen aktuellem und letzten Zählerstand
ist die Zahl der Klicks im Intervall.
int iCounter = GetCounter()
Datenholen: Zählerstand auslesen ... Der liegt im RAM und
wurde durch eine ISR hochgezählt.
Dazu definiert man noch FIRSTPOS und LASTPOS des Ringbuffer
und damit sollte man durchkommen?
main(){
iPos = ThisSearch();
ThisCount = ThisRead(iPos);
Zeitschleife ggf in oder Ăźber Timerinterrupt oder RTC?
{
LastCount = ThisCount;
ThisCount = GetCounter();
if ( ThisCount > LastCount );
{ /* Schreiben bei Bedarf */
/* Zaehlerbehandlung */
iPos++;
if (iPos > LASTPOS)
{
iPos = FIRSTPOS;
}
/* der eigentliche Schreibvorgang */
WriteThis(iCounter,iPos);
} /* Ende Schreiben */
} /* Ende Zeitschleife */
} /* Ende main() */
Lasse da mal 500 Plätzchen im Ringbuffer und Du hast da selbst
bei extremen Regenfällen fast einen ganzen Tag im Puffer. Jetzt
kommt nur noch das Problem mit dem Ăberlauf bzw. ZurĂźcksetzen?
Da passen dann sechs Stunden Zählimpulse mit
Maximalfrequenz rein, bei solchem Wetter dĂźrfte der Host-PC schon
deutlich unter Wasser stehen, wenn der im ErdgeschoĂ untergebracht
ist.
Serverraum im Keller. Flutsicherer dĂźrfte das Gartenhaus sein, wenn es
nicht weggeblasen wird. Dann ist allerdings auch der Regenmesser mit
weg, der ist am Gartenhaus montiert.
Den Server im Keller kannst Du doch auch nach Oben setzen? Also
ein hohes Regal in etwa 1m50 HĂśhe? Da wĂźrde ich auch Router ggf.
vorhandene NAS und USV hinhängen. Und die Steckdosen erst recht!
MfG
Uwe Borchert