hussi sagte in [Erledigt] Frage zu Scripte Auslösen auf Taster oder Zeit:
bahnuhr Bei mir sieht das so aus:
alt text
Such Mal nach Dummy
Da findest du zahlreiche Beispiele.
Sowohl hier als auch im Homematic forum
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 nochmal
Ich 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