[gelöst] Aktion ausführen, wenn Wert 2x unterschritten wird

Begonnen von Seba, 18 August 2020, 23:10:02

Vorheriges Thema - Nächstes Thema

Seba

Moin,
irgendwie stehe ich gerade auf dem Schlauch und komme mit der suche auch nicht weiter.

Ich habe einen  Hochtank, der wird von einem Ultraschall Sensor überwacht. Unterschreitet die Füllmenge einen Wert X, dann schaltet sich die Tauchpumpe ein und es wird Wasser aufgefüllt bis der Wert Y erreicht wird.
Leider sind diese günstigen Sensoren nicht 100% zuverlässig und anfällig für Dunst / Nebel und auch so geben die ab und dann einen falschen Wert aus.

Somit möchte ich nun, das die Pumpe erst aktiviert wird, wenn der Wert X bei 2 oder auch gerne 3 Messungen, unterschritten wird.
Derzeit ist es so, das die Pumpe immer mal wieder anspringt, obwohl der Tank voll ist. Sie geht dann auch schnell wieder aus, da der Y-Wert ja sagt "Bist voll" aber das nervt mich :D

Meine Überlegung war nun, das ich Dummys nutze.
Wert X wird unterschritten DummyWaterLow1 = 1. Nächste Messung immer noch unterschritten, DummyWaterLow2 = 1.
Dann das ganze mit einer IF Abfrage, wenn Wert X unterschritten und DummyWaterLow1 = 1 und DummyWaterLow2 = 1 -> Pumpe an, bis Wert Y erreicht.

Sollte nun der Wert X einmal unterschritten sein, wird nur DummyWaterLow1 = 1 gesetzt. Ist die nächste Messung wieder über dem Grenzwert, werden beide Dummys = 0 gesetzt.

Das geht aber ist das echt so die beste und eleganteste Lösung? Irgendwie fürchte ich, das ich gerade den Wald vor lauter Bäumen nicht mehr sehe, das muss das "Schöner" gehen oder?


Besten Dank schon einmal

Viele Grüße

Wzut

#1
Dein Grundgedanke stimmt, nur würde ich auf die blöden Dummys verzichten und die Zwischenwerte in ein User Reading direkt am Füllstand Device packen.
Bzw . wäre es mein Tank würde ich (nein stimmt nicht mache ich bereits :) ) mit jeder neuen Messung einen gleitenden Mittelwert bilden und erst wenn dieser unterschritten wird die Pumpe einschalten. Ob du das abschalten der Pumpe auch wieder über den Mittelwert machst oder dann doch lieber direkt musst du testen.
Stichwort "gleitender Mittelwert" -> movingAverage , sind deine Suchbegriffe für die Forum/google Suche, geschrieben hat sie vor Jahren pah. Ist bei mir daher schon ewig fester Bestandteil meiner 99_myUtils und kommt überall zum Einsatz wo mir direkte Messwerte zu unruhig sind.

edit : mit ein ist gemeint , nur ein Wert und diesen hochzählen und zur Abfrage kein IF sondern ein notify das auf diesen Wert triggert
Gibt zu movingAverage sogar ein Wiki : https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Damian

Man kann einfach mit Mittelwert oder besser mit Median Ausreißer eliminieren, siehe https://fhem.de/commandref_DE.html#DOIF_Reading_Funktionen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Seba

Vielen Dank für die Antworten.
Ich habe es nun mit dem gleitenden Mittelwert erst einmal probiert, das funktioniert einwandfrei. Das mit Median werde ich aber auch noch testen, das klingt auch super, wenn diese "Messfehler" erst gar nicht berücksichtigt werden.
An sowas habe ich gedacht, schlanker und schöner als meine Lösung, vielen Dank noch einmal.