Speicher historischer Wert in archivierter Variablen

Hi,

ich würde gerne Verbrauchswerte des Tages in einer Variablen ablegen. Nun liegen diese Daten ja erst am Folgetag vor. Schreibe ich diesen Wert in einer Variable, bekommt im Archiv der Wert den Zeitstempel zum Zeitpunkt der Speicherung.

Beispiel:
am 12.11. 24 wird um 00:01 der Verbrauchswert des Vortages (11.11.24) ermittelt und abgespeichert. Somit habe ich meinen Verbrauchswert vom 11.11.24 mit einem Zeitstempel vom 12.11.24 im Archiv stehen. Unschön.

Ich kann aber auch mit AC_AddLoggedValues den Zeitstempel korrigieren, muß dann aber nach jeder Änderung die Variable reaggregieren. Weiterhin wird der Variablenwert in der GUI nicht korrekt angezeigt, da ich ja nur die Werte im Archiv ändere. Auch unschön.

Wird denn beim Reaggregieren der komplette Datenbestand zur Neuberechnung herangezogen, oder nur ab dem Zeitstempel des hinzugefügten Wertes?

Wie geht ihr damit um?

Bin ich hier auf dem Holzweg und sehe die „elegante“ Lösung vor lauter Bäumen nicht?

Grüße Detlev.

Einfach am selben Tag um 23:59:50 speichern mache ich auch so die paar Sekunden fallen im Verbrauch nicht auf.

Ja, es werden alle aggregierten Werte der angegebenen Variable neu berechnet. Was aber nicht schlimm ist.

Wofür brauchst du die Verbrauchswerte? für einen Graphen?
Dafür bietet sich eine Zählervariable an, deren Aggregation auf Zähler steht.

Vielleicht schilderst du einmal, wie du die Verbrauchswerte ermittelst (aus einem Zähler?) und wie du sie präsentieren möchtest.

Vermutlich gibt es eine einfache Lösung.

Ja, die Verbrauchswerte sollen in einem Graphen dargestellt werden. Letztendlich will ich die Wirtschaftlichkeit der Photovoltaik-Anlage messen. Ich habe 3 Variablen, die als Zähler arbeiten:

  • Zähler Bezug vom Energielieferanten
  • Zähler Hausverbrauch
  • Zähler Netzeinspeisung Photovoltaik

Die Werte werden als Tageswerte jeweils ausgelesen, mit dem aktuellen Strompreis multipliziert und in neuen Variablen (Archivierung Standard) wieder gespeichert.

  • Kosten Energiebezug
  • Armortisation PV
  • Ertrag Einspeisung

So der Plan.

Angefangen habe ich mit dem Bezug vom Energielieferanten. Da ich mittlerweile das dritte System zum Auslesen des Stromzählers habe (erst Discovergy, dann Stromzähler mit Optokoppler und Tasmota, nun Tibber), will ich die Verbrauchswerte in einer neuen Variable summieren.

Ich lese aktuell den Stand des Stromzählers als Tageswert aus den Archivdaten der Variable meines Stromzähler und schreibe diese dann in eine neue Variable. Das ganze passiert um 00:01, der Wert wird mit dem Zeitstempel 0:0:0 des Vortages weggeschrieben und die Variable neu aggregiert.

Sorge hat mir das regelmässige Reaggregieren gemacht, aber wenn ich pro Tag nur einen Wert Wegschreiben, komme ich in 10 Jahren auf 3650 Werte, ich denke da sollte das Reaggrgieren schnell genug gehen (auf einem Raspberry) und es passiert ja auch nur einmal am Tag.

Unschön ist aber, dass die zugehörige Variable nicht auf den zuletzt ins Archiv eingetragenen Wert aktualisiert wird. Kann das eventuell manuell gesetzt werden, also Zeitstempel und Wert eine Variable setzen, ohne dass dass Archiv aktualisiert wird?

Unschön ist auch die Darstellung als Graph: Ich habe ja nur einen Wert pro Tag, damit ist die Stunden-Ansicht der Werte recht sinnfrei:

Hier wird für jede Stunde 11kWh dargestellt, richtig ist die Anzeige für den Tag:

Kann im Graph die Stunden- und Minutenanzeige gesperrt werden?
Alles in Allem kein Drama, aber so richtig rund ist meine Lösung noch nicht :slight_smile:
Grüße Detlev

So wie ich es sehe ist die Visualisierung dein Ziel.

Schau dir mal die Aggregationsart „Zähler“ an. Die liefert dir automatisch einen Graphen mit Balken.

Ich denke, das ist wonach zu suchst:


dann passen die Wert aber nicht mehr:

Montag: 5,02
Dienstag: 2,99
Mittwoch 9,32
Donnerstag: 11,83…

Sieht zwar schick aus, aber leider falsche Werte. Was funktioniert ist die Darstellung als Objekt-Typ Media - Diagramm, dort mit der Balken-Ansicht. Aber dann darf man die Stunden- und Minuten-Ansicht nicht wählen.
Ich werde wohl noch ein wenig mit IPS-View Herumprobieren, vielleicht bekomme ich dort was ich suche.
Danke Dir.

Ich meinte es anders :smile:
Das nächtliche Speichern kann ganz entfallen. Stattdessen setzt du die Aggregationsart bei deinen Zählern auf „Zähler“.

Aber dann bekomme ich doch die Multiplikation mit den Preisen nicht mehr hin

Auch die drei Variablen führst du als Zähler. Am Beispiel „Energiebezug“:

Immer wenn sich „Energiebezug“ ändert, addierst du zu "Kosten Energiebezug"den Wert ($_IPS[‚VALUE‘] - $_IPS[‚OLD_VALUE‘]) * akt.Preis

Dann hast du auch die „Kosten Energiebezug“ als Zähler und die graphische Darstellung der Kosten funktioniert über beliebige Zeiträume und Zeiteinheiten.

So ist es in IPS eigentlich vorgesehen.

Sorry ich glaube ich habe einen Knoten im Kopf.

An die Variable „Kosten Energiebezug“ hänge ich ein Ereignis, welches auf Änderung von „Energiebezug“ reagiert.
Aber wie setze ich dann den Wert der Variable „Kosten Energiebezug“.
Als Aktion gibt es „Wert zuweisen“ dort kann ich aber nur feste Werte oder Werte anderer Variablen einstellen. Über ein PHP-Script mit SetValue(,) ?

Für die Zähler-Aggregation müssen die zugrundeliegenden Daten auch stetig hochzählen, der Balken zeigt dann den täglichen Zuwachs an.

Du müsstest also zu den Werten (egal ob Energie oder Kosten) jeweils den täglichen Zuwachs addieren, dann funktioniert das auch.

Zur Berechnung der täglichen Kosten könnte man ggf. auch mit einer Hilfsvariablen arbeiten, die sich den Zählerstand zu Beginn des Tages merkt.

Ich würde das Ereignis an ein Skript hängen und das Skript ausführen lassen.
Im Skript ermittelst du den neuen Wert mit sinngemäß

alterWert = GetValue(idKostenEnergiebezug)
Zuwachs = ($_IPS[‚VALUE‘] - $_IPS[‚OLD_VALUE‘]) * akt.Preis
neuerWert = alterWert + Zuwachs 
SetValue(idKostenEnergiebezug, alterWert + Zuwachs)

Wenn es noch zu abstrakt ist, schaue ich gerne morgen nochmal drüber.

ich habe es bisher so ähnlich gelöst:
ein Ereignis, welches auf Änderungen von „Energiebezug“ reagiert und dort unter PHP-Script

SetValue($_IPS['TARGET'],($_IPS['VALUE']-$_IPS['OLDVALUE'])*0.3);

eingetragen. Der Kosten-Faktor 0.3 ist erstmal nur zum Testen, den hole ich dann später aus einer anderen Variable.
Danke euch für die Ideen, ich denke ich bin nun auf dem richtigen Weg.

Perfekt. So macht man es👍