=========================================================
[10] PV Anlage
=========================================================
Vorab ..
Anfang Februar wurde unsere PV Anlage in Betrieb genommen. Hier entsteht die Dokumentation zu deren Visualisierung, die auf einem Fronius Wechselrichter (GEN24) mit zugehörigem Smartmeter (TS 65A-3) und einer BYD Batterie mit 7,7KWh basiert.
Anfänglich war's sehr zeitaufwendig herauszufinden, was die einzelnen Datenpunkte eigentlich beinhalten und anhand dessen eine leidlich korrekte und stimmige Darstellung der Daten zu erstellen. Lassen die Angaben zu den Leistungsflüssen kaum Wünsche offen, so blieben bei den Energiewerten aufgrund unzureichender Angaben anfangs vielfach Unstimmigkeiten.
Datenpunkte für Leistung und Energie versus Anzeigen in solarweb
Warum überhaupt eine eigene Visualisierung, schließlich gibt's doch von Fronius bereits gute Software (Solarweb, Fronius-App)? Die Antwort ist einfach: Ich wollte (absolut) realistische Ergebnisse. Als Lohn für meine Bemühungen, darf ich nun mit 10 - 20% weniger Ertrag auskommen., nur die Einspeisewerte stimmen mit den Angaben von Fronius bis auf die Kilowattstunde überein.
Verwenden Solarweb und die Fronius App nach meinen Beobachtungen die von den Solarmodulen erzeugte DC-seitigen Energien, so fließen in der hier vorgestellten Lösung ausschließlich die AC-seitigen ins Haus und Netz eingespeisten Leistungen bzw. Energiewerte ein. Schließlich tragen nur diese zum Ertrag bei - d.h.: Bestimmen, was man unmittelbar mehr oder weniger am Jahresende im Portemonnaie hat. Die Software von Fronius berücksichtigt im Prinzip offenbar keinerlei Verluste in Batterie und bei der DC/AC-Umwandlung.
Nach langen und intensiven Beobachtungen gehe ich von folgender Interpretation der Datenpunkte aus:
- TOTAL_ENERGY enthält die tatsächliche AC-seitige, vom GEN24 erzeugte (Wechselstrom)Energie, die aus Batterie und PV-Modulen bereitgestellt werden. Jegliche Verluste sind an dieser Stelle bereits berücksichtigt. Diese Energie fließt ins Haus oder wird ins Netz eingespeist.
- EnergyReal_WAC_Sum_Produced erfasst den Anteil von TOTAL_ENERGY, der ins Netz des Versorgers eingespeist wird.
Grenzen der hier vorgestellten Lösung
Der Vorteil, dass hierbei die Wandlungsverluste bereits berücksichtigt sind, ist mit Vorsicht zu genießen. Wie die Erfahrung zeigt, kann es vorkommen, dass die Batterie durch den Wechselrichter aus dem Netz nachgeladen wird, wenn der Wert für SoC unter den minimalen Sollwert fällt. Diese Energie, die aus dem Netz stammt, wird dann fälschlicherweise zum Wert in TOTAL_ENERGY hinzugezählt.
Darüber hinaus kommt es durch die Vermischung von Solarenergie aus Modulen und Batterie vor, dass die am Vortag in die Batterie gespeicherte Energie, die aber erst in der Nacht verbraucht wird, dem falschen Tag zugeordnet wird. Eine auf den Tag genaue Zuordnung ist somit nicht möglich. Wird jedoch die Batterie am Tag stets voll geladen, sollte sich das Ganze über die Tagesgrenzen hinweg jedoch ausgleichen.
Adapter in ioBroker
Wer lieber das Ganze über Modbus/TCP steuern möchte, findet hier die TSV-Datei zum direkten Importieren in den Modbus-Adapter von ioBroker: GEN24&Smartmeter
Es stehen gleich zwei Adapter für Fronius Geräte zur Verfügung. Basiert der erste auf den Daten vom Fronius Server (Cloud), so greift der zweite ausschließlich auf die lokal verfügbaren Daten zu. Ich habe mich zunächst für den zweiten Adapter entschieden. Wenn ich mich tiefer in die Materie eingefunden habe, werde ich wohl auch Zugänge über Modbus verwenden.
Elemente der Visualisierung
- Die Messinstrumente am rechten Rand zeigen die Werte für Spannung U, Stromstärke I und Leistung P an den beiden MPPT Eingängen des Fronius GEN24, wobei natürlich U x I = P gilt. An MPPT1, der 20A Eingangsstrom akzeptiert, wird ein Strang aus parallel geschalteten Modulen von Meyer Burger mit 4,62KWp angeschlossen. Mit dem zweiten MPPT ist eine sog. Solarterasse mit nur 1,96KWp verbunden. Diese Angaben gilt es bei den Konfigurationen der Messinstrumente zu berücksichtigen.
- Im Widget für die Solarmodule wird die Gesamtleistung P_PV = U1 x I1 + U2 x I2 angezeigt. Liefern die Module Energie, so wird dieses Widget grün (aktiv) ansonsten inaktiv (schwarz) dargestellt.
- Das Widget des Wechselrichters kennt drei Anzeigenmodi: aktiv/grün (Normalbetrieb), inaktiv/schwarz (Bereitschaft/standby) und aktiv (grün) mit blinkendem Symbol (P_AC < 0). Der letzte Zustand tritt ein, wenn die Leistung von den PV-Modulen geringer ist als die Verlustleistung des Wechselrichters.
- Das Widget für den Netzversorger: grün = Einspeisung, rot = Netzbezug
- Batterie-Widget: rot = Batterie wird entladen, grün = Batterie wird geladen
- die Orientierungen der Pfeile passen sich der Flussrichtung der Leistungen an.
- Das Diagramm spiegelt die PV-Leistung im Verlaufe des Tages wider.
Die vier Diagramme in der zweiten Abbildung zeigen alle möglichen Energieverhältnisse.
- Bezug: Stellt die aus dem Netz des Versorgers bezogene Energie dar, die zum geltenden Tarif bezahlt werden muss.
- Verkauf: Die ins Netz des Versorgers abgegebene Energie, für die man eine Vergütung erhält.
- Solar: Die von der Anlage aus Modulen und Batterie erzeugte Energie nach der Wandlung in Wechselstrom. Hierbei sind ggf. Verluste in Batterie und AC/DC-Umwandlung berücksichtigt. Diese Energien beinhalten auch die ins Netz eingespeiste Energie (siehe blaues Diagramm).
- Konsum: Solar [grün] abzüglich Verkauf [blau] ergibt die ins Haus eingespeiste, insgesamt verbrauchte Energie.
Die dritte Abbildung dient zur Erfassung der Kosten und Erträge für unsere im Haushalt benötigten Energien.
- Ertrag: die insgesamt im Haushalt verbrauchte Energie (Bezug+Verkauf)
- Autarkie: Quotient aus (selbst genutzte Solarenergie) / (insgesamt verbrauchte Energie)
- Eigenquote: (selbst genutzte Solarenergie) / (insgesamt erzeugte Solarenergie)
Tarifangaben (Bezug, Verkauf) und die errechneten Werte beziehen sich auf das laufende Kalenderjahr (s. unten!).
Datenpunkte des GEN24
Hierbei den Überblick zu gewinnen, ist eine echte Herausforderung, zumal Fronius seinerseits kräftig zu Verwirrung beiträgt. Einige scheinen doppelt vorhanden zu sein, während andere gar nicht gepflegt werden. Sind die Leistungsangaben noch leidlich umfassend, so sieht's bei den Energiewerten regelrecht traurig aus.
Nachfolgend wird die Sammlung dieser Datenpunkte beschrieben. Es werden nur jene näher betrachtet, die auch für die Visualisierung verwendet werden. Die oberste Ebene umfasst ..
.. wobei lediglich aus den Ordnern inverter, inverterinfo, meter und powerflow Datenpunkte verwendet werden.
Aus dem Ordner fronius.0.inverter.1 werden folgende Datenpunkte verwendet ..
- UDC, IDC : Spannung und Stromstärke am MPPT1 Eingang
- UDC_2, IDC_2 : Spannung und Stromstärke am MPPT2 Eingang
- PAC : vom GEN24 AC-seitig erzeugte Leistung. Als Energiequellen dienen hierbei die DC-seitig verfügbaren Energien aus Batterie und PV-Modulen.
- TOTAL_ENERGY : AC-seitige aus den PV-Modulen und/oder Batterie erzeugte Gesamtenergie. D.h.: Dieser Datenpunkt kann nicht dazu verwendet werden, die von den Solarmodulen erzeugte Energie direkt zu erfassen, denn die in die Batterie fließende Energie wird nicht in diesem Datenpunkt mitgezählt. Die in der Batterie gespeichrte Energie geht erst in die Zählung ein, wenn sie wieder aus dieser entnommen wird.
Aus UDC, IDC, UDC_2 und IDC_2 werden die Leistungswerte durch Produktbildung aus Spannungen und Stromstärke an den Eingängen MPPT1 und MPPT2 ermittelt. UDC_3 und IDC_3 enthalten stets bloß null, werden also nicht verwendet.
Da die Datenpunkte YEAR_ENERY und DAY_ENERGY nicht vom GEN24 gepflegt werden, muss man diese Energien aus TOTAL_ENERGY errechnen. Dazu später mehr.
Aus dem Ordner Inverterinfo.1 ..
.. wird lediglich der Datenpunkt InverterCode, der den Arbeitszustand des Wechselrichters widerspiegelt (7 = running, 14 = sleeping, .. siehe auch InverterState), verwendet. Dieser Datenpunkt regelt die Darstellung des Icons des Wechselrichters.
Aus dem Ordner fronius.0.meter.1 ..
.. werden die folgenden Werte benötigt ..
- fronius.0.meter.1.EnergyReal_WAC_Sum_Consumed = aus dem Netz bezogene Energie
- fronius.0.meter.1.EnergyReal_WAC_Sum_Produced = ins Netz eingespeiste Energie
- fronius.0.meter.1.PowerReal_P_Sum = aus dem Netz bezogene Leistung
- [ fronius.0.meter.1.EnergyReal_WAC_Minus_Absolute = .. (offenbar identisch mit Produced)]
Aus dem letzten verbliebenen Ordner fronius.0.powerflow.1 ..
.. werden die folgenden Werte ..
- P_Akku : in die Batterie fließende Leistung
- P_Grid : aus dem Netz bezogene Leistung (für die man zahlen muss).
- P_Load : ins Hausnetz abgegebene Leistung als Summe von P_AC und P_Grid. Anm.: Hieraus lässt sich der Eigenverbrauch des GEN24 ermitteln.
- P_PV : von den Solarmodulen DC-seitig gelieferte Leistung
.. entnommen.
Die hier aufgeführten Datenpunkte E_Total, E_DAY und E_YEAR sind redundant zu jenen aus fronius.0.Inverter.1, die dort als TOTAL_ENERGY, YEAR_ENERGY und DAY_ENERGY bezeichnet werden. Auch hier verbleiben die letzten beiden leer (null).
eigene Datenpunkte
Aus diesen Datenpunkten werden weitere, eigene Datenpunkte abgeleitet. Diese werden in mehreren Ordnern unterteilt eingruppiert: Einspeisung, Netzversorger, PVAnlage, Inverter, und Zähler. Skripte sorgen für das korrekt Befüllen der Datenpunkte. Dazu später mehr.
Die ersten drei Ordner besitzen stets die gleiche Struktur. Exemplarisch wird daher hier nur der Inhalt des Ordners Einspeisung erläutert.
- Wh_Abgabe_startTag : enthält den Wert des Datenpunktes fronius.0.meter.1.EnergyReal_WAC_Minus_Absolute, der täglich um 0:00 Uhr genommen wird.
- Wh_Abgabe_tmpTag : Energie, die täglich ab 0:00 Uhr ins Netz des Versorgers abgegeben wurde
- Entsprechend werden die temporären Werte für Woche, Monat und Jahr am Ende der jeweiligen Zeiträume ermittelt und abgespeichert.
- Die Datenpunkte vTag, vWoche, .. enthalten die Werte der jeweiligen vorangegangenen Zeiträume.
Im Ordner ..
.. werden die Werte der Leistungen für die beiden MPPT-Stränge sowie die Zustandswerte für den GEN24 abgelegt.
Visualisierung der Leistungsflüsse
Die verwendeten Icons stammen aus der Sammlung /icons-fatcow-hosting/caution_high_voltage.png sowie vis.icontwo.
Die Flussrichtungen werden durch die Vorzeichen geregelt. So gilt beispielsweise für die Leistungen Batterie: laden < 0 entladen > 0; Netz: einspeisen < 0; beziehen > 0 usw.
Zur Darstellung der unterschiedlichen Orientierung der Pfeile werden wie in der Abbildung aufgezeigt Transformationen in CSS global dem Projekt hinzugefügt.
Um die unterschiedlichen Flussrichtungen zu visualisieren, werden zwei entgegengesetzt orientierte Pfeile übereinander gelegt und deren Sichtbarkeit an die Vorzeichen der jeweiligen Leistungen geknüpft.
Zur Darstellung des Icons für den Wechselrichter werden zwei Widgets verwendet. Aus der Sammlung Icontwo ein sog. als Background konfiguriertes Multi-Widget mit drei Zuständen für die unterschiedlichen Ansichten des GEN24 und ein aus der Sammlung basic stammendes HTML-Widget zur Anzeige der AC-Leistung des Wechselrichters.
Die Anzeige der Leistung wird mittels des sog. Bindings realisiert.
Das Multi-Widget bewertet den Inhalt des Datenpunktes InverterZustand und erzeugt hiermit die gewünschten Anzeigen.
Exemplarisch wird hier der Zustand dargestellt, in dem der GEN24 Energie verbraucht statt zu liefern.
Der ins Haus eingehende Leistungsfluss wird durch ..
.. ein einfaches, als Background konfiguriertes Widget aus der Sammlung Icontwo und wiederum einem HTML-Widget visualisiert, das nur (aktiv/grün) angezeigt wird, wenn Energie ins Haus fließt, was jedoch im Normalfall stets der Fall ist.
Das als Background konfigurierte Standard-Widget aus Icontwo für den Netzzugang ..
.. ist analog zu dem Haus-Widget aufgebaut. Jedoch werden hier zwei Zustände angezeigt: aktiv/grün = Einspeisung ins Netz, inaktiv/rot = Netzbezug.
Alles rund um die Batterie ist hier zu finden ..
Angabe des SoC in Prozent ..
Leistung, die aus der Batterie entnommen bzw. in diese hinein fließt. rot = Entnahme, grün = Aufladung
Die in der Batterie verfügbare Energie wird ermittelt aus SoC und der maximalen Kapazität abzüglich einer Restladung von 10%.
Die Widgets zur Anzeige von typischen Betriebswerten sind vergleichbar aufgebaut. Exemplarisch wird hier nur das Widget ..
.. ausführlich besprochen. Die Umrechnung der Einheiten Wh in KWh gerät hier etwas aufwendig, da man bekanntlich in HTML eigentlich nicht ohne Weiteres Berechnungen ausführen kann. Die Codierung wird im Folgenden in Code-From angegeben ..
<h2>Bilanz</h2>
Zukauf :
{x:0_userdata.0.Fronius.Netzversorger.Wh_Grid_tmpTag;parseFloat(x/1000).toFixed(3)} KWh <br>
Verkauf: {x:0_userdata.0.Fronius.Einspeisung.Wh_Abgabe_tmpTag;parseFloat(x/1000).toFixed(3)} KWh</br>
Konsum:
{x:0_userdata.0.Fronius.Netzversorger.Wh_Grid_tmpTag;y:0_userdata.0.Fronius.PVAnlage.Wh_PV_tmpTag;z:0_userdata.0.Fronius.Einspeisung.Wh_Abgabe_tmpTag;parseFloat((parseFloat(x)+parseFloat(y)-parseFloat(z))/1000).toFixed(3)} KWh
Autarkie: {a:0_userdata.0.Fronius.Netzversorger.Wh_Grid_tmpTag;x:0_userdata.0.Fronius.Einspeisung.Wh_Abgabe_tmpTag;y:0_userdata.0.Fronius.PVAnlage.Wh_PV_tmpTag;z:0_userdata.0.Fronius.Einspeisung.Wh_Grid_tmpTag;parseFloat(100*(parseFloat(y)-parseFloat(x))/(parseFloat(y)-parseFloat(x)+parseFloat(a))).toFixed(1)} %
- heute = Wh_PV_tmpTag enthält die Energie aus der PV-Anlage, die AC-seitig ins Haus eingespeist wird abzüglich der ins Netz des Vorsorgesystems abgegebene Energie wurde. Üblicherweise wird diese Energie als Eigenverbrauch bezeichnet.
- Woche = Wochensumme der Werte aus heute
- Monat = Monatssumme
- Jahr = Jahressumme
Anmerkung: Die hier angezeigten aktuellen Tageswerte umfassen nicht die gesamte in die Batterie eingespeicherte Energie. Die Energie aus der Batterie ist in diesen Werten nur inkludiert, wenn sie aus dieser entnommen und durch den Wechselrichter in Wechselstrom AC-seitig umgewandelt zur Verfügung gestellt wurde. Der Vorteil: Die Verluste durch Umwandlungen sind hierbei berücksichtigt. Daher zeigt die hier vorgestellte Visualisierung immer deutlich kleinere Werte für die Erträge an, wie die App von Fronius, in der die primären Energie auf er DC-Seite verwendet werden.
Diese Schwierigkeiten lassen insbesondere das Widget Bilanz in seiner Ausgestaltung recht aufwendig werden.
Auch hier wird die zugehörige Kodierung dieses Widgets wieder in Code-Form angegeben.
<h2>Bilanz</h2>
Zukauf :
{x:0_userdata.0.Fronius.Netzversorger.Wh_Grid_tmpTag;parseFloat(x/1000).toFixed(3)} KWh <br>
Verkauf: {x:0_userdata.0.Fronius.Einspeisung.Wh_Abgabe_tmpTag;parseFloat(x/1000).toFixed(3)} KWh</br>
Konsum:
{x:0_userdata.0.Fronius.Netzversorger.Wh_Grid_tmpTag;y:0_userdata.0.Fronius.PVAnlage.Wh_PV_tmpTag;z:0_userdata.0.Fronius.Einspeisung.Wh_Abgabe_tmpTag;parseFloat((parseFloat(x)+parseFloat(y)-parseFloat(z))/1000).toFixed(3)} KWh
Autarkie: {a:0_userdata.0.Fronius.Netzversorger.Wh_Grid_tmpTag;x:0_userdata.0.Fronius.Einspeisung.Wh_Abgabe_tmpTag;y:0_userdata.0.Fronius.PVAnlage.Wh_PV_tmpTag;z:0_userdata.0.Fronius.Einspeisung.Wh_Grid_tmpTag;parseFloat(100*(parseFloat(y)-parseFloat(x))/(parseFloat(y)-parseFloat(x)+parseFloat(a))).toFixed(1)} %
Die folgenden Angaben umfassen ausschließlich die Energien auf der AC-Seite und berücksichtigen somit sowohl Verlust in DC/AC-Wandlung und Batterie.
- Zukauf = Wh_Grid_tmpTag enthält die aus dem Netz ins Haus eingespeiste Energie
- Verkauf = Wh_Abgabe_tmpTag enthält die ans Netz abgegebene Energie
- erzeugt = Wh_PV_tmpTag entspricht der Energie aus der PV-Anlage und ggf. Entnahme der Batterie.
- Konsum = Wh_Grid_tmpTag + Wh_PV_tmpTag - Wh_Abgabe_tmpTag
Die AC-seitige Energie Wh_PV_tmpTag ist also die tatsächlich von der PV-Anlage generierte Energie, die man einspart.
Zur Visualisierung der Leistungen der PV-Anlage über den Tag wird ein mittels Grafana und InfluxDB erstelltes Diagramm in einem iFrame-Widget dargestellt.
Zur Darstellung der Betriebswerte der PV-Anlage wird direkt auf die Daten im Fronius-Adapter zugegriffen. Exemplarisch sieht das für die Leistungsanzeige zu MPPT1 wie folgt aus ..
Verwaltung der eigenen Datenpunkte
Diese eigenen Datenpunkt werden durch Blockly-Skripte gepflegt. Da wiederum viele Teile von identischer Struktur sind, werden die entsprechenden Teile nur exemplarisch behandelt.
Zwei Trigger werden definiert, um die Werte im Ordner 0_userdata.0.Fronius.Inverter zu füllen.
Das folgende Skript verwaltet die Datenpunkte im Ordner 0_userdata.0.Fronius.Zähler ..
Da die Energiewerte nur als saldierte Gesamtsummen erfasst werden, muss zur Berechnung der Werte für einen einzelnen Tag um 0:00 Uhr ein Schnappschuss (siehe Startwerte) der Werte gemacht werden. Die Tageswerte ergeben sich dann als Differenz aus aktuellem Zählerstand und diesen Startwerten.
Bei diesem Vorgehen gilt es jedoch den Fall zu berücksichtigen, dass das Skript am Tag erneut gestartet wird. Um die hiermit verbundenen Schwierigkeiten zu umschiffen, dienen die bei jedem Neustart des Skriptes ausgeführten drei Anweisungen, welche dafür sorgen, dass die Startwerte für den aktuellen Tag korrekt bleiben.
Für den Fall, dass man diese Werte in InfluxDB schreiben möchte, sollte man dies nicht via Adapter durchführen, da die über Tag angesammelten Werte dem Folgetag zugemessen würden. Um dies zu korrigieren, gibt es die Funktion, ..
.. welche dafür sorgt, dass die Daten mit einem um zwölf Stunden früheren Zeitstempel in InfluxDB geschrieben werden. Da dies nicht mittels Blockly möglich ist, wurde das Ganze in JavaScript kodiert ..
function (ziel, wert, zeit)
zeit=zeit-12*3600*1000 // Vortag 12:00 Uhr mittags
sendTo('influxdb.0', 'storeState', {
id: ziel,
state: {ts: zeit, val: wert, ack: false, from: ziel}
}, result => console.log('added'));
.. und kann wie im nachfolgenden CRON-Job gezeigt aufgerufen werden.
Täglich um 0:00 Uhr wird dieser CRON-Job ausgeführt und füllt die temporären Werte in den Ordnern 0_userdata.0.Fronius.Einspeisung/Netzversorger/PV-Anlage
Um die Werte der vergangenen Zeiträume (_vWoche, _vMonat, usw.) zu aktualisieren müssen an jedem dieser Zeiträume die nachfolgenden CRON-Jobs ausgeführt werden ..
täglich ..
wöchentlich ..
monatlich ..
jährlich ..
=========================== noch nicht überarbeitete Teile ===========================
Visualisierung der Energien
VORSICHT! Hinsichtlich der richtigen Interpretationen der Datenpunkte bin ich mir nach zwei Tagen Betrieb der Anlage alles Andere als sicher. Wer hier sein Wissen einbringen kann, ist herzlich willkommen.
Und nun wird's kompliziert. Die Energien werden von Fronius äußerst spartanisch behandelt. Es stehen nur die Gesamtwerte der von der PV Anlage gelieferten Energie (TOTAL_ENERGY = E_Total), die vom Netz bezogene (ENERGIYREAL_WAC_SUM_CONSUMED) und die ins Netz eingespeiste Energie (ENERGYREAL_WAC_SUM_PRODUCED) zur Verfügung. Werden die ersten beiden vom Wechselrichter geliefert, so werden die letzten beiden vom Smartmeter zur Verfügung gestellt, wobei das Smartmeter natürlich am sog. Übergabepunkt zum Netz positioniert sein muss. Hieraus gilt es nun durch tägliche Schnappschüsse und geeignete Differenzbildungen die gewünschten Werte zu erzeugen. Noch schlimmer steht's um die in die Batterie einspeisten Energien. Da hier nur Leistungswerde und Zeiten zur Verfügung stehen, muss man wohl oder übel eine (Art Riemann)Summe über die Produkte von P*t bilden.
Diese mathematisch exakte Ermittlung lässt sich jedoch nicht realisieren, da die Größen der Zeitintervalle von dem System vorgegeben werden; man muss nehmen, was man kriegen kann: Schnappschüsse.
Da über Modbus diese Daten voraussichtlich doch zugänglich sind, dürfte sich das Ganze entspannen.
Fortsetzung folgt!
[zurück]