Visualisierung der PV-Anlage (RRD)

Hallo,

ich möchte gerne meine Photovoltaikanlage visualisieren.
Ich habe mir einen Gerät gebastelt, das mir die Impulse des Zählers zählt, und diese dann alle 5 Minuten auf den EIB-Bus sendet. IPS empfängt die Impulse und legt sie in eine Variable ab. Somit kann ich mir den aktuelle Zählerstand und noch weitere Infos errechnen.

Nun möchte ich gerne zusätzlich noch so schöne Grafiken erstellen, wie sie so manche ein „teuren“ Datenlogger macht.

Im Anhang ein paar Grafiken, die ich gerne so ähnlich darstellen möchte.
Das erste Bild zeigt eine Tagesübersicht, das zweite vom aktuelle Monat, das dritte vom aktuellen Jahr und das letzte über alle Jahre.

So, ist es überhaut möglich mit RRD solche Grafiken zu erstellen und zweitens, ist es möglich die Daten in der DB so zu speichern damit diese auch später wieder angezeigt werden können.

kann mir jemand erklären wie ich die DB konfigurieren muss damit die Auswertungen funktionieren.

Danke

Gruß Alex

Hallo Alex,

mein bevorzugtes Logging-Tool sind die DUG-Tools. Auch wenn darin noch ein kleiner Anzeigefehler bzgl. der unteren Legende vorhanden ist finde ich es derzeit eines der besten Tools zum Anzeigen und generieren von Graphen.

Kleineres Manko ist noch das derzeit in einer SQlite2-DB gespeichert wird, MySQL-Anbindung ist aber in Arbeit

Anbei ein paar meiner Graphen in Bezug auf die PV-Anlage, loggen tu ich noch viel mehr.

Laß Dich nicht von den beiden Außreisern bei der monatlichen Ansicht irretieren, da hatte ich ein Problem mit meinem Skript der PV-Anlage da ich noch keinen S0-Counter nutzte.

Merci für die Antwort,

das sieht ja recht gut aus. Muss mir mal die DUG-Tools ansehen. Danke für den Tip.

Gruß Alex

Hallo wgreipl,

ich noch mal eine Frage zu den DUG-Tool.
Habe mir mal das ganze Zeugs installiert und auch mal ausprobiert. Jedoch komme ich noch nicht ganz klar mit welchen Daten Du die DB füllst.

Ich habe ja nur eine Variable, in der immer der absolute Zählerstand der Photovolatikanlage drinsteht (alle 5 Minuten).

Hast Du dir die Werte für die verschiedenen Graphen vorher im IPS schon zurechtberechnet oder genügt es auch nur eine Variable zu speichern.

Vielleicht kannst Du mir mal deine Konfiguration zukommen lassen. Vielleich verstehe ich es dann besser.

Was ich auf alle Fälle machen muss ist dass ich einen neue Variable berechnen lassen muss, die mir immer den Momentanertrag innerhalb der 5 Minuten angibt, oder ? Diese Variable ist dann schon mal die Grundlage für die Tagesansicht.

Gruß Alex

Hallo Alex,

ganau so ist es. IPS errechnet sämtliche Werte.

Derzeit habe ich noch 2 Lösungen parat um die Werte der PV-Anlage zu ermitteln.

[ol]
[li]Die Software meiner SMA-Wechselrichter teilt mir die aktuelle Leistung und den gesamten Ertrag mit. Aus dem Ertrag (Vortag und Aktuell) errechne ich mir den Tagesertrag / Monatsertrag / Jahresertrag.[/li][li]Die endgültige Lösung ist gerade in der Entwicklung. Ich habe eigene Stromzähler mit S0-Ausgang die ich über ein 1-Wire-S0-Counter (mein Dank an andrge) in IPS empfange. Aus diesen Counterwerten errechne ich mir die aktuelle Leistung, den Tages- / Wochen- /Monatsertrag.[/li][/ol]Ich kann Dir zwar sämtliche Skripte gerne zukommen lassen aber ob Dir das weiterhilft da bin ich mir nicht sicher.

Welche Wechselrichter hast Du denn oder besser gesagt wie bekommst Du die Daten nach IPS?

Anbei einmal die Screenshots (1 und 2 ist die SMA-Lösung, 3 und 4 sind die S0-Counter) der Variablen meiner beiden Lösungen.

Hallo Werner,

also kurz mal zu meiner Anlage. Ich habe 4x SMA 5000TL-20, jedoch ohne Datenlogger. An die Ertragswerte komme ich, indem ich die rote Markierung meines Einspeisezähler von der EON mit einer Elektronik erkenne und die Umdrehungen mitzähle. Diesen Zählerwert schicke ich dann mittels dem EIB (KNX) zum IPS. Dort aktualisiert sich dann alle 5 Minuten eine Integervariable, in der dann der Zählerstand drinsteht. Teilt man diesen Wert dann noch durch 75 so erhalte ich den aktuell ablesbaren Zählerstand in kWh.
Mittels ein paar Berechnungen erhalte ich dann noch weiter Ergebnisse.
Unter anderem die Wattanzahl, die in den letzten 5 Minuten erzeugt wurden. Diesen Wert schreibe ich alle 5 Minuten in die Datenbank.
Genügt es jetzt anhand der einen Variable solche Grafiken darzustellen?
Wenn ja wie hast Du dann deine Graphen konfiguriert?
Oder berechnest Du z.B. den Tagesertrag im IPS und speicherst den dann einmal pro Tag in eine weitere DB ???

Gruß Alex

Hallo Alex,

OK. Ist ja auch eine Art S0-Counter. Genau auf dieser Basis läuft die neue Version meine Visualisierung und zwar genau seit gestern.

Einziger Unterschied, ich arbeit halt mit S0-Countern die mir je kW/h 2000Impulse liefert. Aus diesen Impulsen errechne ich mir zu jedem Abfragezyklus (bei mir 2 Minuten) die aktuelle Leistung, den Tages- sowie den Monatsertrag und schreibe ihn mir mit den DUG-Tools (bei Aktualisierung) in die DB.

Nach dem gleich Schema kannst Du mit dem Zählerrad arbeiten. Wieviel Umdrehung per kW/h ist den Counterwert.

Mit dem Counterwert sowie einigen Hilfsvariablen zur Berechnung und zur endgültigen Ausgabe hast Du dann alle Daten zur Visualisierung in IPS und somit in Webfront.

Habe Dir mal ein Skript anghängt das ich freundlicherweise von andrge zur Verfügung gestellt bekommen habe. Nach ein wenig Einarbeitung wirst Du sicherlich damit klarkommen (ist bei fremden Skripten halt so). Ist im Prinzip ein einfacher Dreisatz.

<?
//PV-Ertrag
//Digitaler Stomzähler 2000 Impulse = 1KW
$Zaehlerfaktor = 0.0005 ; //Digitaler Stomzähler 800 Impulse = 1KW, kleinste Einheit = 0,5W
$Auslesefaktor = 30;       // 1min = 60, 2min = 30, 5min = 12, 10min = 6
//Aktuelle Leistung
//**********************************************************************
$counter_neu = GetValueInteger(56123 /*[Keller\Serverraum\Zähler PV 1 und 2\Zähler 1]*/);     // aktueller Zaehlerstand (Zähler 2) einlesen
$counter_alt = GetValueInteger(45275 /*[Keller\Serverraum\Zähler PV 1 und 2\Zähler 1 Zwischen]*/);  //alter Zählerwert
$delta = $counter_neu - $counter_alt;     //alter Wert von neuen Wert abziehen
SetValueInteger(45275 /*[Keller\Serverraum\Zähler PV 1 und 2\Zähler 1 Zwischen]*/ , $counter_neu );    //aktueller Zählerwert ablegen
SetValueInteger(51940 /*[Keller\Serverraum\Zähler PV 1 und 2\Zähler 1 Diff]*/, $delta );          //Ausgabe Differenz
 
//Berechung Verbrauch
//**********************************************************************
$deltaKWh = ($delta * $Zaehlerfaktor) * $Auslesefaktor  ;     // Verbrauch Impulse = 1KW * Faktor der Auslesung
if ($deltaKWh < 10) //Wenn die aktuelle Leistung kleiner als 10KW, dann Ausgabe Freigabe für Anzeige
{
 $round_deltaKWh = round ($deltaKWh, 3);   // auf 2 Stellen runden
 SetValueFloat(11943 /*[Status\PV-Anlage\Anlage 1\Aktueller Ertrag PV 1]*/ , $round_deltaKWh);   // Ausgabe Stromeinspeisung pro Std.
}
//Tagesleistung
//**********************************************************************
//Aufaddieren Summe Tag, Integer
//****************************************************************
$Solar_Tagesleistung = GetValueInteger(44039 /*[Status\PV-Anlage\Anlage 1\Zähler Tagesleistung PV 1]*/  );  //Solar Tagesleistung Summe einlesen
$Solar_Tagesleistung_neu = $Solar_Tagesleistung + $delta;  //neue Tagesleistung berechnen
SetValueInteger(44039 /*[Status\PV-Anlage\Anlage 1\Zähler Tagesleistung PV 1]*/  , $Solar_Tagesleistung_neu);
//Monatsleistung
//**********************************************************************
//Aufaddieren Summe Monat, Integer
//****************************************************************
$Solarstrom_Mon_Summe = GetValueInteger(30547 /*[Status\PV-Anlage\Anlage 1\Zähler Monatsleistung PV 1]*/   );
$Solarstrom_Mon_Summe_neu = $Solarstrom_Mon_Summe + $delta ;
SetValueInteger(30547 /*[Status\PV-Anlage\Anlage 1\Zähler Monatsleistung PV 1]*/   , $Solarstrom_Mon_Summe_neu);  //
 
if ($deltaKWh < 50.0) //Wenn die aktuelle Leistung kleiner als 50KW, Werte zum Tages- und Monatsertrag dazu zählen
{
 //Anzeige Tagesleistung
 //*************************************************************
 $Solar_Tagesleistung_KW = $Solar_Tagesleistung_neu * $Zaehlerfaktor;  
 $Round_Solar_Tagesleistung = round ($Solar_Tagesleistung_KW, 2);     // auf 2 Stellen runden
 SetValueFloat (50871 /*[Status\PV-Anlage\Anlage 1\Tagesertrag PV 1 kW/h]*/   , $Round_Solar_Tagesleistung);
 
 //Anzeige Monatswerte
 //*************************************************************
 $Solarstrom_Mon_Summe_neu_1 = $Solarstrom_Mon_Summe_neu * $Zaehlerfaktor;
 $Round_Solarstrom_Mon_Summe_neu_1 = round ($Solarstrom_Mon_Summe_neu_1, 2);     // auf 2 Stellen runden
 SetValueFloat ( 39624 /*[Status\PV-Anlage\Anlage 1\Monatsertrag PV 1 kW/h]*/  , $Round_Solarstrom_Mon_Summe_neu_1);
}
else
{
}
?>

Mit Sicherheit gibt es auch noch einen einfacheren Weg aber es funktioniert.

Zu den Graphen:

Der PV_Leistung ist ja nur eine einfache Liniengrafik

Der PV_Ertrag ist als Balkendiagramm mit einem Intervall von 24 Stunden und dem Max-Wert