Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikmodul: Ausreißer wegfiltern bzw. nicht senden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Logikmodul: Ausreißer wegfiltern bzw. nicht senden

    Hallo zusammen,

    leider sendet meine Ecowitt Wetterstation für die Helligkeit ab und an einzelne deutlich zu hohe Werte. Gibt es eine Möglichkeit diese per Logikmodul raus zu filtern?
    Hier mal die Messwerte von 10 Minuten heute, man sieht deutlich die beiden Ausreißer um 27k Lux:
    Code:
    state    last_changed
    23691    2025-08-16T11:10:00.000Z
    23683    2025-08-16T11:10:48.051Z
    27778    2025-08-16T11:10:58.246Z
    23681    2025-08-16T11:10:59.409Z
    23668    2025-08-16T11:11:59.605Z
    23663    2025-08-16T11:12:59.609Z
    23676    2025-08-16T11:13:59.609Z
    23679    2025-08-16T11:14:16.138Z
    23694    2025-08-16T11:14:59.610Z
    23710    2025-08-16T11:15:59.750Z
    27808    2025-08-16T11:16:04.483Z
    23712    2025-08-16T11:16:05.650Z
    23731    2025-08-16T11:17:05.670Z
    23761    2025-08-16T11:17:55.731Z
    23809    2025-08-16T11:18:51.418Z
    23832    2025-08-16T11:19:16.171Z
    23858    2025-08-16T11:19:48.833Z
    23903    2025-08-16T11:20:49.603Z
    23907    2025-08-16T11:20:52.379Z

    #2
    Es gibt bereis eine Ausgangsfunktion Glättung, die würde die Ausreißer abmildern. Könnte je nach weiterer Nutzung womöglich schon ausreichen.

    Zum Herausfiltern zu großer Änderungen müsste man mehr machen. Ggf. ebenfalls mit Glättung zu Erzeugung eines Vergleichswertes, oder einer Rückkopplung (vorsicht) um den vorherigen Wert zu nutzen. Wahrscheinlich werden mumpf oder willisurf da mehr zu sagen können...
    OpenKNX www.openknx.de | StateEngine: Universelle Zustandsautomaten in KNX | OpenKNX Konfigurationstransfer

    Kommentar


      #3
      Bei solchen einzelnen Ausreißern habe ich sehr gute Erfahrungen mit Medianfiltern gemacht. Ich habe das Logikmodul noch nicht ausprobiert, kann mir aber vorstellen, dass es für eine Umsetzung des Medianfilters geeignet ist.
      Du müsstes hierfür einen Größenvergleich der letzten mind. 3 Messwerte vornehmen und den mittleren der Werte auf den Ausgang schalten. Funktioniert natürlich auch mit mehr als 3 Messwerten als Eingang, verzögert dann aber auch mal stark die Eingangswerte.

      Eine klassische Mittwelwertbildung glättet die Aureißer zwar aber je nach Größe der Abweichung schwankt die Ausgangsgröße noch erheblich. Der Medianfilter liefert oft bessre Ergebnisse

      Kommentar


        #4
        Um dort sinnvoll und gezielt einzugreifen ist es erstmal wichtig die Art der Ausreißer genau einzugrenzen.
        Sind es immer nur einzelne Messwerte, ist es immer nach oben, ist es immer ein Sprung um einen größeren Betrag.
        Parallel muss man den Verlauf der realen Daten davon abgrenzen, wie häufig wird die Helligkeit übertragen, was sind dabei die größtmöglichen Sprünge von einem Messwert zum nächsten, wenn z.B. eine Wolke schnell vorbeizieht,...

        Sollte sich da eine scharfe Abgrenzung ergeben, kann man mit der Formelberechnung im Logikmodul einzelne Ausreißer nach oben gezielt ausblenden und als Messwert einfach nochmals den alten Messwert senden. Da die Benutzerformel Zugriff auf den Eingangswert (E1) und den vorherigen Ausgangswert (A) hat, ist das recht einfach.

        Im Ausgang wäre das dann z.B. um Sprünge größer als +2000 Lux auszublenden eine Formel
        Code:
        if(E1>(A+2000),A,E1)
        Eingebunden hier als z.B. Benutzerformel 2 (1 war noch belegt, geht aber natürlich genauso)
        image.png​und im Ausgang entsprechend ausgewählt
        image.png
        Die Logikauswertung sollte dann bei allen Werten ein True liefernimage.png


        Bespielhafter Exportstring (ohne Benutzerformel, diese muss gesondert eingegeben werden):
        Code:
        OpenKNX,cv1,0xA012:0x49/LOG:0x37/2§f~Logic=2§f~E1=1§f~E1Dpt=7§f~ODpt=7§f~OOn=8§f~OOnAll=8§f~OOnFunction=202§f~OOff=0§f~OOffAll=0§;OpenKNX

        Aber Obacht: Wenn es größere reale Sprünge der Helligkeit gibt, werden diese beliebig lange vollständig ausgeblendet, bis man wieder in den Bereich des Ausgangswertes vor der ersten großen Abweichung kommt.​
        Zuletzt geändert von willisurf; 17.08.2025, 12:57.
        Gruß Bernhard

        Kommentar


          #5
          Danke für eure Inputs.
          Habe die Lösung von Bernhard jetzt mal als neues KO mit am laufen.
          Da es immer Sprünge nach oben um ziemlich genau 4000 sind, sollte das gut klappen. Und vielleicht kann ich das Problem später ja noch an der Wurzel packen.

          Kommentar


            #6
            Irgendwas hab ich scheinbar noch falsch konfiguriert.
            Jedes senden des ursprünglichen Helligkeitswertes triggert die Logik, welche aber immer 0 sendet.

            Kommentar


              #7
              Zitat von jolt19 Beitrag anzeigen
              Jedes senden des ursprünglichen Helligkeitswertes triggert die Logik, welche aber immer 0 sendet.
              Bei der ersten Auswertung hat der Ausgang noch keinen Wert (der soll ja erst berechnet werden). Sieht so aus als würdeinitial dann 0 als initialer Ausgangswert angenommen. Den Fall müsste man dann noch mal gesondert behandeln und dann z.B. immer E1 ausgeben (ungetesteter Entwurf, den mit Kenntnis der exakten Syntax sicher noch schöner formulieren kann:
              Code:
              if(A>0,if(E1>(A+2000),A,E1), E1))
              .
              OpenKNX www.openknx.de | StateEngine: Universelle Zustandsautomaten in KNX | OpenKNX Konfigurationstransfer

              Kommentar


                #8
                Zitat von willisurf Beitrag anzeigen
                Wenn es größere reale Sprünge der Helligkeit gibt, werden diese beliebig lange vollständig ausgeblendet, bis man wieder in den Bereich des Ausgangswertes vor der ersten großen Abweichung kommt.​
                Das wird gerade bei Helligkeit eine Herausforderung. Sprünge in der Helligkeit könnten auch bei kurzfristiger Verdunklung bei Bewölkung auftreten. Wenn das Phänomen über den gesamten Helligkeitsbereich auftritt dann lieber mit Bertachtung der relativen Änderung.

                Vorschlag: Nutzung des geglätteren Wert als Referenz (statt des letzten Ausgangswertes) und nur Änderungen nutzen wenn die Abweichung zum aktuellen Wert nicht zu groß ist: E2 als Eingang für den geglätteren Wert nutzen und dann als Formel (ungetestet):
                Code:
                if(ABS((E1-E2)/((E1+E2)/2)>0.10/10,A,E1)
                Parametrierung von Glättung und Vergleichswert bräuchte ein passendes Feintuning.
                Einmalige größere Sprünge werden kurzfristig (je nach Parameter mehr oder weniger) stark im geglätteren Wert sichtbar. Bei auf einen Ausreißer nachfolgenden Werten nähert sich der gelättere Wert recht schnell wieder der ursprünglichen Größe (zwischendurch bleibt der alte Ausgangswert). Bei dauerhafter Änderung passt dann aber bald der neue Eingangswert und würde auch gesendet. D.h.: es findet nur eine Aktualisierung des Ausgangswertes statt, wenn der Eingangswert "nicht zu stark schwankt".


                Ich frage mich was die Ursache ist: Halte es für möglich, dass der Helligkeitsmesser durch regelmäßige Reflexionen aus der Umgebung geblendet wird und damit tatsächlich eine höhere punktuelle Helligkeit misst.
                OpenKNX www.openknx.de | StateEngine: Universelle Zustandsautomaten in KNX | OpenKNX Konfigurationstransfer

                Kommentar

                Lädt...
                X