Maximalwert übers Jahr mit festem timestamp im Statusbaustein

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • hauwech
    Dumb Home'r
    • 03.07.2024
    • 28

    #1

    Maximalwert übers Jahr mit festem timestamp im Statusbaustein

    Hallo zusammen,
    ich habe mich gedanklich festgefahren. Diese Bausteinprogrammierung macht mich im Vergleich zur herkömmlichen Programmierung fertig.
    Die Idee war, den Maximalpeak der PV Anlage als "Total peak" und "Täglichen Peak" festzuhalten. Dabei soll sich der Timestamp nur ändern, wenn der jeweilige Wert tatsächlich größer geworden ist. Ziel war, im Laufe des Jahres mal nachzuschauen: Am 10.07. um 13:35 hatte ich für dieses Jahr die Maximalleistung. Oder heute war um 14:36 Uhr das Maximum. Das schien mir eigentlich recht einfach umzusetzen zu sein.

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

Name: PV-Peak.png
Ansichten: 139
Größe: 39,1 KB
ID: 458293

    Einfach die Momentanleistung -> MinMax seit Reset -> Status mit <v1> W - <v1.t> ... fertig. Das funktioniert, bis man das Projekt das nächste Mal in den Miniserver speichert. Dann wird nämlich der Timestamp in diesem Moment auf die gerade aktuelle Zeit gesetzt, obwohl sich das zugehörige Value gar nicht ändert.
    Auch wenn ich Datum und Zeit entweder mit entsprechend aufbereiteten Unix-timestamp oder mit den Loxone-Zeit Werten (https://www.loxforum.com/forum/germa...eicher-ablegen) in einen Analogspeicher mit Remanenz schreibe, der über einen Monoflop eines "Größer als" Vergleichs getriggert (Eingang "Set" am Analogspeicher) wird, ändert sich der im Analogspeicher gespeicherte Timestamp, wenn das Projekt in den Miniserver geschrieben wird.
    Wie kann ich denn erreichen, daß der im Statusbaustein angezeigte Zeitstempel oder im Analogspeicher gespeicherte Wert auf dem Wert stehenbleibt, der mit der letzten tatsächlichen Wertänderung einherging und nicht bei Projektspeicherung aktualisiert wird? Auch der "Off" Eingang des Analogspeichers auf "Ein" bewirkt nicht, daß der Speicherinhalt bei der Projektspeicherung erhalten bleibt. Es muß doch möglich sein, einen string oder long so zu speichern, daß er einen Programmneustart überlebt.
    Das ganze Ding ist nicht wirklich kriegsentscheidend, aber es wurmt mich total, wenn ich eine scheinbar einfache Idee nicht umsetzen kann. Vielleicht habe ich auch wieder mal den entscheidenden Baum im Wald übersehen.
    Ich würde mich freuen, wenn mich jemand in die richtige Richtung weisen könnte.

    Vielen Dank und Gruß
    Roland
    Angehängte Dateien
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11238

    #2
    Dein Analogspeicher hat gar keinen Trigger, dass der Wert gespeichert werden soll.
    Dein PV-Wert hat überhaupt keinen Analogspeicher.

    Deswegen wird nichts gespeichert.

    Siehe Doku Analogspeicher.

    lg Christian
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • romildo
      Lebende Foren Legende
      • 25.08.2015
      • 5159

      #3
      Ich verwende für solche Informationen den Tracker.
      Er speichert bis zu 100 Werte. Wenn Remanent gesetzt wird, bleiben die Werte auch nach einem Neustart erhalten.
      lg Romildo

      Kommentar

      • hauwech
        Dumb Home'r
        • 03.07.2024
        • 28

        #4
        Sorry, der screenshot ist am Ende der Frustphase nach etlichen Versuchen mit verschiedenen Variationen unglücklich geraten. Ich hatte einen Virtuellen Eingangstaster als Trigger dran, um im Liveview den Timestamp am Statusbaustein beim manuellen Triggern und beim Speichern in den Miniserver zu beobachten.
        Tracker verwende ich auch gerne bei Bedarf. Ich wollte aber in meinem PV Raum eine Statuskachel, wo man sofort Wert und Zeit sieht, weil es ja nur genau ein einzelner Wert ist, der nur das Maximum über die gesamte PV-Laufzeit anzeigen soll.
        Remanenz habe ich am Analogspeicher ein. Das verhindert aber nicht, daß ein darin gespeicherter Timestamp (z.B. ein Unix timestamp minus 1230768000) beim Schreiben in den Miniserver aktualisiert wird. Ich hätte erwartet, daß ein im Analogspeicher gespeicherter Wert so wie er gespeichert wurde, erhalten bleibt und nicht beim Schreiben des Projekts in den Miniserver vom System ungefragt aktualisiert/geändert wird. Dieses Systemverhalten halte ich für einen Fehler.
        Ich finde das Loxone System ziemlich geil, aber ich finde nicht schön, wenn man für solche triviale Ideen derartige Verrenkungen machen muß.
        Ich werde die Aufgabe jetzt in fhem mit ein paar Zeilen Perl Code erledigen und Loxone dafür nur als Visu benutzen.

        Gruß Roland

        Kommentar

        • Jan W.
          Lox Guru
          • 30.08.2015
          • 1394

          #5
          Wie schon oben angegeben, musst Du neben dem Timestamp auch den den PV-Peak Wert über einen eigenen Analogspeicher puffern (ebenfalls mit Remanenz). Trigger (Set-Eingang) ist die Verknüpfung des gespeicherten PV-Peak Wertes mit dem aktuellen Wert über ein "Größer"-Baustein, d.h. wenn der neue PV-Peak Wert größer ist, als der gespeicherte, dann wird über "Set" sowohl der Peak-Wert, als auch der Timestamp in den Analogspeicher übernommen. Die "größer" Bedingung ist damit nicht mehr erfüllt und der Wert bleibt bestehen. Diese Logik sollte auch Restarts des MS ohne Werteänderung überstehen.
          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

          • romildo
            Lebende Foren Legende
            • 25.08.2015
            • 5159

            #6
            Ich bin der Meinung, dass es mit dem Statusbaustein so wie der zur Zeit programmiert ist, leider keine Lösung gibt.
            Meiner Erfahrung nach liest er bei einem Neustart die Eingänge neu ein. Somit setzt er dann das Datum immer auf die Zeit des Neustarts.
            lg Romildo

            Kommentar


            • Jan W.
              Jan W. kommentierte
              Kommentar bearbeiten
              Ich glaube auch, dass die Remanenz nur den Wert, aber nicht den Zeitstempel dazu speichert. <v1.t> kommt dann nicht in Frage, aber der Timestamp aus dem Analogspeichet lässt sich sicherlich umrechnen, wenn der Statusbaustein kein <v.u> kennt.
          • romildo
            Lebende Foren Legende
            • 25.08.2015
            • 5159

            #7
            Mit Zuhilfenahme einer Ablaufsteuerung könnte dies beispielsweise realisiert werden.

            Klicke auf die Grafik für eine vergrößerte Ansicht  Name: SpeichernWertMitZeitstempel.png Ansichten: 0 Größe: 190,7 KB ID: 458435
            Bemerkung:
            Damit die Zeit relativ genau gespeichert wird, sollte die Einstellung "Intervall" möglichst klein sein. Beispielsweise 20ms.
            Der Statusbaustein ist nicht zwingend notwendig, ist aber in diesem Post gewünscht

            Code:
            set value1 = 0
            set AQ1 = AI1 // Wert
            set AQ5 = AI5 // Stunde
            set AQ6 = AI6 // Minute
            set AQ7 = AI7 // Sekunde
            set AQ2 = AI2 // Tag
            set AQ3 = AI3 // Monat
            set AQ4 = AI4 // Jahr 4 stellig
            if AQ7 < 10 // Kontrolle Sekunde 2 stellig
            set value1 = value1 + 100
            endif
            if AQ3 < 10 // Kontrolle Monat 2 stellig
            set value1 = value1 + 1
            endif
            if AQ6 < 10 // Kontrolle Minute 2 stellig
            set value1 = value1 + 10
            endif
            // Ausgabe
            if value1 = 0 // Relevante Zeitwerte sind 2 stellig
            set TQ = AQ1 "W " AQ2 "." AQ3 "." AQ4 " " AQ5 ":" AQ6 ":" AQ7
            endif
            if value1 = 1 // Monat ist 1 stellig
            set TQ = AQ1 "W " AQ2 ".0" AQ3 "." AQ4 " " AQ5 ":" AQ6 ":" AQ7
            endif
            if value1 = 10 // Minute = 1 stellig
            set TQ = AQ1 "W " AQ2 "." AQ3 "." AQ4 " " AQ5 ":0" AQ6 ":" AQ7
            endif
            if value1 = 11 // Monat und Minute = 1 stellig
            set TQ = AQ1 "W " AQ2 ".0" AQ3 "." AQ4 " " AQ5 ":0" AQ6 ":" AQ7
            endif
            if value1 = 100 // Sekunde = 1 stellig
            set TQ = AQ1 "W " AQ2 "." AQ3 "." AQ4 " " AQ5 ":" AQ6 ":0" AQ7
            endif
            if value1 = 101 // Monat und Sekunde = 1 stellig
            set TQ = AQ1 "W " AQ2 ".0" AQ3 "." AQ4 " " AQ5 ":" AQ6 ":0" AQ7
            endif
            if value1 = 110 // Minute und Sekunde = 1 stellig
            set TQ = AQ1 "W " AQ2 "." AQ3 "." AQ4 " " AQ5 ":0" AQ6 ":0" AQ7
            endif
            if value1 = 111 // Monat, Minute und Sekunde = 1 stellig
            set TQ = AQ1 "W " AQ2 ".0" AQ3 "." AQ4 " " AQ5 ":0" AQ6 ":0" AQ7
            endif
            end
            lg Romildo

            Kommentar

            • hauwech
              Dumb Home'r
              • 03.07.2024
              • 28

              #8
              Die Ablaufsteuerung hatte ich als Nächstes ins Auge gefaßt, damit habe ich mich aber noch nicht beschäftigt. Vielen Dank für den Code, das werde ich mir auf jeden Fall genauer anschauen.
              Ich habe gestern indessen die Idee in einer Stunde in fhem umgesetzt. Die Werte werden mit ein paar Zeilen Perl ermittelt und via MQTT nach Loxone gepustet. In fhem muß ich nicht mal den Timestamp explizit ermitteln, sondern fhem führt einen internen timestamp, wann das jeweilige reading geschrieben wurde. Den kann man auslesen und verwenden. Die Logik war ja nicht das Problem, sondern das unerwartete Verhalten der Loxone Software. Ich habe seit vielen Jahren fhem laufen. Den Loxone Miniserver habe ich letztes Jahr angeflanscht, weil damit die Visu deutlich einfacher als in fhem zu realisieren ist, auch remote.
              In Loxone hatte ich die Zeit wie unter dem Link in meinem ersten Beitrag aufbereitet und in Analogspeichern gepuffert. Auf mit Unix Timestamp-1230768000 habe ich getestet, auch mit Analogspeicher und Set über Monoflops aus dem Größer-Vergleich. Da man den Analogspeicher nicht visualisieren kann, kommt an den Ausgang entweder ein Merker oder ein Status. Beide setzen den Wert bei Programmstart neu. Ich kann's nicht mehr live nachvollziehen, weil ich den nicht funktionierenden Teil weggeschmissen habe. Das vorhandene Backup will ich nicht auf den Miniserver zurückspielen, weil dann meine richtigen Werte wieder weg wären. Mir war es jedenfalls mit keiner Variante gelungen, einen timestamp zu visualisieren, der nicht bei Programmstart geändert wird.

              Vielen Dank für Eure Hilfe.
              Roland

              Kommentar


              • romildo
                romildo kommentierte
                Kommentar bearbeiten
                Das Backup zurückspielen würde nichts als noch mehr Ärger bringen

                Sofern beim Analogspeicher die Remanenz aktiviert ist, funktioniert der wie gewünscht.
                Es liegt eindeutig am Statusbaustein, welcher nach Neustart den Wert am Eingang neu einliest.
                Wie und warum auch immer, es funktioniert nicht so wie erwartet.

                Aus meiner Sicht sollte er bei gleichem Eingangswert die Remanenzwerte nehmen, was er aber scheinbar nicht macht.
            • GeoPod
              LoxBus Spammer
              • 20.01.2021
              • 417

              #9
              romildo Dank dir vielmals für deine Umsetzen.

              Klappt bisher super:

              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 30,4 KB ID: 458455

              Kann ich dich noch kur fragen, wie du dies mit dem virtuellen Eingang gemacht hast? Wie kann ich an diesen die PV Produktion übergeben? Hätte zuerst gedacht ich mache dies mit einem Merker, da ich dort dann die Nachkommastellen anpassen kann. Oder hätte das einen Nachteil?


              Edit: und wäre es vielleicht möglich die pro Jahr zu zählen? Welcher Zählerbaustein könnte dies?



              Edit 2:

              Leider zu früh gefreut. Es klappt leider doch nicht:
              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image.png
Ansichten: 40
Größe: 46,0 KB
ID: 458458

              Nur wenn ich manuell den Trigger auslöse wird der Wert übernommen...
              Zuletzt geändert von GeoPod; vor einer Woche.

              Kommentar

              • romildo
                Lebende Foren Legende
                • 25.08.2015
                • 5159

                #10
                In der Loxone Config kann man auch ohne Miniserver mittels Simulation die Funktionsweise testen.
                Die virtuellen Eingänge habe ich nur zum Testen genommen, die müssen durch die gewünschten Objekte ersetzt werden.

                Die Funktionsweise des Programms ist so, dass bei einem Impuls an S1 das Programm von oben nach unten abgearbeitet wird.
                Wie viel Zeit für jede Zeile zur Verfügung steht, wird in der Eigenschaft unter Intervall [ms] festgelegt, wobei die kleinstmögliche Zeit 20ms ist.

                Ich gehe mal davon aus, dass kurz vor Reset des MinMax Bausteins der Wert gespeichert werden soll.
                Also müsste das Objekt, welches den MinMax zurücksetzt kurz vorher ein Programmstart auslösen.

                Dies könnte beispielsweise so wie im Bild unten in der Simulation getestet werden.
                Wenn die Tests zufriedenstellend sind, können die Testeingänge durch die tatsächlichen Objekte ersetzt werden.
                Wenn der Impuls tatsächlich nur bei Jahreswechsel kommen soll, dann könnte der Trigger z. B. mittels "Jahresimpuls" zu finden unter Zeitfunktionen oder mittels Baustein "Impuls um" erfolgen.

                Klicke auf die Grafik für eine vergrößerte Ansicht  Name: SpeichernWertMitZeitstempel_1.png Ansichten: 0 Größe: 171,5 KB ID: 458536
                Zuletzt geändert von romildo; vor einer Woche.
                lg Romildo

                Kommentar

                • Jan W.
                  Lox Guru
                  • 30.08.2015
                  • 1394

                  #11
                  Noch ein andere Lösung, die auf dem ersten Ansatz basiert. Leider funktioniert im Status nicht <v1.u>, um ein Loxone Zeitstempel auszugeben. Das Problem wurde bereit hier bemängelt und meine Lösung basiert auf der von Tico . Die Verwendung von <vx.t> bezieht sich auf die Zeit von vx und überlebt kein Reboot des MS, weil der Analogspeicher nur Werte speichert, aber nicht die zugehörige Zeit.

                  Loxone ist leider ziemlich inkonsequent, was Zeitformate angeht. Der Statusbaustein kann nur EIB Time und Datum ausgeben, eine Formatoption <v.u> vieler Bausteine basiert auf dem Loxone Zeitstempel ab 1.1.2009 und als Zeitfunktion gibt es nur UNIX Timestamp.

                  Kurze Erläuterung zur Logik: wenn Input Power größer ist als der vom Analogspeicher gespeicherte Wert, dann werden neue Werte in die Analogspeicher übernommen (ganz unten). Es gibt einen Analogspeicher für das Datum im EIB Format, einen für die Zeit im EIB Format und den Peak Wert für PV Power (bei mir in kW).

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

Name: Max PV Peak.png
Ansichten: 24
Größe: 90,9 KB
ID: 458544
                  Eine alternative Lösung könnte man auch mit Pico-C programmieren, wo man mit sprintf das Datum und Uhrzeit sogar noch formattieren und als String ausgeben kann und diesen Text-Output als Eingang für den Status verwendet.
                  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

                  Lädt...