Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tageswerte loggen #4

Closed
cfis72 opened this issue Nov 10, 2019 · 10 comments
Closed

Tageswerte loggen #4

cfis72 opened this issue Nov 10, 2019 · 10 comments
Labels
feature request Request for a missing feature.

Comments

@cfis72
Copy link

cfis72 commented Nov 10, 2019

Per Modbus sind nur die Momentanwerte verfügbar.
Das Portal, in dem die dort angezeigten Werte berechnet werden, ist nicht per API erreichbar.
Aktuell mache ich das mit einem Skript das bei jeder Änderung der Momentanwerte den Tageswert seit der letzten Aktualisierung der Variable um den entsprechenden Wert erhöht.
Täglich um 23:59 werden die Werte per Skript weggespeichert und die Werte wieder auf 0 gesetzt.
Die errechneten Werten stimmen ziemlich genau mit den Werten aus dem E3DC Portal überein.

Das Ziel ist es Auswertungen wie im E3DC Portal zu machen. So sieht das bei mir momentan aus:

image

Wäre cool wenn das Modul das machen könnte.

viele Grüße,
Christian

@Brovning Brovning added the feature request Request for a missing feature. label Nov 10, 2019
@Brovning
Copy link
Owner

Hallo,
das Skript, welches im IP-Symcon Forum gepostet wurde kenne ich.
Hierzu habe ich mir auch schon Gedanken.
Wenn meine Idee klappt, hätte ich hier eine bessere Lösung im Peto, welche bereits auf meiner ToDo-Liste steht.
So etwas werde ich definitiv zeitnah noch umsetzen.

@Brovning
Copy link
Owner

Brovning commented Dec 22, 2019

Hallo Christian,

ich bin gerade dabei die verschiedenen Wh/kWh Werte zu berechnen, daher hätte ich noch Fragen an dich.

Täglich um 23:59 werden die Werte per Skript weggespeichert und die Werte wieder auf 0 gesetzt.

Wohin speicherst du die Tageswerte weg und was machst du weiter mit diesen?
Loggst du die einzelnen Tageswerte?
Was möchtest du visualisieren bzw. welche Werte visualisierst du aktuell?
In welchem Intervall liest du den Modbus aus?
Welche Werte loggst du?

Gruß

Jürgen

@cfis72
Copy link
Author

cfis72 commented Dec 22, 2019

Hallo Jürgen,

"Wohin speicherst du die Tageswerte weg und was machst du weiter mit diesen?"
Die Werte werden in andere Variablen gespeichert, die wiederum geloggt werden.
Das Ziel war / ist die Tageswerte in Balkendiagrammen, ähnlich im E3DC Portal darzustellen, um z.B. monatliche und jährliche Auswertungen zu machen.

"In welchem Intervall liest du den Modbus aus?"
Ich logge einmal pro Sekunde. Performanceprobleme gibt es damit nicht.

Für mein Chart logge ich zusätzlich noch Minutenwerte, da die Sekundenwerte zuviel für die Chartdarstellung waren.

So sieht die Chartdarstellung zur Zeit aus (ist noch nicht fertig) :
image

Grüße,
Christian

@Brovning
Copy link
Owner

Das heißt du speicherst dir bspw. um 23:59 Uhr die aktuellen Tageswerte in eine separate Variable, die gelogged wird und die stetig berechneten Tageswerte werden nicht gelogged?
Machst du das gleiche je Monat und Jahr?

Woher erhältst du die Solarprognose?

@cfis72
Copy link
Author

cfis72 commented Dec 22, 2019

Das heißt du speicherst dir bspw. um 23:59 Uhr die aktuellen Tageswerte in eine separate Variable, die gelogged wird und die stetig berechneten Tageswerte werden nicht gelogged?

Ja, genau. die stetig berechneten Tageswerte sind ja nur ein Zähler der1) die Tageswerte berechnet und 2) eine aktuelle Anzeige in der Visualisierung liefert.

Machst du das gleiche je Monat und Jahr?

Nur pro Tag, aber es würde Sinn machen pro Monat und Jahr auch separat zu loggen.

Woher erhältst du die Solarprognose?

Die Solarprognose kommt von einem Skript das die API von http://forecast.solar benutzt, also nicht von E3DC.
Das war die einzigste kostenlose Möglichkeiten an eine Solarprognose zu kommen.

Wenn du die Solarprognose ins Modul übernehmen möchtest, kann ich gerne das Skript zur Verfügung stellen. Die API ist aber ziemlich simpel, es wird ein JSON zurückgeliefert.

@Brovning
Copy link
Owner

Stimmt die Vorhersage von Forecast.Solar bei dir halbwegs?
Bei mir passt das ja überhaupt nicht.
2019-12-22 | 20597 --> Heute hatte ich eine Produktion von 7,5 kWh und nicht von 20,5 kWh
2019-12-23 | 12577

Oder muss man die API morgens aufrufen?
Mal sehen, ob die Vorhersage für Morgen besser hinkommt.

@Brovning
Copy link
Owner

Brovning commented Dec 26, 2019

Hallo Christian,

ich bin jetzt so gut wie fertig.
Könntest du bitte das nachfolgende Skript mit deiner PV-Variable laufen lassen, welche du einmal pro Sekunde loggen lässt und mir die Ausgabe der Skriptlaufzeit hier posten?
Du müsstest noch in den ersten beiden Zeilen deine Archiv-ID und die Variablen-ID angeben:
`$ArchiveID = --ARCHIV-ID--;
$ID = --VARIABLEN-ID--;

$startzeit = microtime(true); // Startzeit
$MStartDate = mktime(0,0,0, date("m"), date("j")-365, date("Y"));
$MEndDate = mktime(23,59,59, date("m"), date("j")-1, date("Y"));
$ah_ID = $ArchiveID;
$p_ts = $MStartDate;
$p_te = $MEndDate;
$i_max = (int)round(($p_te - $p_ts)/(606024), 0);
for($i=0; $i<$i_max; $i++)
{
$ts = mktime(0,0,0,date("m", $p_ts),date("d", $p_ts) + $i,date("Y", $p_ts));
$te = mktime(23,59,59,date("m", $p_ts),date("d", $p_ts) + $i,date("Y", $p_ts));
$Data = AC_GetLoggedValues($ah_ID,$ID,$ts,$te,5000);

foreach($Data as $key=>$v)
{
    $Data[$key]['TimeStamp_humanDate']      = date("d.m.Y H:i:s", $v['TimeStamp']);
}
$Raw = array_reverse($Data);

$RawCount = count($Raw)-1;
foreach($Raw as $key=>$v)
{
    if(0 == $key)
    {
        $Count = 0;
        $i_Flag = date("i", $v['TimeStamp']);
        $i_TimeStart = $v['TimeStamp']+3;
        $i_TimeEnd = $v['TimeStamp'];
    }

    if(0 < $key)
    {
        if($i_Flag == date("i", $v['TimeStamp']))
        {
            $Count++;
            $i_TimeEnd = $v['TimeStamp'];
        }
        else
        {
            $Count            = 0;
            $i_Flag				= date("i", $v['TimeStamp']);
            $i_TimeStart             = $v['TimeStamp']+3;
            $i_TimeEnd             = $v['TimeStamp'];
        }

        if(($Count > 0) && ($RawCount == $key))
        {
            $i_TimeEnd             = $v['TimeStamp'];
        }
    }
}

}
$stopzeit = microtime(true); // Stopzeit
$laufzeit = ($stopzeit-$startzeit)*1000; // Berechnung
$laufzeit = substr($laufzeit, 0, 5); // Auf 5 Stellen begrenzen
echo "Scriptlaufzeit: ".$laufzeit." Millisekunden"; // Ausgabe`

@cfis72
Copy link
Author

cfis72 commented Dec 27, 2019

Hallo,

hier das Ergebnis des Skripts:
Scriptlaufzeit: 1,598 Millisekunden
Die Werte schwanken zwischen 1,5 und 2,8 Millisekunden.

Seit der Umstellung auf dein Modul wird das Skript zum Berechnen der Tageswerte nur bei Änderungen der PV-Variable ausgeführt, nicht mehr einmal pro Sekunde. Da sich der Wert (tagsüber) fast jede Sekunde ändert macht das aber wahrscheinlich kein Unterschied?

@Brovning
Copy link
Owner

Hallo Christian,

vielen Dank!

Ich habe bei mir viel herum probiert mit dem Auslese-Intervall.
Meiner Meinung nach ist die Genauigkeit mit einem 10 Sekunden Auslese-Intervall ausreichend.

@cfis72
Copy link
Author

cfis72 commented Dec 28, 2019

Bei wechselhaften Wetter wäre ich mir nicht sicher ob die Genauigkeit bei 10 Sekunden Auslese-Intervall noch ausreichend ist. Bei normalem Wetter mit gleichbleibendem Solarertrag schon.
Die Solarprognose stimmt bei mir meistens auch nicht.

Brovning added a commit that referenced this issue Apr 4, 2020
#4 Tageswerte loggen:
- Tageswerte berechnen mit Auswahl zwischen Wh und kWh
- Tageswerte auf Wunsch loggen
@Brovning Brovning closed this as completed Apr 4, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Request for a missing feature.
Projects
None yet
Development

No branches or pull requests

2 participants