Hallo Ulrich,
ich betreibe einen
• Deye SUN-6K-SG03LP1-EU, 1-phasiger Hybridwechselrichter, 6 kW
• Firmware 1516
• DTSU666 Smart Meter am Deye für Nulleinspeisung
• Batteriespeicher am Deye
• my-PV AC ELWA 2, 3,5 kW
• Raspberry Pi mit Solaranzeige
Die Nulleinspeisung soll weiterhin ausschließlich der Deye zusammen mit dem DTSU666 regeln.
Solaranzeige soll nur den vorhandenen PV-Überschuss an die AC ELWA 2 weitergeben.
Gewünschte Funktion
Unter 98 % SOC soll die ELWA keinen Überschuss bekommen.
Ab 98 % SOC soll die ELWA den tatsächlich verfügbaren PV-Überschuss stufenlos übernehmen, maximal 3500 W.
Die ELWA wird über Modbus TCP angesteuert:
• Register 1000 = Leistungsvorgabe 0–3500 W
• Register 1082 = aktuelle Gesamtleistung der ELWA
Da Load.GesamtLeistung beim Deye die ELWA mit enthält, berechne ich momentan:
Hauslast = Deye Load.GesamtLeistung - ELWA-Istleistung PV-Überschuss = PV-Leistung – Hauslast
Bis 98/99 % SOC funktioniert das inzwischen sehr gut
Beispiel:
30.08. 14:11:21 - Akku: 99% | PV: 3192W | Deye-Load: 2456W | Load: 799W | ELWA-Ist: 1657W | Echter Ueberschuss: 2393W | Befehl: 2393W
30.08. 14:12:21 - Akku: 99% | PV: 3401W | Deye-Load: 3218W | Load: 936W | ELWA-Ist: 2282W | Echter Ueberschuss: 2465W | Befehl: 2465W
30.08. 14:13:21 - Akku: 99% | PV: 3417W | Deye-Load: 3329W | Load: 978W | ELWA-Ist: 2351W | Echter Ueberschuss: 2439W | Befehl: 2439W
30.08. 14:14:21 - Akku: 99% | PV: 3699W | Deye-Load: 3259W | Load: 920W | ELWA-Ist: 2339W | Echter Ueberschuss: 2779W | Befehl: 2779W
30.08. 14:15:22 - Akku: 100% | PV: 3271W | Deye-Load: 3633W | Load: 955W | ELWA-Ist: 2678W | Echter Ueberschuss: 2316W | Befehl: 2316W
Auch bei 100 % SOC läuft die Regelung zunächst weiter, solange der Deye noch eine normale PV-Leistung liefert.
Das Problem bei 100 % SOC
Problematisch wird es, wenn der Akku 100 % erreicht und die vom Deye gemeldete PV-Leistung plötzlich auf nur noch etwa 50–120 W zurückgeht.
Beispiel:
30.08. 14:17:21 - Akku: 99% | PV: 3092W | Deye-Load: 3475W | Load: 934W | ELWA-Ist: 2541W | Echter Ueberschuss: 2158W | Befehl: 2158W
30.08. 14:18:21 - Akku: 100% | PV: 91W | Deye-Load: 4087W | Load: 2006W | ELWA-Ist: 2081W | Echter Ueberschuss: -1915W | Befehl: 50W
30.08. 14:19:22 - Akku: 100% | PV: 47W | Deye-Load: 758W | Load: 714W | ELWA-Ist: 44W | Echter Ueberschuss: -667W | Befehl: 50W
30.08. 14:20:21 - Akku: 100% | PV: 123W | Deye-Load: 976W | Load: 933W | ELWA-Ist: 43W | Echter Ueberschuss: -810W | Befehl: 50W
30.08. 14:21:21 - Akku: 99% | PV: 3108W | Deye-Load: 732W | Load: 689W | ELWA-Ist: 43W | Echter Ueberschuss: 2419W | Befehl: 2419W
Ein weiteres Beispiel:
14:23 Akku 99% | PV 3297W | Befehl 2522W
14:24 Akku 100% | PV 77W | Befehl 50W
14:25 Akku 100% | PV 52W | Befehl 50W
14:26 Akku 99% | PV 3031W | Befehl 2306W
Das sieht für mich so aus:
Das sieht für mich so aus:
Bei vollem Akku fährt der Deye die PV zeitweise stark herunter. Dann kann mein Skript anhand der aktuellen PV-Leistung nicht mehr erkennen, welche Leistung bei zusätzlicher Last durch die ELWA eigentlich verfügbar wäre.
Sobald der SOC wieder auf 99 % fällt, steht unmittelbar wieder eine PV-Leistung von teilweise über 3 kW zur Verfügung und die normale Regelung funktioniert wieder.
Provisorische 50-W-Lösung
Momentan habe ich deshalb bei 100 % SOC eine kleine Mindestleistung eingebaut:
if ($batterieSoC >= 100 && $neueLeistung < 50) {
$neueLeistung = 50;
}
Damit bleibt die ELWA bei 100 % mit tatsächlich etwa 43–44 W aktiv.
Sobald der Deye wieder 99 % SOC meldet, ist diese 50-W-Sonderregel automatisch aufgehoben.
Das verhindert zumindest, dass die Regelung vollständig stehenbleibt. Es löst aber natürlich nicht das eigentliche Problem, dass bei 100 % die mögliche PV-Leistung nach der Abregelung nicht mehr aus dem aktuellen PV-Wert erkennbar ist.
Aktuelles user.steuerung.php
<?php
$ip_teil1 = "192.168.";
$ip_teil2 = "178.124";
$elwa_ip = $ip_teil1 . $ip_teil2;
// 1. SOC aus der Batterie holen
$deye_url = "http://localhost:8086/query?db=solaranzeige&q=" .
urlencode("SELECT last(SOC) FROM Batterie");
$deye_res = json_decode(@file_get_contents($deye_url), true);
if (isset($deye_res["results"][0]["series"][0]["values"][0][1])) {
$batterieSoC =
(int)$deye_res["results"][0]["series"][0]["values"][0][1];
} else {
$batterieSoC = 0;
}
// 2. PV-Leistung holen
$pv_url = "http://localhost:8086/query?db=solaranzeige&q=" .
urlencode("SELECT last(Leistung) FROM PV");
$pv_res = json_decode(@file_get_contents($pv_url), true);
if (isset($pv_res["results"][0]["series"][0]["values"][0][1])) {
$pvLeistung =
(float)$pv_res["results"][0]["series"][0]["values"][0][1];
} else {
$pvLeistung = 0;
}
// 3. Deye Gesamtlast holen
$load_url = "http://localhost:8086/query?db=solaranzeige&q=" .
urlencode("SELECT last(GesamtLeistung) FROM Load");
$load_res = json_decode(@file_get_contents($load_url), true);
if (isset($load_res["results"][0]["series"][0]["values"][0][1])) {
$hausLast =
(float)$load_res["results"][0]["series"][0]["values"][0][1];
} else {
$hausLast = 0;
}
$deyeLoad = $hausLast;
// Aktuelle ELWA-Leistung aus Register 1082 lesen
$elwaIstLeistung = 0;
$fp = @fsockopen($elwa_ip, 502, $errno, $errstr, 2);
if ($fp) {
$packet = pack("nnnCCnn", 1, 0, 6, 1, 3, 1082, 1);
@fwrite($fp, $packet);
$antwort = @fread($fp, 1024);
@fclose($fp);
if (strlen($antwort) >= 11) {
$wert = unpack("n", substr($antwort, 9, 2));
$elwaIstLeistung = (float)$wert[1];
}
}
// Hauslast ohne ELWA
$hausLast = $hausLast - $elwaIstLeistung;
if ($hausLast < 0) {
$hausLast = 0;
}
// PV-Überschuss
$echterUeberschuss = $pvLeistung - $hausLast;
// Regelung ab 98 % SOC
if ($batterieSoC >= 98) {
$neueLeistung = $echterUeberschuss;
if ($neueLeistung < 0) {
$neueLeistung = 0;
}
// Provisorische Mindestleistung bei 100 % SOC
if ($batterieSoC >= 100 && $neueLeistung < 50) {
$neueLeistung = 50;
}
if ($neueLeistung > 3500) {
$neueLeistung = 3500;
}
} else {
$neueLeistung = 0;
}
// Log
$zeitstempel = date("d.m. H:i:s");
$logZeile =
$zeitstempel .
" - Akku: " . $batterieSoC . "%" .
" | PV: " . $pvLeistung . "W" .
" | Deye-Load: " . $deyeLoad . "W" .
" | Load: " . $hausLast . "W" .
" | ELWA-Ist: " . $elwaIstLeistung . "W" .
" | Echter Ueberschuss: " . $echterUeberschuss . "W" .
" | Befehl: " . $neueLeistung . "W\n";
@file_put_contents(
"/var/www/log/elwa_steuerung.log",
$logZeile,
FILE_APPEND
);
// Sollwert per Modbus TCP an ELWA Register 1000 senden
$fp = @fsockopen($elwa_ip, 502, $errno, $errstr, 2);
if ($fp) {
$hexWatt =
str_pad(dechex((int)$neueLeistung), 4, "0", STR_PAD_LEFT);
$packet =
"000100000006010603e8" . $hexWatt;
@fwrite($fp, pack("H*", $packet));
@fclose($fp);
}
?>
Cron
Das Skript läuft einmal pro Minute mit 20 Sekunden Verzögerung:
* * * * * sleep 20; /usr/bin/php /var/www/html/user.steuerung.php >/dev/null 2>&1
Der Hintergrund dafür ist, dass die neuen Deye-Datensätze in meiner InfluxDB erst ungefähr 11–12 Sekunden nach Beginn der Minute erscheinen.
Ohne die Verzögerung wurden teilweise noch Deye-Werte aus dem vorherigen Zyklus mit der aktuell direkt aus der ELWA gelesenen Leistung verrechnet.
Mit den 20 Sekunden passen Deye-Load, ELWA-Ist und die daraus berechnete Hauslast wesentlich besser zusammen.
Meine Fragen
Ulrich, wie würdest du diese Regelung mit Solaranzeige aufbauen?
Mich interessieren insbesondere folgende Punkte:
1. Ist
Hauslast = Load.GesamtLeistung - ELWA Register 1082
bei diesem Deye grundsätzlich der richtige Ansatz?
2. Gibt es beim SUN-6K-SG03LP1-EU einen anderen Wert bzw. ein anderes Register, mit dem sich der tatsächliche Überschuss am Netzanschlusspunkt besser bestimmen lässt?
3. Gibt es eine Möglichkeit, bei 100 % SOC die noch mögliche PV-Leistung zu erkennen, bevor bzw. nachdem der Deye die PV heruntergeregelt hat?
4. Wäre es sinnvoll, beim Übergang 99 → 100 % den letzten gültigen Überschusswert zunächst weiterzuverwenden?
5. Oder sollte eine solche ELWA-Regelung grundsätzlich häufiger als einmal pro Minute laufen?
Mir ist wichtig, dass die Nulleinspeisung weiterhin komplett durch Deye und DTSU666 geregelt wird. Ich möchte mit Solaranzeige nur die überschüssige Leistung möglichst sauber an die ELWA 2 weitergeben.
Für Hinweise, wie man das in Solaranzeige sauberer lösen könnte, wäre ich dankbar.
Viele Grüße
Karl-Heinz
Deye SUN-6K-SG03LP1-EU + my-PV AC ELWA 2 – Überschussregelung funktioniert bis 99 %, Problem bei 100 % SOC / PV-Abregelu
Moderator: Ulrich
-
solareiXLZCM6farmer
- Beiträge: 4
- Registriert: Mi 17. Jul 2024, 00:35
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste