Berechnungen mit Archivwerten sind nicht plausibel

Das vermute ich auch.
Vielleicht outet sich @Dr.Niels dazu noch.

Zur Not mache ich das mit GetLoggedValues…

Oder ich versuche die Werte mal mit round() zu runden.

Komisch ist aber trotzdem, dass es das Balkendiagramm im Webfront auch falsch anzeigt.
Deswegen meine Vermutung, dass hier irgendwas nicht ganz richtig ist.

Ist GetLoggedValues denn wirklich so problematisch vom Ressourcen Bedarf her, wenn du damit nur den einen Wert abrufst (Limit 1)?

Hatte es immer so verstanden dass man vor allem keine Unmengen an Einzelwerten abrufen und verarbeiten sollte, sondern für sowas eher die vorher aggregierten Werte nehmen sollte.

Das mit GetLoggedValues kann man schon so machen, ist auch in Ordnung, habe ich auch ein paar mal in Verwendung.

Jedoch, möchte ich gerne wissen ob ich hier mit dem AVG Wert was falsch verstehe, falsch mache oder es sogar ein Fehler ist.
Weil ich habe einige solcher Berechnungen.
Auch in der Firma haben wir die Dinge so am laufen.
D.h. ich müsste das alles ändern, weil die Werte nicht stimmen.
Obwohl laut Doku es so passen sollte wie ich es mache…

Ich möchte nur wissen wo die Differenzen herkommen…

1 „Gefällt mir“

Warum springt der Zählerstand in dem Screenshot denn zurück? Das finde ich ja etwas auffällig…

Oder ist das gar kein Zähler sondern Momentanverbrauch? Dann sollte die Einheit aber wohl kW sein oder?

Fängst du jeden Tag um 00:00 wieder bei null an zu zählen?

Das ist nur eine Variable zum testen, die habe ich extra angelegt.
Die fängt auch bei 0 an.
Das sollte aber egal sein.

Die richtige Variable fängt nicht bei 0 an, diese zählt seit dem 1. Tag mit PV Anlage hoch.

Bei beiden Variablen aber exakt das gleiche Verhalten.

Hier die Datensätze der Originalvariable.

erster Tageswert - letzter Wert heute = Eigenverbrauch heute
2067,98 -2066,56 = 1,42 kWh

Stimmt auch mit Stephans PV Kachel zusammen.

grafik

Mit dem Code bekomme ich viel mehr raus, also die Abweichung ist nicht gerade gering.

//test
$Eigenverbrauch = 40830;
 //Eigenverbrauch PV Anlage nach Schnellwahl
        $Eigenverbrauch_kWh_roh = AC_GetAggregatedValues($Archiv, $Eigenverbrauch, 0 ,strtotime("today 00:00:00"), strtotime("today 23:59:59"), 0);
        foreach($Eigenverbrauch_kWh_roh as $Gesamt) {
            $Eigenverbrauch_Avg[] = $Gesamt['Avg'];
        }
        //Array auf Inhalt prüfen 
        if (!empty($Eigenverbrauch_Avg)) 
        {
        $Eigenverbrauch_kWh = array_sum($Eigenverbrauch_Avg);
        }
var_dump($Eigenverbrauch_kWh);

var_dump($Eigenverbrauch_kWh_roh);

Ausgabe von var_dump

float(1.91162109375)
array(12) {
  [0]=>
  array(7) {
    ["Duration"]=>
    int(1926)
    ["TimeStamp"]=>
    int(1714986000)
    ["Avg"]=>
    float(0.270751953125)
    ["MinTime"]=>
    int(1714986120)
    ["Min"]=>
    float(0.000244140625)
    ["MaxTime"]=>
    int(1714987140)
    ["Max"]=>
    float(0.0400390625)
  }
  [1]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714982400)
    ["Avg"]=>
    float(0.42138671875)
    ["MinTime"]=>
    int(1714982940)
    ["Min"]=>
    float(0.000244140625)
    ["MaxTime"]=>
    int(1714985700)
    ["Max"]=>
    float(0.020263671875)
  }
  [2]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714978800)
    ["Avg"]=>
    float(0.373046875)
    ["MinTime"]=>
    int(1714981260)
    ["Min"]=>
    float(0.000244140625)
    ["MaxTime"]=>
    int(1714980720)
    ["Max"]=>
    float(0.020263671875)
  }
  [3]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714975200)
    ["Avg"]=>
    float(0.31396484375)
    ["MinTime"]=>
    int(1714975440)
    ["Min"]=>
    float(0.000244140625)
    ["MaxTime"]=>
    int(1714978500)
    ["Max"]=>
    float(0.029052734375)
  }
  [4]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714971600)
    ["Avg"]=>
    float(0.312744140625)
    ["MinTime"]=>
    int(1714972140)
    ["Min"]=>
    float(0.000244140625)
    ["MaxTime"]=>
    int(1714972740)
    ["Max"]=>
    float(0.02001953125)
  }
  [5]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714968000)
    ["Avg"]=>
    float(0.2197265625)
    ["MinTime"]=>
    int(1714969740)
    ["Min"]=>
    float(0.00927734375)
    ["MaxTime"]=>
    int(1714969920)
    ["Max"]=>
    float(0.0107421875)
  }
  [6]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714964400)
    ["Avg"]=>
    float(0)
    ["MinTime"]=>
    int(1714967945)
    ["Min"]=>
    float(0)
    ["MaxTime"]=>
    int(1714964400)
    ["Max"]=>
    float(0)
  }
  [7]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714960800)
    ["Avg"]=>
    float(0)
    ["MinTime"]=>
    int(1714964344)
    ["Min"]=>
    float(0)
    ["MaxTime"]=>
    int(1714960800)
    ["Max"]=>
    float(0)
  }
  [8]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714957200)
    ["Avg"]=>
    float(0)
    ["MinTime"]=>
    int(1714960744)
    ["Min"]=>
    float(0)
    ["MaxTime"]=>
    int(1714957200)
    ["Max"]=>
    float(0)
  }
  [9]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714953600)
    ["Avg"]=>
    float(0)
    ["MinTime"]=>
    int(1714957144)
    ["Min"]=>
    float(0)
    ["MaxTime"]=>
    int(1714953600)
    ["Max"]=>
    float(0)
  }
  [10]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714950000)
    ["Avg"]=>
    float(0)
    ["MinTime"]=>
    int(1714953544)
    ["Min"]=>
    float(0)
    ["MaxTime"]=>
    int(1714950000)
    ["Max"]=>
    float(0)
  }
  [11]=>
  array(7) {
    ["Duration"]=>
    int(3600)
    ["TimeStamp"]=>
    int(1714946400)
    ["Avg"]=>
    float(0)
    ["MinTime"]=>
    int(1714949944)
    ["Min"]=>
    float(0)
    ["MaxTime"]=>
    int(1714946400)
    ["Max"]=>
    float(0)
  }
}

Auch im Webfront wird zuviel angezeigt…

Ich hoffe ihr versteht jetzt was ich meine?
Dann stimmt doch die Doku zu „Avg“ nicht und die Balkendiagramme zeigen auch zu viel an…

Ich denke hier ist der Hund begraben.

grafik

Es wird nicht immer sauber hochgezählt.
Also kommen da zuviele positive Deltas zusammen und der Wert wird zu groß.

Muss mal schauen, warum das Verhalten überhaupt auftritt und ob ich das verhindern kann.

Ich denke wir brauchen zusätzlich zu „keine null und negative Werte“ noch die Option nur Werte gleich/größer wie vorheriger Wert…

Da stimme ich Stephan zu.

Das Problem bei ist folgendes.
Diese Variable Eigenverbrauch wird ja aus zwei Variablen berechnet und anschließend neu beschrieben.
Jetzt kommt die erzeugte Wirkarbeit aus meinen Wechselrichter über Modbus zur Wago SPS und dann erst über Modbus zu Symcon.
Die gelieferte Wirkenergie kommt über Modbus seriell an die Wago SPS und wird über einen komplett unterschiedlichen Registerblock dann wieder von IPS abgefragt und da enstehen die Inkonsistenzen.

Mal schauen wie ich das löse…

glaube das einfachste ist es wenn du auf das Update vom Entkoppler Modul vom Dennis wartest. Er wollte da ja noch ein paar Filterfunktionen einbauen. Damit dürfte sich das Problem dann erledigt haben.

Gruß Stephan

2 „Gefällt mir“

Ja davon habe ich schon flüchtig gelesen.
Ich habe mir jetzt eine Vergleichsfunktion eingebaut, somit werden nur noch größere Werte in die Zählervars geschrieben.

Geil wäre es wenn das mit dem Modul auch Werte in der Vergangenheit rauslöscht…

Vom Kai gibt’s ein Modul Archiv Anomalien oder so ähnlich. Das sucht komische Abweichungen und bietet die Möglichkeit diese zu löschen. Keine Ahnung ob das hier anwendbar ist. Aber ein Versuch kann nicht schaden.

Hier der link

1 „Gefällt mir“

Kannst ja schon bei der Berechnung herausfiltern, dass der neue Wert nicht kleiner sein darf als der alte. Also nicht erst hinterher wenn du mit den Zählerwerten weiter rechnest sondern wenn du den Zählerwert selbst berechnest.

Ja genau. Bevor der neue Wert auf die Variable geschrieben wird, überprüfe ich zuerst ob er größer ist. Dann erst SetValue ausführen.

Seit heute Morgen stimmen die Werte auch…

1 „Gefällt mir“

Das was du da siehst, sind aber die Rohdaten und die werden in der GUI auch gerundet/abgeschnitten.

Ich glaube nicht, dass die Werte gleich sind. Habe das bei mir ganz oft und keine Probleme.

Hast du dir mal die CSV-Datei mit den Rohdaten angesehen, ob die Werte wirklich identisch sind? Das Archiv dürfte aufeinanderfolgende identische Werte normal gar nicht loggen.

Hi slummi,

Problem ist behoben.
Es waren zwischendurch in der Zählervariable wieder kleinere Werte als zuvor.
Somit wird dann durch den nächste grösseren Wert wieder aufsummiert und der Zählerstand ist am Ende des Tages höher als er sein sollte.

Identische Werte machen keine Probleme, das stimmt.

Ich habe das Thema jetzt erst nach meinem langen Wochenende gesehen. Aber ihr habt das ja schon gelöst, perfekt.

Trotzdem fände ich eine Filterfunktion das nur größere werte ins Archiv geschrieben werden recht praktisch :wink:

Viel Grüße
Stephan

2 „Gefällt mir“