Wir haben drei einphasige PV-Wechselrichter und einen Batteriewechselrichter im Keller. Der Akku kann das Haus bei Netzausfall autark versorgen, wird dafür im Normalfall nie unter ca. 25% entladen.
Die Wallbox wird über den sogenannten SmartCharger, einer auf einem Raspberry Pi laufenden Freeware von Nico Treffkorn, so gesteuert, dass nur dann geladen wird, wenn Überschuss seitens der PV-Generatoren besteht, also Energie ins Netz eingespeist würde, die besser lokal selbst verbraucht wird.
Die Anlage läuft seit der Installation mehr oder weniger unauffällig und die meisten Anlagedaten lassen sich über das Sunny Portal gut visualisieren. Das Sunny Portal hält auch Langzeitdaten bereit, diese lassen sich auf mannigfaltige Art darstellen und Alles könnte gut sein.
Allerdings bietet das Sunny Portal keine Anzeige für den Strom, der über die Wallbox in das EV (Electric Vehicle, Elektrofahrzeug) gespeist wird, diese Energie wird einfach dem Hausverbrauch zugeschlagen.
Darüber hinaus laufen im Sunny Portal mehrere Zähler, die überwachen, wie lange und/oder wie oft Werte in der momentanen Browsersitzung abgerufen wurden.
Wird einer der Grenzwerte überschritten, zeigt das Portal immer noch Werte an, diese werden aber nicht mehr aktualisiert. Im Zweifelsfall ist man also der Meinung, die PV -Generatoren liefern Strom, in Wahrheit wird längst der Akku entladen.
Zusätzlich muss für die Kontrolle, ob das EV gerade geladen wird, ein weiterer Browser geöffnet werden, um die Daten des SmartChargers anzuschauen.
Um die oben genannten Einschränkungen zu umgehen, habe ich mich entschlossen, eine eigene Visualisierung zu erstellen, die alle meine Anforderungen erfüllt und lokal im eigenen Hausnetz läuft, ohne irgendwelche Server im Internet zu bemühen.
Die Benutzeroberfläche (Graphical User Interface, GUI) habe ich mit Qt Creator modelliert, die Daten der Wallbox und einige Weitere liefert der SmartCharger (im Weiteren EDLD), die Momentandaten der PV-Generatoren werden von MBMD (Modbus Measurement Daemon) zur Verfügung gestellt.
EDLD und MBMD laufen auf einem Raspberry Pi, zur Zeit ist das bei mir ein RPi 3 B+ mit einem SSD als Speicherlaufwerk.
Anmerkung
Durch den Einsatz des SSD anstelle der normalerweise dafür eingesetzten SD-Karte ist der RPi deutlich schneller in allen Belangen, zusätzlich habe ich seit der
Umstellung auf SSD noch keinen Datenverlust durch Spannungsausfälle gehabt, was bei der SD-Karte schon mehrfach zu Verdruss, zweimal sogar zur Zerstörung der SD-Karte (nicht mehr schreib- oder lesbar), geführt hat.
Da der verwendete Raspberry Pi SSD-Adapter den RPi nicht booten kann, habe ich auf der immer noch eingebauten SD-Karte nur noch die zum Boot notwendigen
Verzeichnisse belassen und alles andere an Verzeichnissen auf die SSD transferiert. So wird die SD-Karte nur noch bei Änderungen an der Installation beschrieben.
Die Gefahr, bei Stromausfall beschädigt zu werden ist also minimiert.
EDLD stellt seine Daten über eine XML-Schnittstelle zur Verfügung, MBMD verwendet dafür ein JSON-Interface.
Die eigentliche Visualisierung hingegen läuft in meinem Fall auf einem Windows-Tablet oder jedem Windows Rechner im LAN.
Konfiguration der verwendeten Tools EDLD und MBMD
EDLD ist von Nico Treffkorn ursprünglich für Debian 7 „Wheezy“ geschrieben worden, die Installation und der Betrieb auf einem Raspberry Pi 2B haben damals problemlos nach seiner Anleitung funktioniert (die originale Seite ist inzwischen offline, daher der Link auf das WayBackMachine Archiv).
Im Laufe der Zeit wurde Debian weiterentwickelt, inzwischen, Stand 02/2022, sind wir bei Debian 11 „Bullseye“ angelangt. Beim Übergang von „Wheezy“ zu „Jessie“ wurde der Mechanismus für den Start und Neustart des Dienstes EDLD geändert und der von Nico beschriebene Weg über „init.d“ funktionierte nicht mehr. Jetzt erfolgt der Start von Diensten über „systemd“, man benötigt eine „Unit“ in der Abhängigkeiten und Zeitvorgaben einzutragen sind.
Die Notwendigkeit für einen Umstieg auf eine neuere Version von Debian ergibt sich alleine durch die Tatsache, dass ein heute neu gekaufter Raspberry Pi nicht mehr von „Wheezy“ oder “Jessie” unterstützt wird.
Ich stelle hier eine für den EDLD funktionierende systemd Unit vor:
[Unit]
Description=edl SmartCharger Daemon
DefaultDependencies=no
After=sysinit.target
StartLimitIntervalSec=0
[Service]
ExecStart=/bin/edld
Restart=always
RestartSec=4
User=pi
[Install]
WantedBy=sysinit.target
Die Datei muss im Verzeichnis „/etc/systemd/system/“ abgelegt werden, anschließend ist der Service mit
sudo systemctl enable edld
zu aktivieren und mit
sudo systemctl start edld
zu starten.
Es kann sein, dass vorher noch
sudo systemctl daemon-reload
aufgerufen werden muss, weil sich die Unit Datei geändert hat. Debian macht ggf. von sich aus auf diesen Umstand aufmerksam.
Migriert man eine bereits unter “Jessie” gelaufene Installation auf eine neuere Version von Debian, darf auf keinen Fall vergessen werden, die init.d Datei zu entfernen. Diese liegt im Verzeichnis „/etc/init.d“. Ansonsten wird der Dienst ggf. zweimal gestartet und die beiden Instanzen kommen sich beim Zugriff auf Wallbox, EnergyMeter oder Wechselrichter gegenseitig ins Gehege. Ich habe das anfangs nach einem Upgrade des Raspberry Pi übersehen und bis ich das als Ursache für sporadische Abstürze des EDLD gefunden habe, hat wirklich lange gedauert.
Die Parameter für die zu steuernde Anlage werden über die Oberfläche von SmartCharger eingegeben und dann in einer Konfigurationsdatei auf dem Raspberry Pi gespeichert. Die GUI des SmartCharger wird im Browser unter der IP-Adresse des RPi mit Port 18001 angezeigt, also “192.168.xx.xx:18001”.
Eine Übersicht über alle Daten, die der SmartCharger aus dem System erfahren kann erhält man auf der Home Seite.
MBMD läuft unter „Bullseye“ ohne Änderungen, die Unit Datei wird bereits mitgeliefert. Die Konfiguration von MBMD erfolgt durch eine Config-Datei „mbmd.yaml“ die im Benutzerordner „/home/pi“ abgelegt wird.
Hier der Inhalt beispielhaft für drei SMA Wechselrichter:
#REST api, use 127.0.0.1 to restrict to localhost
api: 0.0.0.0:8080
rate: 3s
# adapters are referenced by device
adapters:
- device:
192.168.xx.xx:502
- device: 192.168.xx.xx:502
- device: 192.168.xx.xx:502
# list of devices
devices:
- name: PVGenerator1
type: sunspec
id: 126
adapter:
192.168.xx.xx:502
- name: PVGenerator2
type: sunspec
id: 126
adapter: 192.168.xx.xx:502
- name: PVGenerator3
type: sunspec
id: 126
adapter:
192.168.xx.xx:502
In dieser Datei ist unbedingt auf die korrekte Einrückung der Zeilen zu achten, ansonsten kommt YAML bei der Interpretation durcheinander.
Die jeweiligen Adressen der Wechselrichter müssen zweimal eingetragen werden, einmal unter „adapters:“, ein zweites Mal unter „devices:“. Durch den jeweils hinter der Adresse angegebenen Port 502 erkennt MBMD, dass die Verbindung über LAN erfolgt. Alle Wechselrichter werden als „Sunspec“ Device mit der ID 126 angesprochen, die Unterscheidung im Netz erfolgt durch die IP-Adresse. Der Name der Devices kann frei gewählt werden.
Damit die Wechselrichter von MBMD gefunden werden können, muss mit dem Sunny Explorer von SMA die Anlage als Installateur aufgerufen und unter „Einstellungen - Externe Kommunikation“ der TCP-Server für jeden Wechselrichter eingeschaltet werden.
Abfrage der Werte
Die für die PV-Anzeige verwendeten Werte bzw. Stati sind in den folgenden beiden Listings Gelb markiert.
EDLD stellt die ermittelten Werte im XML-Format zur Verfügung:
<GetValues>
<Version>2.6.107</Version>
<SettingsVersion>1.6</SettingsVersion>
<Uptime>1d
06:32:27</Uptime>
<Copyright>Nico Treffkorn</Copyright>
<CurrentDateTime>01.02.2022 18:22:59</CurrentDateTime>
<LastEDLReceive>01.02.2022 18:22:43</LastEDLReceive>
<LastUDPReceive>01.02.2022 18:22:59</LastUDPReceive>
<LastWallboxControl>01.02.2022
18:22:03</LastWallboxControl>
<LastSQLStatement>00.00.0000 00:00:00</LastSQLStatement>
<LastKNXBroadcast>00.00.0000
00:00:00</LastKNXBroadcast>
<LastStorageReceive>01.02.2022 18:22:57</LastStorageReceive>
<SmartMeter>
<Using>1</Using>
<Type>SMA</Type>
<Serial>xxxxxxxx</Serial>
<TimeStamp>3739926</TimeStamp>
<ActualPower>-1</ActualPower>
<RealPower>
<L1>-338</L1>
<L2>295</L2>
<L3>41</L3>
</RealPower>
<PowerFactor>
<total>0.004</total>
</PowerFactor>
<Voltage>
<L1>231</L1>
<L2>232</L2>
<L3>231</L3>
</Voltage>
<mAmpere>
<L1>2020</L1>
<L2>1440</L2>
<L3>331</L3>
</mAmpere>
<MeterReadings>
<Consumption>7172.4</Consumption>
<Surplus>43009.2</Surplus>
</MeterReadings>
</SmartMeter>
<Infrastructure>
<MainFuses>
<Current>35000</Current>
<SafetyDistance>2000</SafetyDistance>
</MainFuses>
</Infrastructure>
<KNX>
<Using>0</Using>
</KNX>
<MySQL>
<Using>0</Using>
</MySQL>
<EV>
<Using>1</Using>
<Charging>
<ChargingMode>SURPLUS</ChargingMode>
<SurplusActivation>-1300</SurplusActivation>
<ManualCurrent>18000</ManualCurrent>
<SafetyCurrent>6000</SafetyCurrent>
<MinCharge>6000</MinCharge>
<MaxPhases>1</MaxPhases>
<EvaluationPoints>0</EvaluationPoints>
<TeslaWorkaround>0</TeslaWorkaround>
</Charging>
<Wallbox>
<ProductID>KC-P20-ES240030-000</ProductID>
<Serial>xxxxxxxxx</Serial>
<Firmware>P30 v 3.10.28
</Firmware>
<SecondsSinceStart>16516963</SecondsSinceStart>
<State id="1">not ready for charging</State>
<Plug id="5">plugged on wallbox, plugged on EV</Plug>
<SystemEnabled>0</SystemEnabled>
<Input>0</Input>
<Output>0</Output>
<MaxCurrent>0</MaxCurrent>
<MaxCurrentPercent>100.0</MaxCurrentPercent>
<HardwareCurrent>16000</HardwareCurrent>
<UserCurrent>6000</UserCurrent>
<Voltage>
<L1>0</L1>
<L2>0</L2>
<L3>0</L3>
</Voltage>
<mAmpere>
<L1>0</L1>
<L2>0</L2>
<L3>0</L3>
</mAmpere>
<ActualPower>0</ActualPower>
<SessionEnergy>7970</SessionEnergy>
<PowerFactor>0.000</PowerFactor>
<TotalEnergy>1120311</TotalEnergy>
<Error1 id="0">NO_ERROR</Error1>
<Error2
id="0">NO_ERROR</Error2>
<FailsafeCurrent>0</FailsafeCurrent>
<FailsafeTimeout>120</FailsafeTimeout>
</Wallbox>
</EV>
<StorageSystem>
<Using>1</Using>
<Type>SIX0H</Type>
<DeviceName>Sunny Island 4.4M</DeviceName>
<Serial>xxxxxxxxxxx</Serial>
<CommVersion>04.00.100.R</CommVersion>
<Battery>
<SOC>83</SOC>
<Temperature>28.4</Temperature>
<mVoltage>58600</mVoltage>
<mAmpere>9000</mAmpere>
</Battery>
<AC>
<ActualPower>490</ActualPower>
<Frequency>49.900</Frequency>
<Voltage>
<L1>230.60</L1>
<L2>0.00</L2>
<L3>0.00</L3>
</Voltage>
</AC>
</StorageSystem>
</GetValues>
Hinweis
Da die Extraktion der Werte aus dem EDLD XML-Datenstrom nicht iterativ sondern nach einem bestimmten Schema erfolgt, muss die SettingsVersion überprüft werden.
Zur Zeit (Stand 02/2022) werden als gültiges Format die Versionen “1.6” und “2.6.107” akzeptiert, beide sind identisch aufgebaut. Sollte sich die Version in Zukunft ändern,
muss überprüft werden, ob die Daten im XML-Stream noch dem vorgegebenen Format entsprechen. PV-Anzeige macht auf eine nicht unterstützte Settings Version mit einer Meldung in der GUI aufmerksam.
Die Werte von MBMD werden im JSON-Format übergeben:
{
"SUNSPEC1.126": :)
{
"Timestamp":"2022-02-01T19:50:42.176209446+01:00",
"Unix":1643741442,
"ApparentPower":0.000000,
"Current":0.000000,
"DCCurrentS1":0.000000,
"DCCurrentS2":0.000000,
"DCPowerS1":0.000000,
"DCPowerS2":0.000000,
"DCVoltageS1":54.000000,
"DCVoltageS2":54.000000,
"Export":16026.480000,
"Frequency":50.020000,
"HeatSinkTemp":30.000000,
"Power":0.000000,
"ReactivePower":0.000000,
"VoltageL1":232.300000
},
"SUNSPEC2.126":
{
"Timestamp":"2022-02-01T19:50:42.177324656+01:00",
"Unix":1643741442,
"ApparentPower":0.000000,
"Current":0.000000,
"DCCurrentS1":0.000000,
"DCCurrentS2":0.000000,
"DCPowerS1":0.000000,
"DCPowerS2":0.000000,
"DCVoltageS1":81.000000,
"DCVoltageS2":80.000000,
"Export":30198.630000,
"Frequency":49.980000,
"HeatSinkTemp":30.000000,
"Power":0.000000,
"ReactivePower":0.000000,
"VoltageL1":230.400000
},
"SUNSPEC3.126":
{
"Timestamp":"2022-02-01T19:50:42.271564826+01:00",
"Unix":1643741442,
"ApparentPower":0.000000,
"Current":0.000000,
"DCCurrentS1":0.000000,
"DCCurrentS2":0.000000,
"DCPowerS1":0.000000,
"DCPowerS2":0.000000,
"DCVoltageS1":66.000000,
"DCVoltageS2":66.000000,
"Export":20934.280000,
"Frequency":50.010000,
"HeatSinkTemp":30.000000,
"Power":0.000000,
"ReactivePower":0.000000,
"VoltageL1":233.300000
}
}
Hinweis
Die oben verwendeten Textboxen mit Scrollbalken und formatiertem Text musste ich
Netobject Fusion regelrecht abtrotzen, letztlich aber erfolgreich, wie man sieht :)
Gleiches gilt für das Erklärungs-Popup im nächsten Absatz.
Die Darstellung in der GUI ist bewusst an das Original Sunny Portal von SMA angelehnt. Erstens ist das meines Erachtens recht gut gelöst, zweitens hat diese Form der Präsentation einen hohen
WAF
Woman Acceptance Factor, auch Wife Acceptance Factor
Der Woman Acceptance Factor ist umgekehrt proportional zum möglichen Konflikt, der aus den unterschiedlichen
Ansichtsweisen der Ehepartner resultiert. Je niedriger der WAF, desto mehr Überredungsarbeit muss aufgebracht
werden, oder desto mehr Konflikt resultiert aus der Anschaffung oder dem Projekt. (Quelle: Wikipedia)
:)
Um Problemen mit Copyright seitens SMA von vornherein aus dem Weg zu gehen, habe ich die Sonne und das Haus leicht verändert, den Akku und den Mast komplett anders realisiert. Der Füllstand des Akku wird linear angezeigt, nicht wie im Sunny Portal in Stufen. Die beiden stilisierten Fahrzeuge sind ohnehin neu und symbolisieren den Ladevorgang an der Wallbox.
Hier einige Ansichten verschiedener Zustände der Anlage. Direkt nach dem Start sind alle Werte 0 und die Blöcke werden farblos Grau dargestellt.
Nach maximal 10 Sekunden reagiert der Raspberry Pi erstmals mit aktuellen Werten für PV-Erzeugung und die anderen Komponenten der Anlage. Energieflüsse zwischen den Komponenten der Anlage werden mit Doppelpfeilen angezeigt, Grün zeigt PV-Energie an.
Rechts oben in der Wallboxkomponente wird der Moment der Kommunikation mit dem Raspberry Pi mit einem Funksymbol visualisiert.
Wird Energie aus dem Akku verbraucht, wird das Dunkelgrün angezeigt. Netzbezug wird Rot dargestellt.
Der Anteil der jeweiligen Energiequelle am Verbrauch im Haus wird prozentual eingefärbt visualisiert. Die Grundfarbe für Ladevorgänge an der Wallbox ist Blau, je nach Zustand unterschiedlich abgestuft.
Ist das Ladekabel nicht eingesteckt, ist die Wallboxkomponente Grau.
Wird das Ladekabel angeschlossen, ändert sich die Farbe in Hellblau.
Ist die Sonneneinstrahlung ausreichend hoch, erhöht sich der Wert der “Evaluation Points” minütlich bis maximal 10. Ab 5 beginnt der Ladevorgang und die Farbe ändert sich auf Dunkelblau.
Ist der Akku des Fahrzeugs voll geladen, sinkt der Ladestrom auf Null, die Stecker an den Fahrzeugen werden Grün und die Box Mittelblau eingefärbt.
Treten Probleme in der Kommunikation zu einem der beiden benutzten Services auf dem Raspberry Pi auf, werden die vom betreffenden Dienst abhängigen Werte Rot dargestellt , der Hintergrund der App wird Hellrot gefärbt, zusätzlich wird das Schweinderl benannt (EDLD hat Probleme!), ggf. auch beide gleichzeitig, MBMD dann mit sinngleichem Text linksbündig in derselben Zeile.
Dieser Zustand kann sich von selbst wieder korrigieren, tritt das Problem aber über längere Zeit auf, muss im Allgemeinen der Dienst auf dem Raspberry Pi neu gestartet werden (siehe auch Update weiter unten). Dazu die Dienste über z.B. PuTTY durch Eingabe von
sudo systemctl restart edld
oder
sudo systemctl restart mbmd
wieder in die Spur bringen. Der Neustart dauert gemeinhin einige Sekunden, PV-Anzeige sollte währenddessen geschlossen sein.
Update
Inzwischen kenne ich den Grund für die Übertragungsstörungen des EDLD Dienstes. Sporadisch wird vom Dienst EDLD_daemon auf dem Raspberry Pi ein zweiter oder gar
dritter Thread mit eigener Child PID (cpid) gestartet. Sobald dieser Zustand eintritt, kommt es zu Störungen in der Datenübertragung beim Abruf mittels XML. Ich habe
deshalb ein Shellskript für den Raspberry Pi gebaut, das prüft, ob neben der parent PID noch child PIDs des EDLD Prozesses existieren. Ist das der Fall, werden diese child PIDs per kill -9 abgeschossen.
Hier der Inhalt des Skriptes:
#!/bin/bash
num_ELD=`pgrep -c edld` # Anzahl aller EDLD Threads ermitteln
parentPID=`pgrep -o
edld` # die PID des ältesten (=parent) Prozesses ermitteln
if (( $num_ELD > 1
)) # mehr als ein Thread -> „rote Zahlen“ in PV-Anzeige
then
echo "${num_ELD} PIDs vorhanden" #
Anzahl PIDs ausgeben
echo "Parent PID ${parentPID}" # Parent PID ausgeben
CPIDS=`pgrep -P $parentPID` # ergibt die Liste aller
Child Prozesse
for cpid in $CPIDS ; # alle Child PIDs werden gelistet
do echo "Child PID
${cpid}" ;
done
for cpid in $CPIDS ; # Liste abarbeiten -> alle Children werden
geloescht
do kill -9 $cpid ;
done
else # nur 1 PID
-> keine Children zu loeschen vorhanden
echo "Nur Parent PID ${parentPID} vorhanden"
fi
Zeigt PV-Anzeige den EDLD Fehler, wird das Skript über ein Terminal Programm auf dem Raspberry Pi manuell gestartet und verrichtet seine Aufgabe. Der Neustart des EDLD
Dienstes, wie oben beschrieben, ist damit hinfällig und muss nicht zusätzlich durchgeführt werden.
Warum sporadisch zusätzliche Prozesse im Kontext von EDLD gestartet werden, entzieht sich leider meiner Kenntnis.
Die Sourcen für das Programm sind auf Github zu finden. Am Einfachsten verwendet man “GitHub Desktop” um das Repository komplett auf den eigenen Rechner zu ziehen.
Um das Programm selbst zu erstellen ist die Installation des Qt Creator notwendig. Für privaten, nichtkommerziellen Einsatz des Tools die Variante ”Downloads for open source users” auswählen, sich registrieren und den Download starten, idealer Weise den “Qt Online Installer” wählen.
Im Installer muss die Version gewählt werden. PV-Anzeige kann mit Qt 5 und Qt 6 erstellt werden, wobei für Qt 6 in der “main.qml” die GraphicalEffects Library durch eine Compatibility Lib ersetzt werden muss, da die Farbspiele in der Haus Komponente und da insbesondere das Clipping an den runden Ecken, von der Qt 6 Version der GraphicalEffects nicht mehr unterstützt werden.
import QtQuick 2.12
import QtQuick.Window 2.12
import QtGraphicalEffects 1.0
wird zu
import QtQuick 2.12
import QtQuick.Window 2.12
import Qt5Compat.QtGraphicalEffects
Der Download aller Komponenten von Qt dauert eine geraume Weile, nicht ungeduldig werden. Durch Doppelklick auf die Qt-Projektdatei “PV-Anzeige.pro” öffnet sich das Projekt in Qt Creator zur Bearbeitung.
Qt Creator bietet mehrere Möglichkeiten, die Sourcen in ausführbaren Code umzuwandeln, ich habe mich für “MinGW 64-bit” entschieden.
Hat man alles übersetzt, muss noch das sogenannte “Deployment” durchgeführt werden, um das fertige Programm lauffähig auf einen anderen Rechner transferieren zu können. Im BIN-Ordner der Qt Installation findet man laut Anleitung das Tool “windeployqt.exe”.
Aber Achtung!
Es existieren mehrere Versionen - die zu nutzende Version dieses Tools muss passend zur verwendeten Build-Umgebung gewählt werden. Für MinGW 64-bit ist also die
Version im Pfad “Qt\5.15.2\mingw81_64\bin\” zu verwenden.
Der korrekte und zielführende Weg ist also:
Jetzt kann getestet werden, ob alles richtig im Zielverzeichnis angekommen ist. Der Start von PV-Anzeige.exe sollte die GUI öffnen und kurz darauf sollten Werte aus der PV-Anlage in den Anzeigen erscheinen.
Leider resultiert das Deployment auf diesem beschriebenen Weg nicht in einer einzelnen, ausführbaren EXE-Datei als Programm, sondern es wird ein Verzeichnis mit mehreren Dateien und Unterverzeichnissen erzeugt, das dann auf den Zielrechner kopiert werden muss. Wir reden hier über 100 MB in 400 Dateien, verteilt auf den Hauptordner und 25 Unterordner.
Um den Transfer auf einen anderen Rechner etwas handhabbarer zu gestalten, habe ich mit ChilkatZipSE alles in eine Installer-EXE verpackt, die das Deployment-Verzeichnis auf dem Zielrechner unter “%UserProfile%\Documents\PV-Anzeige” ablegt und direkt nach dem Auspacken mittels eines Batch einen Link auf die ausführbare “PV-Anzeige.EXE” auf dem Desktop erzeugt.
Die Benutzeroberfläche des Pack-Programms ist schon etwas abgehangen, funktioniert aber auch unter dem aktuellsten Windows 10 klaglos (Stand 05/2022). Überhaupt nicht abgehangen ist hingegen die herausragende Funktionalität des Packers. Chilkat Software stellt das Programm unter dem Namen ZIP 2 Secure EXE als Freeware zum Download zur Verfügung und auch die Premium Options sind jetzt per Freischaltkey nutzbar - den Key findet man auf der Homepage von Chilkat Software.
Als das Grundgerüst der PV-Anzeige soweit lief, habe ich die Füße nicht still halten können und als Fingerübung noch ein paar Gimmicks eingebaut, um meine Kenntnisse in Sachen Qt Programmierung weiter zu vertiefen.
Die Sonne ist jetzt nicht immer Weiß, sondern bei steigender PV-Leistung wird sie zuerst blass Gelb, später satt Gelb. Dass sie sich ganz langsam dreht, ist schon länger drin ;-)
Zusätzlich habe ich die Möglichkeit implementiert, Bilder mit den eigenen Elektrofahrzeugen anstelle der stilisierten Icons anzuzeigen. Umgeschaltet wird mit Mausklick auf eines der Fahrzeug-Icons in der Wallbox Komponente.
Die Bilder müssen aber zuvor in Eigenregie zurecht gefrickelt werden, damit die Visualisierung der Kabelsituation (gesteckt/nicht gesteckt) funktioniert. Das klappt hervorragend mit der Freeware “paint.net”, jedes andere Malprogramm mit der Fähigkeit, den Hintergrund transparent einzustellen, ist natürlich ebenso geeignet.
Aktualisierung
Um mich noch ein bisschen weiter in Qt einzufuchsen hatte ich schon länger die Idee, die
Sonne nicht abhängig von der Einstrahlungsleistung in Stufen einzufärben, sondern die Farbe kontinuierlich von Weiß nach Gelb zu steuern.
Dazu musste ich die Darstellung der Sonne quasi invertieren, also nicht den Hintergrund des Sonnen-Icons transparent einstellen, sondern die Sonne selbst und dafür den Hintergrund des Icons farbig, passend zur aktuellen Farbe der PV-Generator-Box, einfärben, also Hellgrau, wenn keine PV-Leistung zur Verfügung steht bzw. Grün, wenn die Sonne scheint.
Zusätzlich erhielt das Sonnen-Icon einen kreisrunden Rand, damit durch die langsame Drehung keine Ecken des an sich quadratischen Symbols sichtbar werden. Zum Schluss bekam das jetzt transparente Sonnen-Icon noch ein passendes Rechteck mit Eckenradius “Seitenlänge Halbe” hinterlagert, dessen gelbe Farbe in Abhängigkeit von der Strahlungsleistung mehr oder weniger gesättigt wurde (durch umgekehrt proportionales Zumischen von Blau).
Die Sonne erstrahlt jetzt in der Version V1.3 in 254 Abstufungen von Weiß nach leuchtend Gelb. Die zugehörigen Sourcen für das Programm finden sich auf Github.
Update
Bei der Änderung auf die sich kontinuierlich ändernde Sonnenfarbe ist mir eine Referenz
auf eine der gelöschten, früheren Sonnen-Icons durch die Lappen gegangen, was eine Fehlermeldung im Log von Qt bewirkt hat. Das ist mit Version V1.4 vom 26.05.2022 behoben.
Zusätzlich hatte ich übersehen, dass der Wert des Gesamtverbrauchs im Haus sowohl von der Funktion des Service EDLD als auch vom Service MBMD abhängig ist. Folglich muss die Farbe der Ziffern bei Fehlern beider Services auf Rot gesetzt werden. Das ist in V1.4 jetzt ebenfalls berücksichtigt. Die zugehörigen Sourcen für das Programm finden sich wie immer auf Github.
Update
Heute hat sich die PV-Anzeige zum zweiten Mal kapriziös verhalten, sprich, für mehrere
der Wechselrichter wurde kein Ertrag mehr angezeigt, dafür hat sich die Ertragssumme in Schritten immer weiter erhöht. Da ich zwischenzeitlich verdrängt hatte, was es mit
diesem Fehlerbild auf sich hat, musste ich mich erst mal auf die Suche nach dem Fehler machen.
Eine kurze Recherche in der Anlage ergab, dass die betroffenen Wechselrichter weiterhin ganz normal funktionierten. Lediglich die Kommunikation über den Modbus war gestört bzw. fand nicht mehr statt.
Da es keine Reset Möglichkeit an den Wechselrichtern gibt, müssen die betroffenen WR zum Zurücksetzen stromlos gemacht werden. Dabei reicht es nicht aus, die Sicherungen wechselstromseitig auszuschalten. Zusätzlich müssen die Trenner auf der Unterseite der Gehäuse herausgezogen werden, so dass auch von den PV-Paneelen keine Spannung mehr geliefert wird.
Nach einer kurzen Wartezeit, wenn die Anzeigen der Wechselrichter dunkel geworden sind, werden die Trenner wieder eingesetzt und die Sicherungen wieder eingeschaltet.
Tipp
Wer die Trenner an den Wechselrichtern lieber nicht heraus ziehen will (z.B. weil das
so im Handbuch für die SMA Wechselrichter angegeben ist), kann den notwendigen Reset des WR auf die Nachtstunden verschieben, dann reicht es, die Netzsicherung
abzuschalten, die Module liefern traditionell nachts eher keine Spannung.
Um beim nächsten Auftreten dieses Effekts nicht mehr lange überlegen zu müssen, bekommt die PV-Anzeige eine passende Statusmeldungen oberhalb der Box für die Wechselrichter implementiert.
Wenn diese Anzeige auftritt, ab in den Keller und Wechselrichter Voodoo durchführen...
Die Version wurde auf V1.5 erhöht, die zugehörigen Sourcen für das Programm finden sich wie immer auf Github.
Update
In Vorbereitung auf eine weitere Fläche mit PV-Kollektoren wurde die Anzeige um einen
Eintrag in der Liste der Generatoren erweitert. Zudem wird im Wallbox-Kasten oberhalb des Autos angezeigt, auf welchen Lademodus der SmartCharger gerade eingestellt ist. Möglichkeiten sind OFF, SURPLUS, QUICK und MANUAL.
Die Version wurde auf V1.6 erhöht, die zugehörigen Sourcen für das Programm finden sich wie immer auf Github.
Update
In der dunkleren Jahreszeit muss immer von Fall zu Fall entschieden werden, ob der Fahrzeugakku oder besser der Hausakku mit der wenigen, zur Verfügung stehenden PV
-Energie geladen werden soll.
Diese Entscheidung wird über die Parameter für den SmartCharger festgelegt. Normalerweise würde man dessen WEB GUI aufrufen und die passende Einstellung wählen.
In der PV-Anzeige wird dann ab V1.6 der eingestellte Lademodus angezeigt (siehe SURPLUS im Bild oben, oberhalb des stilisierten Autos in der hellblauen Box).
Ab Version V1.7 der PV-Anzeige kann diese Einstellung über die GUI der PV-Anzeige vorgenommen werden.
Wird die Maus horizontal über den im Bild unten rot umrandeten Bereich geführt, werden die möglichen Lademodi angezeigt. Mit einem Mausklick wird der gerade angezeigte Lademodus übernommen und an den SmartCharger gesendet. Kurz darauf wird der geänderte, jetzt also aktuelle Lademodus oberhalb des stilisierten Fahrzeugs angezeigt.
Die Parameter, die beim jeweiligen Lademodus vom SmartCharger verwendet werden (maximaler Strom, Anzahl der Phasen, Tesla Workaround, ...), werden weiterhin über die GUI des SmartCharger eingestellt.
Die Version wurde auf V1.7 erhöht, die zugehörigen Sourcen für das Programm finden sich wie immer auf Github.
Update
Nachdem über die PV-Anzeige der Lademodus auf Manuell gestellt werden kann, ist es
sinnvoll, auch den maximal möglichen Ladestrom für diesen Lademodus über die PV-Anzeige setzen zu können.
Normalerweise wird dieser Wert über die Seite WebControl des SmartCharger WEB Interface eingestellt.
Ab Version V1.8 der PV-Anzeige kann diese Einstellung über die GUI der PV-Anzeige vorgenommen werden.
Wird die Maus horizontal über den im Bild unten rot umrandeten Bereich bewegt, werden die zur Auswahl stehenden Ladeleistungen unterhalb der Eval. Points angezeigt. Mit einem Mausklick wird der gerade angezeigte Wert übernommen und an den SmartCharger gesendet. Kurz darauf wird die geänderte Ladeleistung übernommen und von der Wallbox angepasst. Der Wert Ladeleistung ändert sich entsprechend.
Da die Information über die eingestellte Ladeleistung zuerst vom SmartCharger Controller an die Wallbox und dann von der Wallbox an das Fahrzeug übermittelt werden muss, dauert es gemeinhin ein bis maximal zwei Minuten, bis sich eine Änderung am Ladestrom in der Anzeige durchsetzt.
Andere Parameter des SmartCharger (Anzahl der Phasen, Tesla Workaround, ...), werden weiterhin über die GUI des SmartCharger eingestellt.
Die Version wurde auf V1.8 erhöht, die zugehörigen Sourcen für das Programm finden sich wie immer auf Github.
Die aktuelle Version auf Github ist V1.9. Der Datenfluss und die Mathematik für den neuen Wechselrichter sind implementiert, aber noch still gelegt, da sonst wegen fehlender Daten dieses Wechselrichters immer ein Fehler gemeldet werden würde.
Update
Die zusätzlichen PV-Module inklusive neuem Wechselrichter sind installiert, in der aktuellen Version V1.10, zu finden auf Github, ist die Verarbeitung der zusätzlichen Daten aktiviert.
Update
Über einen sogenannten Drawer können die Ertragswerte, also die über die gesamte
Laufzeit gesammelte Energie aller Wechselrichter, angezeigt werden.
Die Anzeige erscheint, wenn mit der Maus auf Höhe der Sonne von rechts herein “gewischt” wird. Bei Klick irgendwo anders im Window verschwindet die Anzeige wieder.
Die Änderungen sind in der Version V1.11 eingebracht, wie immer auf Github zu finden.
Update
Die Anzeige der Ertragswerte der Wechselrichter wurde noch etwas aufgehübscht, das
heißt, die Darstellung ist zentriert, die Anzeige ist formatfüllend, egal wie die Auflösung des Display daher kommt, die Spalten sind ausgerichtet.
Außerdem wird bei Klick auf die Sonne eine Messagebox aufgeblendet, aus der die Ertragswerte per Copy&Paste entnommen werden können. Das erspart Tipparbeit und Fehler.
Der kleine Klecks rechts am Rand der Applikation ist ein Pfeil und deutet an, wo mit der Wischgeste angesetzt werden muss, um den Drawer ins Bild zu ziehen. Das funktioniert natürlich nur, wenn die Messagebox geschlossen ist ;)
Die Änderungen sind in der Version V1.12 eingebracht, wie immer auf Github zu finden.
Update
Die Geschichte mit dem Drawer für die Energieanzeigen der Wechselrichter hat mir so
gut gefallen, dass ich die Einstellungen für den SmartCharger, die vormals über winzige, unsichtbare Buttons auf der normalen Oberfläche des Programms erfolgen mussten (siehe hier und hier), jetzt ebenfalls in zwei Drawer verpackt habe. Folgerichtig gibt es
jetzt drei Kleckse am Rand ;)
Die verschiedenen Lademodi werden auf der rechten Seite angeboten:
Die Ladeströme für den manuellen Modus können auf der linken Seite eingestellt werden:
Zur Sicherheit noch einmal der Hinweis, dass die hier getätigten Einstellungen mit einiger Verzögerung vom Raspberry Pi des SmartCharger, der Wallbox und dem zu ladenden Fahrzeug verarbeitet und dann an die PV-Anzeige zurück gemeldet werden. Es dauert also immer eine Weile, bis die Anzeige sich auf die neuen Werte einstellt.
In der aktuellen Version V1.13, zu finden auf Github, sind die Drawer implementiert.
Update
Die kleinen Dreiecke am Rand gefallen mir nicht, sie werden durch kleine, graue Kreise
ersetzt, die quasi den Anfasspunkt darstellen, wo die Drawer ins Bild gezogen werden sollen. Das passt zusammen mit der Änderung, die aktive Fläche für die Drawer von
halber Fensterbreite auf ein Viertel der Fensterbreite einzustellen, so dass der Button in der Mitte der Wallboxkomponente wieder erreichbar ist, der die Darstellung der Fahrzeuge zwischen Icons und Realbildern umschaltet. Das kann dann so aussehen:
In der aktuellen Version V1.14, wie immer zu finden auf Github, sind die beschriebenen Änderungen implementiert.
Update
Zwischenzeitlich habe ich die Textfarbe in den Drawern passend zu allen anderen Texten
auf Weiß umgestellt und die Ausrichtung der Gleichheitszeichen im Manual Current Drawer korrigiert.
Diese Anpassungen sind in Version V1.16 enthalten, zu finden auf Github.