-
Notifications
You must be signed in to change notification settings - Fork 32
PV Überschussladen
PV-Überschussladen lässt sich einfach mit folgenden Systemen umsetzen:
- openWB
- evcc
- Android App "Wallbox Steuerung"
wbec dient dann nur als WLAN-Schnittstelle für die Wallbox und bekommt von den o.g. Systemen den Sollstrom mitgeteilt.
Vorteil: Es ist möglich, mehrere Wallboxen an einem wbec zu steuern.
wbec hat auch eine primitive Regelung um eigenständig den richtigen Strom für das Überschussladen zu ermitteln. Dies ist jedoch nur für eine einzelne Wallbox möglich (Modbus-ID 1).
Dazu muss der Parameter cfgPvActive auf 1 gesetzt werden.
Die wesentliche Information für das PV-Überschussladen ist die aktuelle Einspeisung ins Stromnetz. Wenn diese hoch genug ist, dann sollte der Ladevorgang gestartet werden. Wenn sie zu niedrig ist (bzw. wenn sogar Strom aus dem Netz bezogen wird), dann soll das Laden unterbrochen (bzw. die Ladeleistung reduziert) werden.
uint8_t cfgPvActive; // = 0 aktiviert (1) oder deaktiviert (0)
uint8_t cfgPvCycleTime; // =30 Regelinterval (in s)
uint8_t cfgPvLimStart; // =61 Sollstrom, ab dem das Laden gestartet wird (in 0.1A), z.B. 61=6.1A
uint8_t cfgPvLimStop; // =50 Sollstrom, unter dem das Laden gestoppt wird (in 0.1A)
uint8_t cfgPvPhFactor; // =69 Umrechnungsfaktor Strom zu Leistung z.B. 69: 1A = 690W (3-phasig), 23: 1A = 230W (1-phasig)
uint16_t cfgPvOffset; // = 0 Offset für die Berechnung der verfügbaren Leistung (in W); kann genutzt werden, damit keine/weniger Strom aus dem Netz bezogen wird
Die "verfügbare Leistung" für das Laden errechnet sich aus "akt. Einspeisung" + "akt. Ladeleistung" - den Offset. Dieser Wert soll auf nahe Null geregelt werden.
Im Code: availPower = -watt + power - cfgPvOffset;
Mittels cfgPvPhFactor wird daraus der Soll-Strom errechnet.
Zentrale Größe ist also die aktuelle Einspeisung/Bezug watt
.
Wichtig: Positive Werte entsprechen einem Bezug aus dem Netz. Negative Werte entsprechen einer Einspeisung ins Netz.
Wenn kein Wert direkt vom (Haus-)Stromzähler zur Verfügung steht, dann kann hier z.B. auch die aktuell vom Wechselrichter erzeugte Leistung (- Offset) genutzt werden. Die folgenden Absätze beschreiben, wie der Wert für watt
aus verschiedenen Geräten automatisch ausgelesen werden kann.
Weitere Berechnungsmodi:
// cfgPvCalcMode = 0: Standard
verf. Leistung = Bez./Einsp. + Ladeleistung - Offset
availPower = -watt + power - cfgPvOffset
// cfgPvCalcMode = 1: wenn nur die erzeugte PV-Leistung berücksichtigt werden soll
verf. Leistung = PV-Leistung - Offset
availPower = -watt - cfgPvOffset
// cfgPvCalcMode = 2: Berücksichtigung der Batterie(ent)ladeleistung
verf. Leistung = Bez./Einsp. + Ladeleistung - Offset + Batterieleistung (nur bei Entladung)
availPower = -watt + power - cfgPvOffset + pvBatt
Es gibt 4 Lademodi:
- Deaktiviert (0): PV-Funktion ist komplett deaktiviert
- Aus (1): Aktuell nicht laden
- PV-Laden (2): Nur Überschüsse aus PV laden
- Min+PV-Laden (3): Überschüsse aus PV laden, aber immer mindestens den Minimalstrom (typ. 6A / 4,1kW), notfalls auch mit Netzbezug
Der Lademodus kann über verschiedene Wege eingestellt werden:
- Web Interface
http://wbec.local
- API-Aufruf
http://wbec.local/pv?pvMode=1
(Zahlenwert s. oben) - über einen Schalter am Pin D7 (Wechsel zwischen PV-Laden (2) und Aus (1)) (variantenabhängig!)
wbec erzeugt eine Datei pv.txt in der die relevanten Werte für die o.g. Berechnung abgelegt werden:
Zeitstempel; Bezug/Einspeisung (watt); akt. Ladeleistung (power); akt. Ladestrom; Soll-Ladestrom
Über die Seite http://wbec.local/pvChart.html
kann der Inhalt dieser Datei grafisch dargestellt werden.
Hinweis: Die in wbec umgesetzte Regelung ist stark vereinfacht. Die o.g. darauf spezialisierten Systeme können das natürlich deutlich besser.
Getestete Typen: SE7k, SE9k, SE16k
wbec kann den Wechselrichter über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":1
Modbus TCP muss vom SolarEdge Support auf Port 1502 freigeschalten werden. Info siehe hier: https://community.home-assistant.io/t/custom-component-solaredge-modbus-tcp/165625/28
Getestete Typen: Fronius Symo 17.5 + Fronius Smartmeter
wbec kann den Wechselrichter über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":2
Nötige Einstellungen am Wechselrichter:
Neuere Fronius Symo (Gen24) haben evtl. nicht 240 als Modbus-Adresse/ID, sondern 200. Dies kann über folgenden Parameter angepasst werden:
"cfgInverterAddr":200
Getestete Typen: KSEM
wbec kann das KSEM (Kostal Smart Energy Meter) über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":3
Es muss die Adresse vom KSEM eingetragen werden, nicht die vom Wechselrichter. Der KSEM muss als "Modbus TCP Slave" eingestellt sein, in der Regel mit Port 502 und Modbus-ID 240 (im KSEM). Gegebenenfalls kann mittels cfgPvInvert noch das Vorzeichen invertiert werden.
Getestete Typen: Kostal Plenticore Plus 10
wbec kann den Wechselrichter über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":8, "cfgPvCalcMode":1
Da der ausgelesene Wert nicht Bezug/Einspeisung am Hausübergabepunkt beinhaltet, sondern nur die aktuell erzeugte PV-Leistung, muss der Parameter cfgPvCalcMode von 0 (Default) auf 1 geändert werden. Zusätzlich kann es sinnvoll sein, den geschätzten Hausverbrauch mittels cfgPvOffset abzuziehen (s. Formel oben, nur positive Werte erlaubt!).
Getestete Typen: Huawei Sun2000 Wechselrichter mit DTSU 666 Power Meter
wbec kann den Wechselrichter über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":4
Gegebenenfalls auch noch "cfgInvRegBattery":37765, "cfgPvCalcMode":2
Getestete Typen: Sunny Tripower STP8-10-3AV-40 aus 2021
wbec kann den Wechselrichter über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":5
Getestete Typen: SHM 2.0 zusammen mit einem Sunny Tripower 8.0 Smart Energy (Danke Lukas!)
wbec kann den SHM 2.0 über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":5, "cfgInverterAddr":3
cfgInverterIp = die IP-Adresse des Wechselrichters(!), nicht die des SHM (der WR erhält die Daten vom SHM)
cfgInverterAddr = Einstellung "Kommunikationsart -> Unit ID"
Gegebenenfalls auch noch "cfgInvRegBattery":31395, "cfgPvCalcMode":2
Ggf. muss außerdem das Register um 1 erhöht werden (evtl. abhängig von der Einstellung "Kommunikationsart -> Modbus SunSpec Profilversion"):
"cfgInvRegToGrid":30868, "cfgInvRegFromGrid":30866
Getestete Typen: Victron cerbo gx (inkl. Smartmeter Victron EM24 RS485, Wechselrichter Multiplus2 5000), Victron Easy Control GX
wbec kann den Wert für "com.victronenergy.system --> Grid Lx" über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":6
Getestete Typen: TBD (Test noch nicht abgeschlossen)
wbec kann den Wert für "Leistung am Netzübergabepunkt" über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":7
Getestete Typen: SAX-Power Heimspeicher mit EnFluRi-Sensor
wbec kann den Wert für "Leistung des Smartmeters" und "Leistung des Speichers" über Modbus TCP auslesen. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":10, "cfgPvCalcMode":2
Getestete Typen: GW10KN-ET
wbec kann den Wert für "MTTotalActivepower" und "Pbattery1" über Modbus TCP auslesen. Modbus-TCP muss im Wechselrichter aktiviert sein. Modbus-TCP ist nur mit dem WiFi/LAN-Kit v2 von GoodWe möglich. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":11, "cfgPvCalcMode":2
Getestete Typen:
wbec kann den Wert für "Export Power" über Modbus TCP auslesen. Modbus-TCP muss im Wechselrichter aktiviert sein. Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgInverterIp":"192.168.xxx.yyy", "cfgInverterType":12
Der Shelly 3EM ist ein Gerät, um den Strom am Hausanschluss zu messen und die gemessenen Werte über WLAN zur Verfügung zu stellen. wbec kann auf diesen Wert zugreifen und den Ladestrom entsprechend regeln.
Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1, "cfgShellyIp":"192.168.xxx.yyy"
Alternativ:
"cfgPvActive":1, "cfgPvHttpIp":"192.168.xxx.yyy", "cfgPvHttpPath":"/status", "cfgPvHttpJson":"total_power\":"
Der Shelly 3EM Pro ist ein Gerät, um den Strom am Hausanschluss zu messen und die gemessenen Werte über WLAN zur Verfügung zu stellen. wbec kann auf diesen Wert zugreifen und den Ladestrom entsprechend regeln. Siehe unten, "Anbindung eigener Systeme via HTTP".
Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvHttpIp":"192.168.xxx.yyy","cfgPvHttpPath":"/rpc/Shelly.GetStatus","cfgPvHttpJson":"total_act_power\":"
Getestete Typen: sonnenBatterie Eco 8.0 (siehe https://github.com/steff393/wbec/issues/131, vielen Dank an @Gomercity)
Die nötigen Parameter in der Datei cfg.json sind wie folgt:
"cfgPvActive":1,
"cfgPvHttpIp":"192.168.xxx.xxx", (eigene IP eintragen)
"cfgPvHttpPath":"/api/v1/status",
"cfgPvHttpJson":"GridFeedIn_W\":", (wichtig, hier mit Anführungszeichen und Doppelpunkt)
"cfgPvHttpPort":8080,
"cfgPvInvert":1
- Anmelden in der Weboberfläche als "USER", Passwort "sonnenUserXXXX" (s. Typenschild)
- Unter "Software-Integration" die JSON API freischalten (in diesem Fall reicht Read API)
- Der Pfad und die Abfragemöglichkeiten werden angezeigt: http://192.168.xxx.xxx:80/api/v2/latestdata
- Mit wbec kann nur die API V1 genutzt werden, V2 ist nicht erforderlich
Der powerfox poweropti wird an die optische Schnittstelle des Stromzählers angeschlossen und sendet den aktuellen Bezug/Einspeisung an die Cloud (eine lokale Lösung ist leider nicht möglich).
wbec kann die Daten aus der Cloud abrufen und für die PV-Überschussregelung verwenden. Dies erfordert allerdings viel RAM, so dass andere Funktionen (RFID, MQTT, etc.) nicht parallel genutzt werden sollten. Dennoch können sporadische Resets auftreten, die aber nicht per se kritisch sind, da wbec schnell wieder bootet. Eine künftige Änderung der API seitens powerOpti kann die Funktion beeinträchtigen.
Die Zugangsdaten müssen in der Datei cfg.json hinterlegt werden, z.B.:
"cfgFoxUser":"[email protected]", "cfgFoxPass":"myPassword","cfgFoxDevId":"0123456789AB"
--> Bezug/Einspeisung werden nun alle 30s über die powerfox API abgerufen
Der o.g. Wert watt
(Pos=Bezug, Neg=Einspeisung) kann auch von extern an wbec übergeben werden:
http://wbec.local/pv?pvWatt=3000 (=3kW Bezug)
http://wbec.local/pv?pvWatt=-1234 (=1,234kW Einspeisung)
Die Batterieleistung kann ähnlich übergeben werden:
http://wbec.local/pv?pvBatt=3000 (=3kW Ladeleistung)
http://wbec.local/pv?pvBatt=-1234 (=1,234kW Entladeleistung)
wbec bestimmt daraus dann den Sollstrom.
wbec kann typische IR-Leseköpfe auslesen, wenn diese eine http-Schnittstelle haben. Dies geht z.B. bei den typischen Tasmota-Leseköpfen.
Die nötigen Parameter in der Datei cfg.json sind wie folgt:
cfgPvHttpIp
: IP-Adresse des Lesekopfs
cfgPvHttpPath
: Adresse (nach der IP), die aufgerufen werden soll, beginnend mit '/'
cfgPvHttpPort
: optional, default: Port 80
cfgPvHttpJson
: Ein Text, der dazu dient den gesuchten Wert in z.B. einem JSON-String zu finden (max. 29 Zeichen)
Im folgenden Beispiel würde wbec die Seite "http://192.168.178.100/cm?cmnd=status 10" aufrufen und dort die Zahl nach dem Text power_curr":
suchen:
"cfgPvActive":1,"cfgPvHttpIp":"192.168.178.100","cfgPvHttpPath":"/cm?cmnd=status%2010","cfgPvHttpJson":"power_curr\":"
Eine Einbindung eigener Systeme, z.B. SMLReader, IR-Leseköpfe, Tasmota, o.ä. ist auch per MQTT möglich. Hierzu können folgende Parameter genutzt werden, s. auch Issue #54:
cfgMqttWattTopic
: MQTT Topic, das den Wert für Bezug(+)/Einspeisung(-) enthält (max. 59 Zeichen)
cfgMqttWattJson
: Ein Text, der dazu dient den gesuchten Wert in z.B. einem JSON-String zu finden (max. 29 Zeichen)
Hierfür wird ein MQTT-Broker benötigt. Weitere Parameter für MQTT sind in der Parameterübersicht im Wiki beschrieben.