Ankündigung

Einklappen
Keine Ankündigung bisher.

OpenKNX-Logikmodul: Glättung von Werten

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

    OpenKNX-Logikmodul: Glättung von Werten

    Ich versuche mit den vorhandenen Funktionsblöcken und Logikkanälen einen gleitenden Durchschnitt zu berechnen, aber komme einfach nicht weiter....

    Was will ich erreichen: Einen 2-byte Float-Wert empfangen und den gleitenden Durchschnitt der vergangenen 15min als Wert für einen Wertvergleicher nutzen. In meinem Anwendungsfall würde ich die aktuelle Leistung eines MPPT-Strings nutzen wollen um eine Freigabe für die Beschattung zu erhalten. Heute lasse ich mir den gleitenden 15min-Wert jede Minute von HomeAssistant senden, was ich zukünftig aber durch das Logikmodul/Raumcontroller ersetzen möchte.

    Was ich nicht unbedingt benötige wären der gleitende Durchschnitt. Ich kann auch x Werte aus den vergangenen y Minuten auswerten und dann im Wertvergleicher nutzen. Das sollte das ganze einfacher gestalten.

    Nun zu meinen Ideen, wie ich das ganze umsetzen wollen würde, aber nicht hinbekomme:
    1. Alle 15min 1sek EIN, sonst AUS mit Funktionsblock "Blinker". Wird automatisch gestartet durch "In Betrieb"
    2. Ich kann zwar mit "Statische Aggregation" mehrere Eingangswerte nutzen für einen Mittelwert, aber keinen Durchschnitt bilden.
    Weitere Idee wäre, wenn ich einen Ausgangswert immer wieder in einer Schleife mit einem Eingangswert summiere. Aber hier fehlt mir die Idee des Zurücksetzens.

    Momentan ist ein riesiges Brett vor meinem Kopf....

    #2
    Wahrscheinlich reicht für Deine Anwendung die normale Glättungsfunktion, die im Logikmodul eingebaut ist.

    Das ist die Funktion Glättung(E1, E2). E1 ist dabei der Eingangswert Deiner PV, E2 ist der Glättungsfaktor, wähle da eine Konstante, ich würde 15 oder 30 nehmen. Damit der Wert jede Minute kommt, nimmst Du eine Zeitschaltuhr als Minutentakt und ein TOR, dass die PV-Werte dann jede Minute durchlässt.

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      Zitat von Janncsi Beitrag anzeigen
      Was ich nicht unbedingt benötige wären der gleitende Durchschnitt. Ich kann auch x Werte aus den vergangenen y Minuten auswerten und dann im Wertvergleicher nutzen. Das sollte das ganze einfacher gestalten.
      Ein gleiteneder Durchschnitt würde erfordern, dass alle Werte im zu betrachtenden Intervall vorgehalten werden. Das würde bei einer universellen Umsetzung zu einem vergleichsweise hohen Speicherbedarf führen, das steht im Konflikt mit der geringen Speicheraussstattung der von uns genutzten Microcontroller. Will auch nicht ausschließen, dass es zukünftig noch mal eine entsprechende Lösung zum Umgang mit Zeitreihen geben könnte, ist aber nicht akut priorisiert und bräuchte auch ein tragfähges Gesamtkonzept...

      AlternativIdee (ungetestet):
      • (a) 15 LOG-Kanäle mit TOR, Momentanwert als Wert-Eingang, Wert auf Ausgang durchschleifen wenn Tor-Eingangswert der Wertnummer entspricht (also je nach Kanal 1 bis 15)
      • (b) LOG-Kanal mit Zähler von 1 bis 15 (wurde irgendwo schon mal dokumentiert)
        • Der wird dann rollierend die Ausgänge der anderen 15 Kanäle updaten
      • (c) irgendwas um (b) ein mal pro Minute zum weiterzählen zu triggern
      • (d) Funktionsblock (FCB) für Mittelwert der Werte 1 - 10
      • (e) Funktonsblock (FCB) für gewichteten Mittelwert 10 mal (e) und der Werte 11 bis 15. Ausgang liefert dann den gewichteten Mittelwert auf Basis von Momentangaufnahmen
      Ist durch die Momenanaufnahmen halt limiert. Bei stark schwankenden Werten ist das ungünstig. Ggf. lässt sich das noch verbessern wenn man für jede Minute den Minimal und Maximalwert ermittelt, wobei auch hier die zeitliche Gewichtung fehlen würde.

      Weitere Alternative: Glättung mit Dämpfungsfaktor, wie auch für die Sensorwerte angeboten.



      PS: Wir sollten diese Dikussion auslagern in einen eigenen Thread. Das ist nicht spezifisch fürs Sensormodul.
      OpenKNX www.openknx.de | StateEngine: Universelle Zustandsautomaten in KNX | OpenKNX Konfigurationstransfer

      Kommentar


        #4
        Gerne auslagern, wenn das einer der Mods übernehmen könnte?!

        Das mit der Glättung ist ein Ansatz, den ich testen werde. Wenn ich es richtig aus der Doku verstehe gehen alle bisherigen Werte dann in A(alt) ein. Wie würdet ihr dann das Ergebnis aus A(alt) zurücksetzen? Weil angenommen ich habe 3600 Minutenwerte für einen Tag und selbst im Juni bei der längsten Tageszeit habe ich etwa 1000 Nullwerte, dann würden diese Nullwerte historisch die Glättung dauerhaft beeinflussen?! Oder missverstehe ich das ganze?

        Danke euch

        EDIT: Habe mit ChatGPT nochmal eine ganz gute Erklärung bekommen, dass meine Annahme falsch ist:

        3) Konkretes Beispiel (E2 = 15, 1 Wert pro Minute)

        (1−115)=0,9333(1 - \frac{1}{15}) = 0{,}9333(1−151​)=0,9333
        Nach:
        • 10 min → ~50% des alten Werts
        • 30 min → ~12%
        • 60 min → ~1.5%
        • 120 min → praktisch 0

        👉 Die Historie verschwindet aktiv.

        Zuletzt geändert von Janncsi; 21.04.2026, 14:56.

        Kommentar


          #5
          Du kannst beim Logikmodul einem Ausgang auch das S-Flag setzen und da einen Wert reinschreiben, faktisch also A(alt) auf einen gewünschten Anfangswert setzen.
          Diese Art der Glättung (oder Dämpfung) arbeitet komplett ohne historische Daten, wie Du ja schon selbst rausgefunden hast.

          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar

          Lädt...
          X