PRTG-Solar

Mittlerweile bin ich auch unter die Stromproduzenten gegangen. Auch wenn es im Sommer den meisten Strom gibt, und die Server, Kühlschränke, Wärmepumpe etc. im dunklen Winter auch Strom brauchen, ist es schon verlockend, die ca. 11ct/kWh Erzeugungskosten (über eine angenommene Lebensdauer von 15 Jahren) durch einen hohen Eigenverbrauch zu nutzen und nicht 25ct/kWh (Stand 2014) und mehr zu bezahlen. Da liegt es natürlich nahe, ein paar Daten des Wechselrichters und der Zähler zu erfassen.

Datenzugang des Kostal Pico 10.1

Im kühlen Keller hängt ein Kostal Pico 10.1, der selbst direkt einen Ethernet-Anschluss hat. Er kann natürlich auch selbst seine Daten an eines der Portale senden und dort vom Anwender ausgelesen werden. Hoffen wir mal, dass die Portalbetreiber das auch viele Jahre mitmachen. Der Pico 10.1 hat auch einen internen Datenlogger, der aber 100 oder 400 Tage erfasst. Das ist etwas wenig für eine Langzeiterfassung. Aber die Daten sind relativ einfach auch zu erhalten. Zwei Zugriffe habe ich bislang ermittelt.

  1. http://<ip-wechselrichter>/index.fhtml
    Auf der Übersichtsseite habe ich einen Tabelle mit den Werten für die 3 Strings (Strom und Spannung) und die drei Ausgänge L1-L3 mit Spannung und Leistung. Das sind aber „Realtimewerte“ und eine zyklische Auslesung ist daher nicht sehr genau.
  2. http://<ip-wechselrichter>/Info.fhtml
    da sieht man vier mögliche beschaltet Eingänge. (4x Analog 0-10V, 1x So-in). Bei mir sind die nicht beschaltet, also noch nicht interessant. Man könnte damit aber analoge Werte müssen aber keine "Takte". Ein Anschluss an den S0-Ausgang des Stromzählers macht hier keinen Sinn.
  3. http://<ip-wechselrichter>/LogDaten.dat
    Dies ist eine CSV-Datei, welche die Daten aus dem internen Datenlogger enthält. Je nach Einstellung sind 100/400 Tage in die Vergangenheit auch die Summen enthalten. Die Datei im Browser zu öffnen dauert zumindest bei mir sehr lange. Ein direkter Download ist aber schneller. Diese Datei liest wohl auch das Programm "PIKO Master Control V2.0“ aus

Der Zugriff auf diese URLs ist nur nach vorheriger Authentifizierung möglich. Wobei vermutlich die meisten Kostal Wechselrichter mit den Standardzugangsdaten betrieben werden würden:

User

pvserver

Kennwort

pvwr

Die normalen Zugänge über diese Daten erlauben nur die Änderung des Solar-Portals. Generell sollten Sie einen Wechselrichter nie aus dem Internet erreichbar machen.

PikoMasterControl V2

Kostal liefert mit PikoMasterControl V2 eine eigene Software für Windows mit, die den Wechselrichter abfragt und grafisch aufbereitet. für den normalen Anwender ist dieses Programm schon sehr ausführlich und ausreichend. Hier zwei Beispiele einer kürzlich in Betrieb genommenen Anlage:

Leider kann die Software aber z.B. nicht die drei Stränge unterscheiden, die mein Wechselrichter bedient (Ost/Süd/West) und zeigt hier nur die Summen an. für eine Fehlersuche und Abschätzung einer Verschlechterung wäre es aber schon interessant, auch die Spannungen und Ströme der einzelnen Segmente zu protokollieren. Also habe mit WireShark etwas genauer hingeschaut, was die Software im Hintergrund macht:

Zuerst erkennt man zwei Streams, bei der die Software einmal auf Port 80 geht. Hier nutzt Kostal einen einfachen HTTP-Zugriff auf eine Logdatei.

Damit lädt er wohl Initial die historischen Daten. Aber danach enden diese Zugriffe. Wenn man die Kommunikation zwischen der Kostal-eigenen Software "PikoMasterControl V2" auf dem Ethernet belauscht, wird eine zweite Kommunikation auf Port 81 sehen. Und ein Blick in den TCP-Stream zeigt zwar immer widerkehrende Muster, aber keine einfach einfach verwertbaren Strings:

Hier scheint also die Kostal Software eine andere Schnittstelle zum Auslesen der "Echtzeitdaten" zu nutzen, zu der ich aber keine Spezifikation gefunden habe. Denkbar ist, dass hier vielleicht ein Steuerbus genutzt wird, mit dem der Kostal mit anderen Systemen per RS485 verbinden werden kann, z.B. Um andere Verbraucher zu steuern. für meine weiteren Auswertungen haben ich diese Schnittstelle aber nicht weiter betrachtet und da mein Wechselrichter über diesen Port auch nicht aus dem Internet erreichbar ist, sollte der damit auch nicht so einfach angreifbar sein.

Messwerte per HTML-Datei

Hinweis
Ich habe meine Mitschnitte mit der Version "ver 4.12" der Kostal Firmware gemacht. Welche Firmware sie haben, sehen Sie unter "Einstellungen" auf de Webseite. Die Software parst die HTML-Seite und erwartet genau die Version 4.12. Ich kann nicht wissen, wie die Webseite von anderen Versionen aussieht.

Die aktuellen Werte, die mich interessieren, bekomme ich auch über den direkten Zugriff auf den Wechselrichter per HTTP. Die Seite als HTML-Datei liefert die aktuellen Leistungen und der Tagesenergie bzw. "X X X", wenn keine Werte anliegen:

Die Seite wird vom Kostal übrigens ohne "Refresh" ausgeliefert. Will man diese Daten auswerten, muss man quasi als "Screengrabber" wie früher bei BTX die Werte auslesen. Das geht mit PowerShell relativ einfach auch wenn Kostal leider die Felder nicht durch "TAGS" gekennzeichnet hat. Aber da die Webseite an sich ja "statisch" ist, lassen sich die Strings recht einfach parsen.

Messwerte in der LogDaten.dat

Diese Datei ist für eine weitere Auswertung wohl am besten geeignet, da die Daten auch nach einigen Unterbrechungen der Auslesestation im internen Logger des Wechselrichters vorgehalten und damit weiter ausgewertet werden können. Die "Echtzeitdaten" der Index-Seite sind interessant, wenn man basierend darauf Aktionen starten will, z.B. beim Stromüberschuss die Waschmaschine starten o.ä. Wobei das nicht so einfach sein wird den Ertrag der nächsten Stunde zu schätzen. Das wird dann wieder interessanter in Verbindung mit Speichertechnologien.

Für den Einsatz mit PRTG sind diese historischen Daten aber erst mal weniger brauchbar, da es aktuell keine Möglichkeit gibt, alte Daten in PRTG einzuspeisen. PRTG übernimmt immer nur die aktuellen Daten des Sensors. Dennoch kann es lohnend sein, diese Daten des Logfiles statt der Bildschirmausgabe zu nutzen, da sie auch aufaddierte Werte enthalten und damit bezüglich der Summern genauer sind.

PRTG Custom Sensor

Für meine ersten Gehversuche habe ich den Weg über die Statusseite gewählt, um aktuelle Zahlen für die Strings zu erhalten und diese dann in PRTG einzufüttern. Zum Einsatz kommt hier wieder ein PRTG:Custom Sensor, der die Daten als XML retour gibt und die Infos aus dem PS HTTPClient um die Daten per BasicAuth auszulesen.

Das PowerShell-Skript lieft "interaktiv" problemlos aber als CustomSensor konnte es die HTML-Rückgabe erst dann rendern, als ich ein "-UseBasicParsing" beim Invoke-Webrequest addiert hatte. Als Custom Sensor scheint auf meinem System der IE nicht nutzbar zu sein.
Interessant war, dass WireShark dann nur eine partielle Übertragung angezeigt hat, d.h. der Invoke-Webrequest hat einfach abgebrochen.

Dennoch bleibt das Property "ParsedHTML" leer und ich muss mit dem normalen "Content" vorlieb nehmen. Also braucht ich einen kleinen HTML-Parser. In meinem Beispiel ist es relativ einfach, da die Werte alle in "Tabellen" stehen und ich eigentlich nur die Teilstrings mit einem führenden "<td *>" und einem folgenden "</td *>" herausfischen muss. Die Details dazu habe ich auf RegEx weiter beschrieben.

Im Code habe ich dann einfach definiert, welche Felder welche Information enthalten, damit der Extrakt flexibel ist. Wer weiß, welche HTML-Seiten ich zukünftig noch parsen will:

$tdconfig = ( `
   "feld,Beschreibung,Einheit,Mode,Float,Formel`n" + `
   "10,AC Leistung aktuell,W,Absolute,1,data 10`n" + `
   "13,Gesamtenergie,kWh,Absolute,1,data 13`n" + `
   "22,Tagesenergie,kWh,Absolute,1,data 22`n" + `
   "28,Status  ""an/aus"" ,Status,Absolute,0,status 28`n" + `
   "46,String1 Spannung,V,Absolute,1,data 46`n" + `
   "55,String1 Strom,A,Absolute,1,data 55`n" + `
   "997,String1 Leistung,W,Absolute,1,power 46 55`n" + `
   "70,String2 Spannung,V,Absolute,1,data 70`n" + `
   "79,String2 Strom,A,Absolute,1,data 79`n" + `
   "998,String2 Leistung,W,Absolute,1,power 70 79`n" + `
   "94,String3 Spannung,V,Absolute,1,data 94`n" + `
   "103,String3 Strom,A,Absolute,1,data 103`n" + `
   "999,String3 Leistung,W,Absolute,3,power 94 103`n" +
   "49,Spannung L1 Ausgang,V,Absolute,1,data 49 `n" + `
   "58,Leistung L1 Ausgang,W,Absolute,1,data 58`n" + `
   "73,Spannung L2 Ausgang,V,Absolute,1,data 73`n" + `
   "82,Leistung L2 Ausgang,W,Absolute,1,data 82`n" + `
   "97,Spannung L3 Ausgang,V,Absolute,1,data 97`n" + `
   "106,Leistung L3 Ausgang,W,Absolute,1,data 106" ) | `
   convertfrom-csv -Delimiter ","

So baue ich on the fly eine CSV-Struktur auf, die ich bei der Auswertung als Quelle einer FOR-Schleife nutze, um die Daten aus der Liste von TD-Elementen zu extrahieren und die Verarbeitung der Daten festzulegen. Das habe ich gemacht, weil der Kostal auf der Webseite für jeden Strang nur die Spannung und den Strom liefert aber nicht die Leistung pro Strang errechnet. Die Leistung wird nur für die drei Phasen ermittelt. Die drei Strings finde ich aber viel interessanter.

Und so sieht es aus

Ich sammle noch Daten und das hier ist erst mal der erste Tag einer Aufzeichnung. Es sind natürlich sehr viele Werte die sich hier auf einem Bild überlagern, aber PRTG erlaubt es natürlich einzelne Werte auszublenden. Wem das nicht reicht, kann mit dem Factoy-Sensor einen eigenen Graph bauen.

Dieses Bild zeigt einen verregneten Dezembertag (18.12.2014). Sobald der Wechselrichter aktiv wird, wird ein schneller Spannungsanstieg auf den drei Strings angezeigt. Allerdings muss die Sonne noch etwas klettern, damit auch der Strom zunimmt und damit die Leistung ansteigt. Die drei Stromkurven unten sind kaum auseinander zu halten. Es ist eben sehr diffuses Licht und ich hoffe, dass im Sommer deutlicher sichtbar wird, das die Module auf Ost, Süd und West unterschiedliche String sind.

Durch die Möglichkeit von PRTG den Zeitraum genau anzugeben und auch Channel ab und einzuschalten, lassen sich auch bestimmte Moment genauer betrachten. Hier habe ich dem Anfang dieser Kurve ausgewählt:

Hier kann man nun sehen, dass der erste String (Osten) gegen 08:48 genug Licht bekommt, um Strom zu erzeugen. Die zweite Fläche (Süden) kommt ca. 20Min später auf Leistung während die dritte (Osten) noch etwas länger im Dunkeln liegt, bis sie weitere 20Min später ihren Betrieb startet. Es war aber ein nebeliger Dezembertag und die Leistung dieses Auszugs lag unter 45 Watt. Es ist wirklich nur der Anfang der Rampe.

Hier noch mal ein Beispiel zweier Tage. Man kann darauf schon weit weitere Ergebnisse ableiten:

  • Gesamtenergie ist wertlos
    Die absolute Erfassung der Gesamtenergie ist nicht wirklich sinnvoll. Der Wert steigt einfach an und macht den Maßstab kaputt. Besser wäre die Tagesenergie, die man mit einem eigenen Sensor einfach einmal am Tag erfasst. Dann aber einfach diesen Counter so einstellen, dass PRTG selbst die Differenz bildet. Schön auch zu sehen, dass der Kostal die Zahl nicht kontinuierlich anpasst, sondern irgendwann als Summer aufaddiert.
  • Pause in der Nacht
    Da bei Dunkelheit sicher keine Energie geliefert wird, könnten Sie in PRTG die Aufzeichnung während der Nacht einfach pausieren. Das würde dann ein paar Datenpunkte einsparen. Allerdings ist in Deutschland die Länger der Nacht von der Jahreszeit abhängig. Ich habe mit verkniffen diese Optimierung umzusetzen.

Interessant ist auch die Auswertung der "Tagesenergie". Es ist schön zu sehen, dass an jedem Morgen, wenn der Wechselrichter sich "einschaltet" der Zähler auf 0 Zurück gesetzt wird und die Flanke ist dann die aufsummierte Energie des Tages.

Das hier sind einige tage im Dezember mit einem "sonnigen" Tag, der aber im Winter auch nur ca. 4.5 kWh erzeugt hat.  Bei einer "Monatsnsicht" ist schon besser zu sehen, wie sonnig ein Tag in der Summe war:

Sonnenfinsternis 20. März

Am 20 März gab es in Deutschland ja eine partielle Sonnenfinsternis. Leider hat man in Ostwestfalen rund um Paderborn nicht allzu viel davon gesehen, da den ganz Tag über der Nebel bzw. eine geschlossene Wolkendecke die Sicht versperrt hat. Sicher ist es "etwas düsterer" geworden aber wirklich gemerkt hätte man es wohl nur, wenn man genau darauf geachtet hat. Der Ertrag an diesem Tag was daher sowieso schon deutlich unterdurchschnittlich. Dennoch ist der Einbruch auch hier sehr gut zu sehen.

Die 800W Spitzenleistung am Anfang und die ca. 1200W am Ende dürfte ich sowieso komplett selbst verbraucht haben.

Sonnentag

Auch umgekehrt ist es natürlich interessant, wie effektiv die Anlage z.B.: bei einem "Sonnentag" arbeitet. Hier der Tag am 16. Jun 2015 in Hövelhof. Auch wenn ich eigentlich drei unabhängig Panels in Ost, Süd und West-Ausrichtung habe, ist die Stromerzeugung kein ausgeprägteres "Plateau" sondern fast eine perfekte Parabel. Nur ganz an der Spitze kann man erkennen, dass die Anlage hier wohl die 70% Beschränkung erreicht hat.

Bei dieser Auslegung würde es sich also sicher nicht lohnen, auf 100% gehen zu wollen und mit einem Fernwirkungsempfänger dem E-Werk eine Abschaltung zu erlauben. Legt man den Fokus aber auf die zwei einzelnenn Strings, dann ist sehr wohl zu erkennen, dass diese etwas zeitverzögert einsetzen:

Ich muss aber noch mal hinterher und schauen, warum der eine String am Anfang so komisch zurück liegt. Das Verhalten scheint er immer zu haben, wenn es sehr sonnig ist. Bei bedeckten Tagen fällte es weniger auf. Ich tippe darauf, dass es vielleicht der Schattenwurf des Kamins ist, der ganz früh morgens sicher ein paar Zellen auf der Westseite abdeckt, bis die Sonne höher gestiegen ist. Im Winter ist die Sonne weiter südlich, so dass der Kaminschatten nicht mehr abdeckt und bei diffusem Licht ist der Schatten auch nicht ausgeprägt.

Download und Einsatz

Der PRTG-Sensor folgt der Funktion eines PRTG:Custom Sensor und ist in PowerShell geschrieben. Sie sollten Ihn mit jeder PRTG-Installation betreiben können. Kopieren Sie das PS1-Skript dazu in das Verzeichnis "C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML" und richten Sie dann in PRTG einen Custom Sensor ein. Die Standarteinstellungen sind in den meisten Fällen passend. Allerdings müssen Sie natürlich die IP-Adresse ihres Kostal-Wechselrichters entweder im Script ändern oder als Parameter mit übergeben. per Default versucht das Skript auf 192.168.178.5 zuzugreifen.

Das Commandlet "Invoke-Request" erfordert mindestens PowerShell 3.0
PowerShell 4 finden Sie als "Windows Management Framework 4"
http://www.microsoft.com/de-de/download/details.aspx?id=40855 oder KB2819745

prtg-kostal.ps1

Nachdem die ersten Daten gesammelt wurden, sollten Sie aber in der Verwaltung Kanäle abschalten, die sie nicht brauchen, aber der Vollständigkeit halber erfasst werden. So sind folgende Werte im Chart nicht wirklich sinnvoll:

  • Tagesenergie in Watt
    Da kommt nur eine "Sägezahnkurve" heraus die bei größeren Auflösungen aufgrund der Mittelwertbildung wertlos sind. Dann nutzen Sie besser die "Leistung aktuell", auch wenn das nur eine Stichprobe ist. die Tagesenergie macht eher Sinn mit einem eigenen Sensor, der auch nur einmal am Tag diesen Wert ausliest, aber nicht bei einer Auslesung alle 5 Minuten
  • Energie Gesamt
    Auch diese Kurve wird immer nur "ansteigen". Wenn dieser Wert in PRTG aber als "Differenz" definiert wird, dann müsste die Zahl sehr genau der "Leistung aktuell" entsprechen.

Diese Werte können aber in der Tabelle durchaus interessant sein.

Das Skript ist natürlich anpassbar, d.h. wenn Sie die Daten schon vorverarbeiten oder Werte von vorneherein gar nicht erfassen wollen, können Sie dies im Skript sehr einfach tun. Ich freue mich über ein Feedback und Verbesserungen, insbesondere wenn Sie allgemeiner Art sind und in das Skript einfließen können.

Wunschliste

Ich werde da Skript sicher weiter entwickeln, wenn ich über einige Tage und Wochen sehe, was ich besser machen kann. Ob die Daten des Sensors immer passend sind, kann erst der Dauerbetrieb zeigen. Ggfls. sind hier noch Anpassungen erforderlich.

  • Interessant könnte es auch noch sein, die Leistung der drei Strings zu addieren und mit der eingespeisten Leistung gegenüber zustellen. Wenn die Werte korrekt sind, dann könnte man so auch auf den Wirkungsgrad des Wechselrichters schließen. Ich vermute aber, dass die Werte nicht genau genug sind, um diese Daten korrekt zu ermitteln.
  • Einen weiteren Punkt kann ich leider nicht ohne die Weiterentwicklung von Paessler lösen: Ich würde mir wünschen, dass ich auch die Logdateien von Kostal einlesen und die historischen Daten in PRTG übergeben kann. Das müsste nicht mal ein klassischer Sensor sein. Ein "Import" außerhalb von PRTG, z.B. als passende CSV-Datei, würde mir schon reichen. Siehe auch PRTG:Wunschliste. Dann wäre es auch deutlich einfache die Daten eines Sensors zu exportieren und auf einem anderen System zu importieren. Mit einem anderen System ist natürlich eine neue PRTG-Instanz gemeint, die auf einem anderen PC läuft aber keine 1:1 Übernahme aller Daten möglich war.

Weitere Links