Maximalwert der letzten X Stunden

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

    #1

    Maximalwert der letzten X Stunden

    Hallo zusammen,

    Ich möchte gerne die maximalen Windgeschwindigkeiten der letzten 6/12/24 Stunden in Merkern ablegen und auf der Visu anzeigen.
    Meine aktuelle überlegung sieht folgendermaßen aus - der Reset würde dann alle X Stunden ausgeführt :


    Das ist natürlich nicht das was ich haben will - der Maximalwert soll sich ja immer auf die letzten X Stunden beziehen und nicht nur ab den letzten Reset.

    Wie würdet ihr sowas angehen? Eine Art Pufferspeicher mit Wert/Zeitstempel gibt es ja nicht und PicoC will ich wenn möglich vermeiden.
    Angehängte Dateien
    Zuletzt geändert von Gast; 03.05.2016, 14:37.
  • Michael Sommer
    Lox Guru
    • 25.08.2015
    • 1976

    #2
    Hallo,
    das müsste doch mit diesem Baustein machbar sein: http://www.loxone.com/dede/service/d...-zeitraum.html
    Gruß Michael
    Haustechnik UG: MS2, 7 Extensionen, WAGO 750er I/O-Module, 19"-Notbedienebene, EMA-Anlage
    ELT-UG: MS1, 5 Extensionen, Notbedienebene, RM+WM-Anlage, Mehrere Shellys,
    OG: MS1, 8 Extensionen, Notbedienebene, Mehrere Shellys
    EG: konvent. E-Installation, Autarke EZR-Regelkreise (0-10V) für Stat.-HZG mit Aufschaltung (Schwellwert) des Heizkreises auf den Miniserver UG, Zeitsteuerung EG-Wohnung aus Miniserver UG). Mehrere Shellys
    LoxBerry-Nutzer: Stats4Lox,
    Testserver: 2xMS-GEN1

    Kommentar

    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11250

      #3
      Darüber habe ich mir auch schon Gedanken gemacht.
      Gast Die Lösung von dir deckt der MinMax Zeitraum genau ab.

      Allerdings gleitet dieser Zeitraum nicht. Du bekommst damit also nicht das Maximum der letzten 5 Minuten, sondern das Maximum der letzten 0-5 Minuten (eben seit dem Reset).
      Für ein gleitendes Maximum müsste man mehrere Maxima speichern und "gleiten" lassen. Das ist doch einiger Aufwand, um die maximale Windböengeschwindigkeit der letzten 60 Minuten zu erfassen.
      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar

      • Gast

        #4
        Danke für eure Antworten - der MinMax Baustein machts schon bißchen einfacher. Ich werd wohl folgendes bei mir implementieren:
        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: maxwert2.png
Ansichten: 1612
Größe: 29,7 KB
ID: 40530

        Ist zwar auch nicht wirklich ein gleitendes Maximum aber kommt zumindest annähernd in die richtige Richtung.

        Kommentar

        • Jan W.
          Lox Guru
          • 30.08.2015
          • 1498

          #5
          Hallo Roemer,

          ich habe vor einiger Zeit ein Pico C Skript geschrieben, da ich vor einem fast gleichen Problem stand. Einen halbwegs richtigen gleitenden Maximalwert habe ich nur auf diese Weise hinbekommen. Das Skript ist sehr effizient programmiert, so dass es kaum CPU Leistung benötigt. Habe es seit fast einem Jahr laufen und auch mit Loxone v7.4.4.14 noch nie irgendwelche Abstürze gehabt.

          Anlass war das Problem mit dem Loxone Windmesser Baustein, der ebenfalls keinen gleitenden Maximalwert berechnet, sondern nur mit festen Intervallen arbeitet und nur am Ende eines jeden Intervalls die Maximalwerte aktualisiert. Wir haben Raffstores und bei einer Sturmböe möchte ich sofort den jeweiligen Maximalwert sehen. Das war mit dem Standardbaustein nicht möglich. Ein Ticket bei Loxone mit dem Hinweis auf eine meteorologisch inkorrekte Berechnungsmethode wurde leider negativ beantwortet.

          Da ich sowieso die Programmierung mit Pico C auf dem MS näher kennenlernen wollte, ist ein Programm entstanden, welches bei wenigen Samples (kurzer Zeitraum) exakt einen gleitenden Maximalwert berechnet, aber bei vielen Samples etwas ungenauer wird.

          Wenn Du die Werte pro Sekunde abfragen und das Maximum für 24 h berechnen möchtest, dann kommen schon sehr viele Werte zusammen (86400). Dafür reicht der RAM Speicher wahrscheinlich nicht aus. Hier könntest Du evtl. den Pico C Code modifizieren und statt dem Maximum von jeweils 10 Werten vielleicht 600 Werte (10 Minuten bei 1 s Abfrageintervall) nehmen. Damit hättest Du eine Ungenauigkeit von 10 Minuten, d.h. es wird das gleitende Maximum der letzten 23h50min bis 24h berechnet. Da nur alle 10 Minuten ein Wert gespeichert wird, hat das Array, welches die lokalen Maxima speichert nur 144 Einträge für einen Tag. Damit kann das Maximum sehr schnell berechnet werden.

          Bei Deiner Programmierung würde mich stören, dass z.B. bei einem Reset um 0 Uhr (alle 24 h) der Maximalwert am Morgen um 7 Uhr eben nicht die letzten 24 h, sondern nur die letzten 7 h beinhaltet. Ein Sturm am Vorabend bzw. in der Nacht vor 24 Uhr wird damit nicht mehr angezeigt.

          Gruß Jan
          Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
          Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
          Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
          Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
          Node-RED: IKEA Tradfri

          Kommentar


          • Gast
            Gast kommentierte
            Kommentar bearbeiten
            Könntest Du Dein Pico C Script hier änhängen? :-)

          • Jan W.
            Jan W. kommentierte
            Kommentar bearbeiten
            hatte vergessen den Link auf den ursprünglichen Post zu nennen: https://www.loxforum.com/forum/germa...eigen#post1087

            Da sind das Skript als auch Erläuterungen zu finden.
        • svethi
          Lebende Foren Legende
          • 25.08.2015
          • 6346

          #6
          Ich will hier auch mal meinen Senf dazugeben.
          Zuerst dachte ich auch, das der MinMax Zeitbaustein richtig wäre, doch Christian wird da Recht haben.
          Eine Lösung per PicoC und derart vielen Werten könnte schon zum Problem mit dem Arbeitsspeicher des Miniserver werden. Die Frage ist ja diese ... Einen MinMax-Wert in einem Zeitraum bekomme ich per einer einzigen Abfrage per SQL. Wenn man also einen Webserver mit MySQL und php zur Verfügung hat oder sich dafür vielleicht einen Raspi oä. Anschaffen würde, sollte sich das Problem ganz einfach lösen lassen
          Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

          Kommentar

          • Gast

            #7
            Zitat von Jan W.
            Bei Deiner Programmierung würde mich stören, dass z.B. bei einem Reset um 0 Uhr (alle 24 h) der Maximalwert am Morgen um 7 Uhr eben nicht die letzten 24 h, sondern nur die letzten 7 h beinhaltet. Ein Sturm am Vorabend bzw. in der Nacht vor 24 Uhr wird damit nicht mehr angezeigt.
            Ich hab das jetzt so gelöst dass die Resets in einer solchen zeitlichen Abfolge kommen dass gleich mal der max-Wert vom Vorgänger genommen wird. Damit geht nur die ältere Hälfte verloren.

            Konkret folgendermaßen:
            24H: Reset um 20:00
            12H: Reset um 20:01 und 08:01
            06H: Reset um 20:02, 14:02, 08:02, 02:02
            und so weiter.

            So komm ich mit den Bordmitteln glaub ich am weitesten.

            Kommentar


            • Jan W.
              Jan W. kommentierte
              Kommentar bearbeiten
              Ja, das macht Sinn und erhöht die Genauigkeit. Mit weiteren Bausteinen, z.B. 13h, 14h, bis 23h etc. könnte man Genauigkeit vielleicht noch weiter erhöhen. Ebenso für kleinere Werte als 1h, damit um '5 nach' die Sturmböe von vor 6 Minuten noch sichtbar ist. Die Frage ist, welche Genauigkeit man haben möchte und ob dann nicht Pico C eine bessere Lösung darstellt.

              Man kann den Rechenaufwand und die Speichermenge mit einem 'fast' genauen Verfahren drastisch reduzieren. Bisher habe ich noch keine Probleme mit meinen Pico C Skripten gehabt und 2 Skripte laufen stabil seit vielen Monaten und mit mehreren Updates des MS. Das Troubleshooting von Pico C ist allerdings nicht besonders gut.
          • ezi
            Smart Home'r
            • 15.10.2015
            • 74

            #8
            Hallo. Ich stehe vor einem ähnlichen Problem.

            Ich will den maximal Wert vom Tag, und den Gesamt.
            Hab das auch hinbekommen.
            Aber ich hab keine Idee wie ich das Datum und die Uhrzeit zum Gesamt Maximal Wert bekomme.

            Bzw. wie ich noch maximal wert Letztes Jahr z.b.: reinbekomme

            Hat wer von euch eine Idee?
            Angehängte Dateien

            Kommentar

            • EdiB
              Extension Master
              • 30.12.2015
              • 135

              #9
              Hallo Zusammen
              Ich greife das Thema nochmals auf, weil ich mich auch schon seit längerer Zeit mal wieder damit beschäftigt habe. Und ich denke, zumindest für mich, die Optimale Lösung gefunden zu haben. Die Anforderung war, dass ein neuer, aktueller Maximalwert unmittelbar auch ein gleitendes Maximum mit nach oben nimmt. Dann soll sich das gleitende Maximum 30min halten. Dies um es einerseits visuell zu sehen und andererseits um in diesem Zeitraum irgendwo hin einen Logeintrag schreiben zu können. Dabei soll auch kein noch so kurzes Maximum irgendwo dazwischen fallen.

              Die Lösung mit den Loxone Bausteinen sieht nun so aus:
              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Loxone WindMax.JPG
Ansichten: 1298
Größe: 67,2 KB
ID: 326208
              Die 30min sind in 3 Datenblöcke (MinMax seit Reset) für jeweils ein 10min Zeitfenster unterteilt. Alle Datenblöcke speichern das Maximum, in diesem Fall vom Windsensor am AI, bis sie einen Reset erhalten.. Der vierte Datenblock ist nötig weil ein Datenblock ja erst gelöscht werden kann, wenn er vollständig aus dem 30min Zeitfenster herausgelaufen ist. Der Reset erfolgt in einer Schlaufe, initiiert durch einen Impulsgeber mit nachfolgend verzögerten Impulsen. Mit einem MinMax Baustein werden dann die vier Datenblöcke zusammengefasst und an einen Virtuellen Status übergeben.
              Dadurch wird das "gleitende" Maximum unmittelbar aktualisiert, es geht kein Maximum verloren und ein Maximalwert wird in diesem Beispiel zwischen 30 und 40min gehalten. Die Zeitfenster können natürlich angepasst, oder das Ganze durch weitere MinMax seit Reset erweitert und dann durch weitere MinMax Bausteine wieder zusammengefasst werden.

              Noch etwas schöner habe ich das selbe Konzept im iobroker mit JavaScript umgesetzt. Da habe ich die 30min in 30 1min Fenster unterteilt. also 31 Datenpunkte. Ein Maximalwert hat somit eine Lebensdauer von 30-31min. Und damit es bei allzu häufigen Änderungen des des aktuellen Wertes sicher keinen Stress gibt, gibt es noch eine Beschränkung von 500ms für die Aktualisierung eines neuen Wertes.

              Hier noch ein Chart über 3h einer Strom Messung
              grau: aktueller Wert
              rot: geleitendem Maximum über 30min mit 1min Resetintervall
              blau: geleitendem Maximum über 30min mit 10min Resetintervall (Loxone Beispiel)

              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Chart.png
Ansichten: 1010
Größe: 41,7 KB
ID: 326209

              JavaScript

              // Gleitendes Maximum
              var newval = getState('mqtt-client.0.miniserver1.medien.strom.gesamt').val // Datenpunkt für aktuellen Wert
              var tc = 60; // Bereinigungsintervall in Sekunden
              var T = 30 * 60; // Zeitraum der Auswertung in Sekunden (Min*Sek)
              var n = Math.round(T / tc + 1); // Anzahl der Datenpunkte im Zeitraum + 1
              var mu = 500; // Maximale Updatefrequenz in Millisekunden
              var a = Array(n).fill(0);
              var maxval // Maximalwert
              var pi = 0 // PointerIndex für Löschschlaufe
              var t = +new Date(); // Unix Zeitstempel

              setInterval(function() { // alle x millis den ältesten Eintrag auf 0 setzen
              if (pi >= n) { pi = 0; };
              console.log('Datenpunkt ' + pi + ' wird auf 0 gesetzt');
              a[pi] = 0;
              maxval = 0
              for (var i = 0; i < a.length; i++) {
              if (a[i] > maxval) { maxval = a[i]; };
              }
              setState("javascript.0.medien.strom.max", maxval);
              console.log('MAX: ' + maxval);
              pi = pi + 1;
              },tc*1000);

              on({id: 'mqtt-client.0.miniserver1.medien.strom.gesamt'}, function() { // löst bei jeder Aktualisierung aus
              newval = getState('mqtt-client.0.miniserver1.medien.strom.gesamt').val
              console.log('>>> New: ' + newval);
              if (+new Date() > t + mu) { // Maximale Update Frequenz prüfen
              t = +new Date();
              maxval = 0
              for (var i = 0; i < a.length; i++) {
              if (newval > a[i]) { a[i] = newval; }; // alle Werte mindestens auf aktellen Wert anheben
              if (a[i] > maxval) { maxval = a[i]; }; // neues Maximum ermitteln
              }
              setState("javascript.0.medien.strom.max", maxval);
              console.log('Max: ' + maxval);
              }
              });
              // >>>>>>

              Beste Grüsse
              Edi

              Kommentar


              • EdiB
                EdiB kommentierte
                Kommentar bearbeiten
                Ich mutmasse mal, dass da mit einer fixen Abtastrate gearbeitet wird? Das wäre dann genau was ich nicht will!
                Grundsätzlich ging es mir darum eine Lösung innerhalb Loxone zu finden weil es dafür leider (noch) keinen Baustein gibt😊

              • maxw
                maxw kommentierte
                Kommentar bearbeiten
                Also ich verwende nicht das Statistik Plugin sondern Node Red, Influx DB & Grafana. Da wird JEDE Änderung erfasst, genauer geht nicht.

              • svethi
                svethi kommentierte
                Kommentar bearbeiten
                Ich auch. Seinerzeit gab es das Plugin noch gar nicht ;-)
            • Christian Fenzl
              Lebende Foren Legende
              • 31.08.2015
              • 11250

              #10
              Ich hab’s vermutlich nie erwähnt, weil ich den Thread nicht mehr gefunden habe:
              Mit MQTT UDP Transformer am LoxBerry habe ich das umgesetzt, die gleitenden Min/Max/AVG/Sum:



              Braucht aber natürlich einen LoxBerry, dafür ist es wirklich sehr genau.
              Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

              Kommentar


              • EdiB
                EdiB kommentierte
                Kommentar bearbeiten
                Danke! Ist mir im Plugin noch gar nicht aufgefallen. Werde ich mir jedenfalls noch ansehen....
            • lox4fun
              Smart Home'r
              • 02.09.2015
              • 51

              #11
              Hab mal versucht den gleitenden Mittelwert mit einer Ablaufsteuerung zu programmieren.
              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: GleitenderMittelwert.png Ansichten: 0 Größe: 169,8 KB ID: 326256 gleitender Mittelwert.Loxone
              Zuletzt geändert von lox4fun; 23.11.2021, 12:40.

              Kommentar


              • Christian Fenzl
                Christian Fenzl kommentierte
                Kommentar bearbeiten
                Der rechnet leider falsch, weil er den Faktor Zeit nicht einbezieht. Das entspricht dem, was Loxone mitliefert.
            Lädt...