ioBroker / AdapterRequests

This Place is used to track the status of new Adapter-Requests.
248 stars 36 forks source link

Median Filter zur einfacheren, störungsfreien Steuerung #947

Open mikkey1000 opened 6 days ago

mikkey1000 commented 6 days ago

Beim Messen kommen Störungen (z.b. Wolke bei Beschattung, Strom-Überschussverbrauch, ...) recht häufig vor. Diese Störungen sind Ausreißer, die die gesamte Verarbeitung stören.

Funktionsbeschreibung

Der Medianfilter speichert N Messwerte in einem sortierten Array und verwendet nur den Wert an der mittleren Position des Arrays. Enthält das Array eine gerade Anzahl von Elementen, dann wird der Mittelwert der beiden mittleren Elemente zurückgegeben.

Wird ein neuer Messwert an den Medianfilter übergeben, dann wird der älteste Messwert durch den neuen ersetzt und die Liste neu sortiert.

Quelle: https://www.mikrocontroller.net/articles/Median_Filter

Apollon77 commented 5 days ago

Machen nicht percentile heutzutage viel mehr sinn als der median? https://www.dynatrace.com/news/blog/why-averages-suck-and-percentiles-are-great/

Apollon77 commented 5 days ago

PS: genertall den Wert in einem der StatistikAdapter erfassen und dann dort über den gewünschten zeitraum entweder average (wäre der median grob) oder besser percentile abfragen, so arbeite ich in meiner Auto Ladesteuerung ... percentile 50 über letzte 10 minuten PV produktion

mikkey1000 commented 5 days ago

PS: genertall den Wert in einem der StatistikAdapter erfassen und dann dort über den gewünschten zeitraum entweder average (wäre der median grob) oder besser percentile abfragen, so arbeite ich in meiner Auto Ladesteuerung ... percentile 50 über letzte 10 minuten PV produktion

schau ich mir an. Danke

mcm1957 commented 5 days ago

Ev als Feature Issue im Adapter SMOOTHED einbringen. Würde dort wahrscheinlich passen. https://github.com/BenAhrdt/ioBroker.smoothed

@BenAhrdt Würde das nicht zum smoothed passen?

mikkey1000 commented 5 days ago

Ev als Feature Issue im Adapter SMOOTHED einbringen. Würde dort wahrscheinlich passen. https://github.com/BenAhrdt/ioBroker.smoothed

@BenAhrdt Würde das nicht zum smoothed passen?

den Adapter hatte ich mir in den letzten Tagen auch angeschaut. da würde es gut reinpassen!

BenAhrdt commented 5 days ago

Also weitere Filtermethode? Die zu grundeliegende Berechnugnen für Mittelwert / PT1 basieren auf der Methode, dass intern ein Array abgelegt wird, welches der Filterzeit entspricht. hier werden entweder (je nach einstellung) in einem bestimmten Zyklus Werte abgelegt,oder bei Wertänderung des zu filternden werts.

Die logik: Der Medianfilter speichert N Messwerte in einem sortierten Array und verwendet nur den Wert an der mittleren Position des Arrays. Enthält das Array eine gerade Anzahl von Elementen, dann wird der Mittelwert der beiden mittleren Elemente zurückgegeben.

ist mit der aktuellen Logik im Adapter nicht so einfach umsetzbar, da die Anzahl der Elemente, davon abhängig wie lange ein wert anstand. (Bspw. Filterzeit 1min ... Wert: 50s auf 1 und 10s auf 100 ergibt 2 Werte im array. (Es sei denn ich lasse es immer zyklisch aktualisieren).

Allerdings, würde ich für die gewünschte Funktion eher einen Mittelwert empfehlen mit entsprechender einstellung der erlaubten standardabweichung.

Die Logik der beschriebenen wertbildung, erscheint mir nicht wirklich gut. (wenn ein außreiser direkt die eiden mittleren werte betrifft, werden diese trotzdem ausgegeben)

@mikkey1000 Hast Du Dir die vorhandenen Logiken zur Gefilterten Wertbildung mal angesehen? Also ich könnte noch eine Logik mit rein bringen, die die beiden mittleren Werte nimmt. Wie gesagt, die Idee hinter der Wertbildung des Adapters ist nicht eine Anzahl X an Werten zu haben und daraus einen Mittelwert zu bilden, sondern anhand einer Filterzeit einen Wert zu bilden. Je nachdem wie schnell sich der Wert ändert, können bei einer Filterzeit von 30s auch 100 Werte im Array sein, oder eben auch nur einer. Die Werte werden allerdings gewichtet anhand ihrer Dauer genommen.

Hier mal ein Beispiel meines PV-Wertes und dem mit Mittelwert gefilterten Wert. Ich habe den Wert manuell immer mal wieder auf 0 gesteuert und wie Du siehst, tut es dem gefilteten Wert kaum etwas.

objects-iobroker-Google-Chrome-2024-06-27-19-59-12