NEWS
[erledigt] Regensensor - Sprünge erkennen?
-
Hallo
Ich habe einen Regensensor mir gebaut auf Basis von diesen "Platinen": https://www.amazon.de/AZDelivery-Regentropfen-Sensor-Arduino-gratis/dp/B07CP2GX9P
Zur Erfassung war dahinter erst ein FlowerCare, das war aber frickelig und nicht zuverlässig - nun habe ich einen Homematic Temperatur-Differenzsensor umgebaut ...Aufzeichnung funktioniert super:
Da er aber keine Heizung zum abtrockenen hat, geht er nachts fast immer langsam hoch.
Aber Sprünge in den Messwerten sind immer Regen!
Ganz links in der Aufzecihnung sieht man Nieselregen - 3x Werte 11:11, 11:17, 11:19 und 11:24 mit mehr als 5Grad "Temp"-Unterschied.--> Wie kann ich im IoB-Skript am einfachsten solche Sprünge erkennen? Muss ich selber mir die letzten 2-3 Werte mit Uhrzeit merken und ausrechnen? Oder gibts da was fertiges bzw eine Funktion zum kopieren?
Gruss -
-
@adarof sagte:
Wie kann ich im IoB-Skript am einfachsten solche Sprünge erkennen?
Nach Zeit differenzieren.
on(idRegen, function(dp) { if((dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc) > Grenzwert) { // es regnet } });
-
@paul53 Danke - hab ich mal so übernommen. Gefühl wäre, dass ich mehr als 2 Werte brauche
(also nicht nur die Steigung zwischen Old und Aktuell, sondern auch 2..3 ältere Werte. Aber ich probiers mal so erstmal.
DANKE -
Wollte kurz berichten, dass das ganz gut klappt mittlerweile.
Danke also nochmalIch nutze nach beobachtung meines Aufbaus nun 0.5 zum Detektieren von Regen und -0.5 zum Detektieren vom Aufhören des Regens.
var diffWert = (obj.state.val - obj.oldState.val) / ((obj.state.lc - obj.oldState.lc)/1000/60) ; //should be min(value - oldValue) / (obj.state.lc - obj.oldState.lc); setState("0_userdata.0.RegensensorPRGDiffWertHistory"/*RegensensorPRGDiffWertHistory*/, diffWert); if( diffWert > 0.5 && getState("0_userdata.0.RegensensorPRGDetectedRain").val == false) { getState("0_userdata.0.RegensensorPRGDetectedRain").val == false) { setState("0_userdata.0.RegensensorPRGDetectedRain"/*RegensensorPRGDetectedRain*/, true); } else if (diffWert < -0.5 && getState("0_userdata.0.RegensensorPRGDetectedRain").val == true) { setState("0_userdata.0.RegensensorPRGDetectedRain"/*RegensensorPRGDetectedRain*/, false); } else { if(getState("0_userdata.0.RegensensorPRGDetectedRain").val == true) { //'Es regnet - Änderung aber egal' + diffWert }
Hier noch ein SCreenshot von
- der Feuchtigkeit
- dem errechneten DiffWert
- der Variable RegenDetected: