Hallo Walter,
Vielen Dank für deinen tollen Bericht! Es freut mich sehr, dass deine Anlage mit meiner Platine läuft. Das sind die spannendsten Beiträge. Es scheint unzählig viele Varianten zu geben den Wechselrichter / meine Platine anzusprechen (HomeAssistent, ioBroker, Raspberry, SDM630, Arduino,...)
Viele Grüße
Trucki
Guten Abend!
Eigentlich wollte ich zum Thema im Photovoltaik-Forum schreiben, aber da ist ja nix los im Thread -> Also nächste Anmeldung hier ![]()
Ich bin nur Amateurfrickler und habe mich nach den letzten Strompreiserhöhungen bereits Ende letzten Jahres angefangen als "Notwehr" Solar aufs Dach und ne Batterie zusammengebastelt im Keller, die über billige Umrichter geladen wird.
Dann fehlte nur noch das Auslesen und das Basteln mit einem Poti für die Nulleinspeisung. Im Grunde hatte ich das soweit, aber war mir nicht sicher, ob das lange halten würde. Genau zum Zeitpunkt der Umsetzung dieses zweiten Teils kam mir neulich diese Platine über den Weg, da hab ich doch gleich zugeschlagen.
Jetzt will ich 3 Umrichter ansteuern. Zunächst mal phasenweise Nulleinspeisung realisieren, später vielleicht einfach über alle drei Phasen den Gesamtverbrauch zu je 1/3 einspeisen, der Zähler saldiert ja dann, das kann man dann ja schnell umstellen, wenn man das über den Arduino z.B. macht.
Bei mir sind die Platinen nun angekommen (Yay! Danke!!!) , nur 2 Fragen vom Dummy (also mir) bleiben:
A) Um das Teil "normal" über ModBus anzusprechen nutze ich den Stecker [ B A ] unten rechts und löte nur noch die IDs, die ich will, zusammen?
Auch wenn ich das dann über den Arduino machen möchte, UART muß dafür ja nicht sein, richtig? Der Arduino ist ModBus Master, der bisher über 2 Strippen bereits den Zähler ausliest.
B) Für eine Nutzung am SUN2000, muß man da den Kontakt [2000W] auch zusammenlöten?
Guten Abend,
ja genau alles richtig. Ein Arduino Projekt das Dir bestimmt weiterhilft ist dieses hier:
https://github.com/trucki-eu/SDM630-zero-export-controller-Arduino-
Da hast Du den Schaltplan, um deinen Arduino mit RS485 auszustatten und den Master, um meine Platine anzusprechen.
Viele Grüße,
Trucki
Hallo Trucki,
Noch ein Tipp (den bislang keiner machen wollte):
Meine Nulleinspeisung funktioniert viel besser seit ich die aktuell erzeugte Leistung (AC Display) verwende um die neue Leistung (AC Setpoint) zu berechnen.
ACSetpoint = ACDisplay + Netzbezug
Als Feinheiten ziehe ich noch 50W ab und Filter noch mit einem1/60 Mittelwert:
ACSetpoint=ACSetpoint-50W
ACSetpoint_new = (ACSetpoint_old*59+ACSetpoint)/60
Viele Grüße
Trucki
genau so mache ich es auch.
ACDisplay + Netzbezug.
In meiner Berechnung setze ich noch das Limit. Wenn >850W dann =850W
var gtil2 = msg.gtil2;
var stromzaehler = msg.stromzaehler;
msg.payload = Number(gtil2) + Number(stromzaehler);
if (msg.payload < 0) {
msg.payload = 0;
}
if (msg.payload > 850) {
msg.payload = 850;
}
return msg;
Nur was genau meinst du mit 1/60 ?Da komme ich nicht ganz mit. 
Juhu, das freut mich, dass AC Display verwendet wird. Das war der eigentliche Grund für mich, die Platine überhaupt zu entwickeln.
Wenn ich einen neuen AC Setpoint ausrechne, dann verwende ich 59x mal den alten Wert und nur 1x mal den neu berechneten Wert. Das mache ich ca. alle 500ms. D.h. es dauert ca. 30s bis ein neuer AC Setpoint vollständig beim Inverter angekommen ist.
Viele Grüße,
Trucki
Hallo Zusammen,
anbei ein kleines Arduino-Programm für einen ESP8266, welches die "TotalPower" vom Shelly 3EM holt und an den UART Port meiner Platine weitergibt:
Der Arduino-Code ist sicher noch weit entfernt von perfekt, aber vielleicht hat jemand Lust das mal zu testen. Testen konnte ich es bislang leider nur mit einem Shelly 1PM.
Es sollte reichen SSID, Passwort und Shelly IP im Code zu ändern und dann mit der Arduino IDE auf z.B. ein Wemos D1 mini board zu flashen.
Ruft man die IP des ESP8266 / Wemos D1 Mini im Browser auf sollte man das sehen:
Viele Grüße,
Trucki
66234=10585-Arduino_GTIL2_WebServer_Master.zip|attachment (3.23 KB)
Oha
jetzt wirds interessant, Trucki deine Platine habe ich ja nun. Shelly 3EM habe ich ja, jetzt warte ich noch auf Alis Lieferung Wemos D1 mini board.
Und dann kommen garantiert beim betreten dieses Neulandes Fragen
:idea: :?:
Hallo Maxim,Hallo Trucki,
toll, vielen Dank für die schönen Bilder. Es ist jedes Mal spannend in andere Keller gucken zu können ;-)
Schneller und genauer Regeln:
Nein, das liegt nicht am DAC. Der ist schnell und genau. Es liegt an meinen sehr konservativen Regelparametern, die ich für den SMD630 Modus verwende:
- Immer zwischen 25-75W aus dem Netz beziehen
- Inverter-Output langsam hochfahren (über ca. 60s) und schnell runterfahren (ca.1-2s)
Die Motivation dahinter ist, so wenig wie möglich ins Netz einzuspeisen.
Mit einem eigenen Arduino könntest Du die Parameter so anpassen, wie es für Dich am besten passt. Aus diesem Grund habe ich den SDM630 Regler als eigenes Projekt hier veröffentlicht:
https://github.com/trucki-eu/SDM630-zero-export-controller-Arduino-
Der Code ist nicht ganz aktuell. Z.B. fehlt das Status-Telegramm für den ESP8266 oder die Begrenzung auf 850/1850W. Wenn ich die ganzen Platinen-Anfragen bewältigt habe, dann mache ich mal ein Update.
Damit könnte man auch mehrere SUNs/Platinen ansprechen und kaskadieren. Hier wird es auch so individuell, dass es keinen Sinn macht das in die Firmware meiner Platine zu integrieren.
Viele Grüße,
Trucki
ich wäre soweit meine zwei Sun 2000 mit RS485 Interface zu kaskadieren. Könntest du bitte den "Zero Export" Code anpassen?
Die Begrenzung auf 1850W würde ich hinbekommen aber ich weis nicht was mit Status Telegram gemeint ist.
Danke im voraus.
Gruß Maxim
Hallo Maxim,
Kaskadieren habe ich noch nie produktiv genutzt, da mir der SUN2000 in der Regel reicht. Mit 2xSUN1000 habe ich mal damit rumgespielt und gesehen, dass die Strategie hier eine wesentliche Rolle spielt.
Ich habe damals zwei Ansätze ausprobiert:
1) Den 2. SUN mit maximaler Leistung einschalten, sobald der Hausverbrauch größer ist als die maximale Leistung des ersten SUN1000.
Vorallem im Grenzbereich hat das schnell zum Schwingen der Regelung geführt.
2) Die Leistung 50/50 zwischen den beiden SUN1000 aufteilen. Das hat sehr gut funktioniert. D.h. wenn das Haus 260W verbraucht, dann erzeugt jeder SUN1000 130W. Wichtig war auch hier immer die tatsächlich erzeugte Leistung jedes Wechselrichters zurückzulesen und mit in die Berechnung des nächsten Leistungswerts mit aufzunehmen.
Bei zwei SUN2000 muss man vielleicht eine Kombination aus 1+2 bauen, da der SUN2000 ja nicht weniger als 75W einpseißen kann und sich erst ab 100W stabil regeln lässt. Vielleicht bis 400W nur einen SUN2000 verwenden und ab 400W die Leistung auf beide aufteilen. Natürlich nur, wenn der Hausverbrauch überhaupt unter 200W liegen kann.
Im Moment arbeite ich gerade an dem Shelly Projekt (siehe 3 Beiträge früher). Deshalb komme ich gerade nicht zum Update des "Zero Export Controllers" .
Die aktuelle Regelung mit Begrenzung findest Du in dem *.ino des Shelly Projekts.
Ich hoffe, dass Du so eine Regelung programmieren kannst. Das geht ja erstmal auch ohne StatusTelegramme. Meld Dich noch mal wenn Du so weit bist. Ich verstehe gut, dass die Erweiterung des Statustelegrams nicht ganz einfach ist.
Viele Grüße,
Trucki
Hallo Trucki,
die "Nulleinspeisung" mit deine Platine läuft sehr gut.
Nachdem die Sonne jetzt ja nicht mehr soviel Energie liefert, dass bei mir der Akku voll wird und der Solarcontroller abregelt, habe ich die maximale Leistung des GTIL1000 auf konstant 200W begrenzt.
Was mir jetzt aufgefallen ist, dass dabei die Einspeiseleistung immer wieder etwas schwankt (auch wenn die Gesamtleistung im Haus viel höher ist): sie fällt nach einigen Minuten ab auf ca. 175W und steigt dann über einige Minuten wieder langsam an bis ca. 190W. Dann macht sie einen Sprung auf die eingestellten 200W. Dieses Muster kann man in den Diagrammen und meinen Logfiles immer wieder sehen. In den Logfiles sehe ich, dass die vorgegebene Leistung wirklich 200W ist. Es gibt ab er dann auch wieder Phasen über Stunden, in denen genau 200W eingespeist werden.
Kennst du so ein Verhalten? Hast du eine Idee, woran das liegen könnte?
Hat GTIL einen Defekt?
Viele Grüße,
Walter
Hallo Walter,
ja dieses Verhalten habe ich für den SUN2000 aufgrund dessen Hystereseverhalten in die Firmware aufgenommen. Empfangene Setpoints werden nach diesen Regeln korrigiert:
- setpoint ist im Bereich von 180-250W,
- setpoint > 225W -> neuer setpoint= 250W
- setpoint < 225W -> neuer setpoint= 200W
- ACDisplay > 200W und Setpoint 180-250W -> neuer Setpoint = 180W
Die Routine ist relativ komplex und ich möchte nicht ausschließen, dass Du einen Bug gefunden hast, aber eigentlich sollte die Routine deaktiviert sein, wenn der 2000W Jumper nicht geschlossen ist.
Deshalb die naheliegende Frage: Der 2000W Jumper ist offen?
Gruß,
Trucki
Hallo Walter,
ich habe mal ein paar Werte mit einem SUN1000 getestet und bin mir relativ sicher, dass die Hysteresenkompensation des SUN2000 beim SUN1000 richtig abgeschaltet wird.
Dennoch scheint auch mein SUN1000 sich im Bereich 170-190W schwerer zu tun genaue Werte zu erreichen.
Konkret habe ich folgende Werte auf Reg0 geschrieben und folgende Leistungen ca. 5s später am Display abgelesen:
Reg0[W*10] -> Display [W]
3000 -> 299 (-1W)
2300 -> 228 (-2W)
2000 -> 207 (+7W)
1900 -> 199 (+9W)
1800 -> 193 (+13W)
1700 -> 186 (+16W)
1600 -> 158 (-2W)
Erklären kann ich diese Beobachtung nicht. Zumal meine vorhergehenden Messungen des RT1 Eingangs vs. Ausgangsleistung eigentlich ein sehr lineares Verhalten in diesem Bereich zeigen:
Eventuell spielt hier irgendein langsames Verhalten des SUN1000 mit rein, welches ich nicht erfasst habe.
Ich behaupte mal die Leistung auf 160W oder 230W zu begrenzen sollte helfen.
Viele Grüße,
Trucki
Hallo Trucki,
Danke für dein Feedback. An deine Platine komme ich erst, wenn ich den GTIL1000 wieder abbaue. Ich habe zwar ein Foto, aber nur im eingebauten Zustand und teils durch Kabel verdeckt. Die Versionsnummer sieht nach 07.2022 aus, falls das etwas im Hinblick auf 1000/2000 aussagt.
Ich werde das Ganze weiter beobachten. Vielleicht hat mein GTIL1000 ja auch eine kleine Macke.
Bei früheren Messungen habe ich festgestellt, dass die Kennlinie von 200 bis 800W ziemlich linear verläuft. Unter 200W scheint sie auch einigermaßen linear, aber steiler.
Danke nochmals für deine Unterstützung,
Walter
Hallo Trucki,
habe eine Frage zu deinem Arduino-Programm für Shelly 3EM.Ich beziehe die Gesamtleistung über ein Zwave Qubino 3-phase Smart Meter,
Totalpower liegt dann im IoBroker an und den frage ich mit simple-api ab.
http://XXX.XXX.XXX.XX:8087/getPlainValue/fhem.0.ZWave_METER_42_01.Leistung
Bei Abfrage mit dem Browser wird der Wert mit einer Kommastelle geliefert.
Wie kann ich nun den Sketch für mich anpassen. Da ich mich mit Arduino nicht so recht auskenne
sind mein Versuche fehlgeschlagen.
Gruß Holger
Hallo Holger,
ah wieder ein Smartmeter, dass ich noch nicht kannte ![]()
Warum willst Du Dich mit dem Arduino quälen und rechnest die Leistung die der SUN machen soll nicht im ioBroker aus und schickst sie z.B. über ein ESP8266(mit ESPHome/Tasmota) an meine Platine? Ab Seite 3 in diesem Thread gibt es ja einige User (z.B. zaimaen) die genau das machen nur mit einer IR Diode oder einem Shelly 3EM.
Wenn es doch Arduino sein muss:
Den Arduinocode kannst Du kompilieren, flashen und bekommst auch einen DebugOutput auf der seriellen Konsole(9600baud)?
Ein Ansatz wäre schon mal deine URL hier einzutragen:
const char* shellyapiurl = "http://192.168.1.217/status";
Danach musst Du die Routine
int readShelly(void)
so anpassen, dass sie den Totalpower Wert vom Smartmeter holt und in eine variable schreibt.
Mit:
String myString = http.getString();
Serial.println(myString);
siehst Du schon mal was vom Smartmeter kommt und kannst dann anfangen die Totalpower da rauszufiltern.
... wie gesagt. Ich würde mit der Umgebung (vermtl. ioBroker?) anfangen in der ich mich auskenne.
Viele Grüße,
Trucki
Hallo Trucki,
Ich dachte mit Arduino habe ich die Regelung mit deiner Platine kompakt im Sun1000
und brauch es nicht ioBroker machen lassen, aber die Gesamtleistung des Smartmeter
geht ja eh über den ioBroker.
Ja es sind erst nur Trockenübungen da ich noch auf die Platine warte.
Trucki danke für die Nachricht.
Gruß Holger
Kommt bald! Ich warte nur noch auf ein paar olle Abstandsbolzen.
Guten Morgen,
ich habe die erste Version meines Trucki2Shelly Gateways unter https://github.com/trucki-eu/Trucki2Shelly-Gateway veröffentlicht.
Es handelt sich um ein *.bin file, welches man auf ein WEMOS D1 Mini flashen kann. Das WEMOs Modul spricht mit meiner Platine über UART und ließt die total Power aus dem Shelly 3EM über http aus.
Wäre cool, wenn das mal jemand testen kann. Ich habe kein Shelly 3EM.
Viele Grüße,
Trucki
Hallo Maxim,Hallo Trucki,
Kaskadieren habe ich noch nie produktiv genutzt, da mir der SUN2000 in der Regel reicht. Mit 2xSUN1000 habe ich mal damit rumgespielt und gesehen, dass die Strategie hier eine wesentliche Rolle spielt.
Ich habe damals zwei Ansätze ausprobiert:
1) Den 2. SUN mit maximaler Leistung einschalten, sobald der Hausverbrauch größer ist als die maximale Leistung des ersten SUN1000.
Vorallem im Grenzbereich hat das schnell zum Schwingen der Regelung geführt.
2) Die Leistung 50/50 zwischen den beiden SUN1000 aufteilen. Das hat sehr gut funktioniert. D.h. wenn das Haus 260W verbraucht, dann erzeugt jeder SUN1000 130W. Wichtig war auch hier immer die tatsächlich erzeugte Leistung jedes Wechselrichters zurückzulesen und mit in die Berechnung des nächsten Leistungswerts mit aufzunehmen.
Bei zwei SUN2000 muss man vielleicht eine Kombination aus 1+2 bauen, da der SUN2000 ja nicht weniger als 75W einpseißen kann und sich erst ab 100W stabil regeln lässt. Vielleicht bis 400W nur einen SUN2000 verwenden und ab 400W die Leistung auf beide aufteilen. Natürlich nur, wenn der Hausverbrauch überhaupt unter 200W liegen kann.
Im Moment arbeite ich gerade an dem Shelly Projekt (siehe 3 Beiträge früher). Deshalb komme ich gerade nicht zum Update des "Zero Export Controllers" .
Die aktuelle Regelung mit Begrenzung findest Du in dem *.ino des Shelly Projekts.
Ich hoffe, dass Du so eine Regelung programmieren kannst. Das geht ja erstmal auch ohne StatusTelegramme. Meld Dich noch mal wenn Du so weit bist. Ich verstehe gut, dass die Erweiterung des Statustelegrams nicht ganz einfach ist.
Viele Grüße,
Trucki
meinst du mit dem Status Telegramm das senden der Werte in zB. den Iobroker (MQTT)?
Gruß Maxim
Hallo Maxim,
ja das war natürlich Blödsinn von mir. Der ZeroExportController (https://github.com/trucki-eu/SDM630-zero-export-controller-Arduino-/blob/main/code/GTIL2_SDM630_Example.ino) sendet ja gar keine Statustelegramme. Das macht ja nur meine Platine.
Kurz gesagt: Wenn Du zwei GTIL2's hast und die Leistung erstmal gleichmäßig aufteilen möchtest, dann kannst Du im loop folgende Zeile
if (!write_gtil(avgPower) ) Serial.println("Error writing SUN GTIL2");
durch folgende Zeilen ersetzen:
gtil_id = 1;
gtil_node.begin(gtil_id, mySerial);
delay(200);
if (!write_gtil(avgPower/2) ) Serial.println("Error writing SUN GTIL2 - ID1");
delay(200); //Zu schnelles wechseln der ID's könnte Probleme machen.
gtil_id = 2;
gtil_node.begin(gtil_id, mySerial);
delay(200);
if (!write_gtil(avgPower/2) ) Serial.println("Error writing SUN GTIL2 - ID2");
Viele Grüße,
Trucki


