NEWS
Wie Regenmenge ermitteln (Wetterstation)
-
Damit die Zählerstände (aktuell / gestern) vergleichbar sind, solltest du einen zusätzlichen Datenpunkt anlegen:
! ````
var max = 0;
var korrektur = 0.227 ;
! var idZaehler = "rflink.0.channels.Cresta_2.RAIN" * 0.227 /Cresta_ 2 Total rain level/;
var idZaehlerAktuell = "rflink.0.channels.Cresta_2.RegenZaehlerAktuell"/RegenZaehlerAktuell/;
var idAktuell = "rflink.0.channels.Cresta_2.RegenAktuell"/RegenAktuell/;
var idMaxHeute = "rflink.0.channels.Cresta_2.RegenMaxHeute"/RegenMaxHeute/;
var idZaehlerGestern = "rflink.0.channels.Cresta_2.RegenZaehlerGestern"/RegenZaehlerGestern/;
var idHeute = "rflink.0.channels.Cresta_2.RegenHeute"/RegenHeute/;
var idGestern = "rflink.0.channels.Cresta_2.RegenGestern"/RegenGestern/;
! on(idZaehler, function(dp) {
var val = korrektur * dp.state.val;
setState(idZaehlerAktuell, val, true);
var lastVal = korrektur * dp.oldState.val;
var now = dp.state.lc;
var lastTime = dp.oldState.lc;
var aktuell = 3600000 * (val - lastVal) / (now - lastTime);
setState(idAktuell, aktuell, true);
if(aktuell > max) {
max = aktuell;
setState(idMaxHeute, max, true);
}
});
! schedule('0 0 * * *', function() { // Mitternacht
var zaehler = getState(idZaehlerAktuell).val;
var zaehlergestern = getState(idZaehlerGestern).val;
setState(idZaehlerGestern, zaehler, true);
var gestern = getState(idHeute).val
setState(idGestern, gestern, true);
var heute = zaehler - zaehlergestern;
setState(idHeute, heute, true);
max = 0;
setState(idMaxHeute, 0, true);
}) -
angelegt (ZaehlerAktuell). Danke für deine Mühe.
lasse es mal einen Tag laufen, und gucke dann, was mir meine
bisherige Wettersoftware (weewx) ausspuckt (Vergleichswerte).
Gruß
-
Bei Regen Aktuell (Regenrate) muss ein kl. Fehler drin sein. Der zeigt die gleichen Werte an, wie RegenMaxHeute.
Es regnet aber gerade nicht, Regen Aktuell müsste dann doch 0 sein?!?
Noch ne Frage, wie ändere ich die Werte auf 2 Nachkommastellen?
! ````
var max = 0;
var korrektur = 0.227 ;
! //Regensensor
var idZaehler = "rflink.0.channels.Cresta_2.RAIN"/Cresta_ 2 Total rain level/;
! //Benutzerdefiniert
var idZaehlerAktuell = "rflink.0.channels.Cresta_2.ZaehlerAktuell"/ZaehlerAktuell/
var idAktuell = "rflink.0.channels.Cresta_2.RegenAktuell"/RegenAktuell/;
var idMaxHeute = "rflink.0.channels.Cresta_2.RegenMaxHeute"/RegenMaxHeute/;
var idZaehlerGestern = "rflink.0.channels.Cresta_2.RegenZaehlerGestern"/RegenZaehlerGestern/;
var idHeute = "rflink.0.channels.Cresta_2.RegenHeute"/RegenHeute/;
var idGestern = "rflink.0.channels.Cresta_2.RegenGestern"/RegenGestern/;
! on(idZaehler, function(dp) {
var val = korrektur * dp.state.val;
setState(idZaehlerAktuell, val, true);
var lastVal = korrektur * dp.oldState.val;
var now = dp.state.lc;
var lastTime = dp.oldState.lc;
var aktuell = 3600000 * (val - lastVal) / (now - lastTime);
setState(idAktuell, aktuell, true);
if(aktuell > max) {
max = aktuell;
setState(idMaxHeute, max, true);
}
});
! schedule('0 0 * * *', function() { // Mitternacht
var zaehler = getState(idZaehlerAktuell).val;
var zaehlergestern = getState(idZaehlerGestern).val;
setState(idZaehlerGestern, zaehler, true);
var gestern = getState(idHeute).val
setState(idGestern, gestern, true);
var heute = zaehler - zaehlergestern;
setState(idHeute, heute, true);
max = 0;
setState(idMaxHeute, 0, true);
})Gruß [2880_1.png](/assets/uploads/files/2880_1.png)
-
Es regnet aber gerade nicht, Regen Aktuell müsste dann doch 0 sein?!? `
Regen aktuell ändert sich nur, wenn sich der Zähler ändert. Wenn es nicht regnet, ändert er sich natürlich nicht. Hast Du einen Regensensor, über den Du Regen aktuell zurück setzen kannst ? Wenn nicht, müsste man den Wert nach einer bestimmten Zeitspanne ohne Zähler-Änderung zurück setzen. Nur wie groß die Zeitspanne sein muss, weiß ich nicht.
@noxx:Noch ne Frage, wie ändere ich die Werte auf 2 Nachkommastellen? `
Beispiel:setState(idAktuell, 0.01 * Math.round(100 * aktuell), true);
Anmerkung: Ganz am Ende (schedule) fehlt ein Semikolon. Damit ZaehlerAktuell bei Skriptstart gesetzt wird (und nicht erst wenn es regnet), solltest Du am Skriptende (hinter allen Funktionen) noch ergänzen
setState(idZaehlerAktuell, korrektur * getState(idZaehler).val, true);
-
Thema: Regen Aktuell zurücksetzen ohne Regensensor:
Hat der Zähler eine Auflösung von 1 mm und sollen noch 0,1 mm/h erkannt werden (hier beginnt laut Wikipedia leichter Regen), dann muss die Dauer bis zum Rücksetzen 2,27 h betragen, was eine ganz schön lange Zeit ist.
-
der Regensensor überträgt alle 33 Sekunden einen Wert. Evtl müsste
man den Wert alle 33 Sekunden (oder ein vielfaches davon) auslesen und dann auf 1h extrapolieren.
denke das macht ne Wettersoftware auch nicht anders
-
der Regensensor überträgt alle 33 Sekunden einen Wert. Evtl müsste
man den Wert alle 33 Sekunden (oder ein vielfaches davon) auslesen und dann auf 1h extrapolieren. `
Dann schwankt bei leichtem Regen der Wert für RegenAktuell ständig zwischen 0 und 11 mm/h. Das möchtest Du sicherlich nicht haben. Die Auflösung zu nutzen, ist sinnvoller.Hat der Regenmesser nicht eine Auflösung von 0,1 mm ? Dann kann die Zeit bis zum Zurücksetzen ca. 14 Minuten betragen. Vorher kann man ohnehin nicht sicher sein, ob der Regen aufgehört hat.
var timer = null; on(idZaehler, function(dp) { var val = korrektur * dp.state.val; setState(idZaehlerAktuell, 0.01 * Math.round(100 * val), true); var lastVal = korrektur * dp.oldState.val; var now = dp.state.lc; var lastTime = dp.oldState.lc; var aktuell = 3600000 * (val - lastVal) / (now - lastTime); aktuell = 0.01 * Math.round(100 * aktuell); setState(idAktuell, aktuell, true); if(aktuell > max) { max = aktuell; setState(idMaxHeute, max, true); } if(timer) clearTimeout(timer); timer = setTimeout(function() { setState(idAktuell, 0, true); }, korrektur * 3600000); // 0,227 Stunden });
EDIT: Wert für ZaehlerAktuell auf 2 Nachkommastellen gerundet
-
Teste ich. Der Sensor hat eine Auflösung von 0.15mm
Gruss
Gesendet von meinem GT-I9195 mit Tapatalk
-
Der Sensor hat eine Auflösung von 0.15mm `
Bei einer Verzögerung von ca. 14 Minuten bis zum Zurücksetzen werden dann 0,15 mm/h und mehr als Regen erkannt; oder die Zeit wird auf das 1,5 fache hochgesetzt. -
danke. das script muss ich nun erstmal begreifen
gruß