Allgemein_Header_6

 

PV-Anzeige

PV-Anzeige

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”.

SmartCharger Settings

Eine Übersicht über alle Daten, die der SmartCharger aus dem System erfahren kann erhält man auf der Home Seite.

SmartCharger Home


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.

Sunny Explorer TCP Server aktivieren


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.

PV0

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.

PV1

Wird Energie aus dem Akku verbraucht, wird das Dunkelgrün angezeigt. Netzbezug wird Rot dargestellt.

PV6

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.

PV14

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.

PV3a

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.

EDLD Fehler

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.

QT Creator Compiler

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:

  • Bestimme die Build-Umgebung (hier “MinGW 64-bit”)
  • Starte in einem CMD Fenster (DOS-Box) den Batch file
    Install-Laufwerk:\Qt\5.15.2\mingw81_64\bin\qtenv2.bat
  • Starte im gleichen Fenster den Aufruf
    windeployqt.exe
       --dir Pfad-zum_Zielverzeichnis\PV-Anzeige_Deployment_MinGW
       --qmldir Pfad-zum_Zielverzeichnis\PV-Anzeige [hier ein Leerzeichen]
       Pfad-zum_Zielverzeichnis\build-PV-Anzeige
                 -Desktop_Qt_5_15_2_MinGW_64_bit-Release\release\PV-Anzeige.exe
      --no-translations
  • Kopiere die Datei “PV-Anzeige.exe” aus dem Build-Ordner in das Deployment-Verzeichnis
  • Kopiere die korrekt mit der echten IP-Adresse des Raspberry Pi befüllte Datei “PVconfig.ini” in das Deployment-Verzeichnis

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.

Wechselrichter Modbus-Fehler

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.

PV18

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.

Smartcharger WebControl

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.

Steuerung der Lademodi

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.

Smartcharger WebControl

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.

Steuerung der Ladeleistung

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.

Ertragswerte der Wechselrichter

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.

Ertragswerte im Drawer

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.

Ertragswerte in MsgBox

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:

Einstellen des Lademodus

Die Ladeströme für den manuellen Modus können auf der linken Seite eingestellt werden:

Ladeströme für Manual Charge Mode

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:

Version V1.14 mit Real Pics

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.

Version V1.16

Diese Anpassungen sind in Version V1.16 enthalten, zu finden auf Github.

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000