Benachrichtigungen
Alles löschen

[Oben angepinnt] Sun GTIL2-1000 RS485 Interface

1,308 Beiträge
161 Benutzer
103 Likes
89.9 K Ansichten
(@zaimaen)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 35
 

Oach ich glaube ich würde es auf einen Versuch ankommen lassen. Notfalls lernt man daraus und vielleicht kann man etwas anpassen um sie für alle sun's nutzen zu können.

Ich hatte auch eine PN geschrieben aber ich sehe keine Antworten.

viele grüße


   
AntwortZitat
(@trucki)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 369
Themenstarter  

Hallo Jarek,

vielen Dank für die Bilder vom SUN 2000 ohne ext. Limiter Eingang. Die Bilder sehen gut aus. Der notwendige analog Eingang RT1 ist vorhanden. Auch das Displaykabel sieht wie beim SUN1000 aus. Lediglich die Lookup Table die die Zuordnung von Leistung in W zu analog Eingang in V macht wird nicht stimmen und ich bin mir nicht sicher, ob die Kalibrierung so große Abweichungen kann. Aber das werden wir wohl jetzt rausfinden 😉

Viele Grüße,
Trucki

@zaimaen: habe dir eine PN geschrieben


   
AntwortZitat
(@sunseeker)
Newbie
Beigetreten: Vor 2 Jahren
Beiträge: 2
 

Hallo Trucki,
nachdem ich jetzt freudig auch so ein Modul von dir bekommen habe, stellen sich mir noch ein paar Fragen, vielleicht hast du Tipps für mich und uns.

Mit dem Blick auf dein github Repository bin ich mir noch nicht schlüssig, welchen Weg ich für die Steuerung deines Interface gehen soll, mit einen Arduino oder einen Raspberry Pi. Letzterer wäre mir lieber, da ich mit Python programmieren besser vertraut bin als C auf dem Arduino. Dennoch würde ich mir beides ansehen.

Bei dem Arduino wird bei dem abgebildeten Beispiel im Repository, so verstehe ich das bisher, der Wert der aktuellen Leistung aus dem Sun1000 ausgelesen
Z20: uint16_t vgrid = node.getResponseBuffer(2);
Ich weiß nicht, ob ich das richtig verstehe.. hier wird die eine Phase ausgelesen, die der Sun1000 eben lesen kann? Müsste man an der Stelle einbauen, die 3-phasige Last von irgendwoanders zu lesen?

Mein Setup ist, dass ich einen Shelly3em am Sicherungskasten betreibe, der mir über seine API die Haus-Netzlast auf den drei Phasen ausgibt. Das wäre, stelle ich mir vor, meine Ausgangsbasis, um den Sun 1000 zu steuern.
Dass ich den Sun 1000 kalibrieren muss, damit er seinen lookuptable schreiben kann, habe ich soweit verstanden.

Ich sehe die Möglichkeit, dass ich am Raspberry Pi mit mbpoll die Leistung einstellen könnte, anzustreben wäre aber eine Python Bibliothek. modbus unter Python ist mir bisher unbekannt, hast du einen Tipp für eine lib? Reicht vielleicht sowas wie 'minimalmodbus'?

Falls du schon Code zu fertigen Ansätzen kennst, das Interface mittels von extern gelesener Last zu steuern, wäre ich da sehr dankbar drum.

Schöne Grüße!


   
AntwortZitat
(@derbuchner)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 107
 

Hallo Trucki,

wenn ich den Leseteil nicht benötige, sondern nur Werte für den max. AC Output schreiben wollte, würde es dann reichen einen DAC an den Analog Input (RT1, 2Pin JST2.54) des Sun GTIL2 zu bauen?

Zum Beispiel einen esp8266 (mit DAC über I2C angeschlossen) direkt im Gehäuse verbauen. Oder einen ESP32 mit integriertem DAC (aber der hat nur 8-bit Auflösung, das dürfte zu grob sein).

Stromversorgung würde ich, wie Du, vom Display (12V) nehmen und auf 3,3V herunterregeln.

Würde das funktionieren?


   
AntwortZitat
(@trucki)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 369
Themenstarter  

@ DerBuchner: Ja das geht. Theoretisch. Jetzt nach 3 Jahren Erfahrung und einem geschrottetem Wechselrichter, der mir um die Ohren geflogen ist achte ich auf galvanische Trennung und Überspannungsschutzdioden. Zudem habe ich das Gefühl, dass nicht nur meine Schaltung, sondern auch der Analogeingang des Wechselrichters driftet und das Rücklesen und Regeln der tatsächlich eingespeisten Leistung durchaus sinnvoll sein kann.


   
AntwortZitat
(@trucki)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 369
Themenstarter  

Hallo Sunseeker,

vielen Dank, dass Du deine Frage nochmal umgearbeitet hast und ins Forum gestellt hast.

Der auf GitHub veröffentlichte Arduino Code dient nur dazu meine Platine zu Testzwecken über RS485/Uart anzusteuern. D.h. der Testcode kann alle 6 Register (Set AC, Read AC, VGrid, VBat, DAC u. Calibration Step) auslesen und SetAC, DAC und Calibration schreiben. Es ist kein Code enthalten, um den Hausverbrauch zu ermitteln.

Dein Ansatz ist grundsätzlich richtig. Ein Arduino/Raspberry soll den aktuellen Netzbezug von einem z.B. Shelly3EM oder auch einem SDM630 holen und an meine Platine via UART/RS485 weiterschicken. Mehr Details zum "Weiterschicken" weiter unten.

Da ich keine Ahnung hätte wie ich mit einem Arduino/ESP8266 den Shelly3EM auslesen sollte, würde ich auch den Raspberry vorziehen. Zumal Du dich mit der Programmierung davon schon auskennst. Nein, ich kenne leider keine Phython ModBus lib.

Richtig, die Kalibrierung kannst Du einmal mit MBPoll starten. Oder auch mit einem Arduino mit oben genanntem Testprogramm. Oder einem USB RS485/Uart Adapter und dem Programm ModLinkDemo64.exe .

Der Raspberry ist sicher langsamer als ein Arduino. D.h. er wird seltener den Netzbezug auslesen können und an die RS485 Platine weiterleiten können. Wenn im Haus ein starker Verbraucher eine Weile lief und dann abgeschaltet wird, dann wird vom Wechselrichter noch solange zuviel Leistung eingespeißt, bis der Raspberry den neusten Netzbezug an den Wechselrichter geschickt hat. Es wird also für ca. 1-5s Strom ins Netz geschickt. Wenn das nicht weiter stört, dann spricht nichts gegen den "langsameren" Raspberry. In jedem Fall ein guter Weg um mal zu starten.

Ich habe bei mir eine Regelung mit einem Arduino und einem SDM630 Smartmeter aufgebaut. Der Arduino holt den Netzbezug vom SDM630 und leitet ihn an den Wechselrichter weiter. Liegt der Netzbezug zwischen 25W-75W passiert garnichts. D.h. der Wechselrichter speißt weiter mit der zuletzt geforderten Leistung ein. Ist der Netzbezug größer als 75W, dann wird der über die letzten 120s ermittelte Netzbezug an den Wechselrichter weitergegeben. Genauer gesagt wird der gemittelte Netzbezug -50W weitergegeben, damit ich wieder im Bereich 25W bsi 75W lande. Ist der Netzbezug kleiner als 25W dann wird sofort der aktuelle Netzbezug an den Wechselrichter geschickt, damit so wenig wie möglich Strom ins Netz gespeißt wird.

Warum so kompliziert und träge beim Hochfahren? Mir ist eine möglichst geringe Netzeinspeißung wichtig. Verbraucher wie z.B. der Backofen schalten fortlaufend an und aus. Dadurch würde permanent beim Abschalten des Backofens Strom zurück ins Netz gespießt. Deshalb das träge Hochfahren des Wechselrichters über 120s und das schnelle Runterfahren in ca. 1s.

Noch ein kleines Detail: Wie im vorherigen Post schon geschrieben kann man sich nie sicher sein, ob der Wechselrichter wirklich das einspeißt was man als Soll-Wert gesetzt hat. Das ist der Grund warum meine Platine den Ist-Wert aus dem Display ausließt. Natürlich regelt der uC auf der Platine auch gemäß dem letzten aus dem Display ausgelesenem Wert nach. Diese Nachregelung ist aber auch eher langsam. Aus diesem Grund berechene ich den Soll Wert den der Arduino an den Wechselrichter schickt so:

Soll-Wert = Ist-Wert + Netzbezug - 50W

...
So dann mal los mit der Kritik 😉 Ich weiß, dass das sicher nicht die optimalste Art der Nulleinspeißung ist. Dennoch hat sich dieser Alogrithmus über die letzten 3 Jahre so bei mir entwickelt und läuft jetzt so stabil, dass ich Zeit für kleine RS485 Interface Platinen habe.

Viele Grüße,
Trucki


   
AntwortZitat
(@derbuchner)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 107
 

@ DerBuchner: Ja das geht. Theoretisch. Jetzt nach 3 Jahren Erfahrung und einem geschrottetem Wechselrichter, der mir um die Ohren geflogen ist achte ich auf galvanische Trennung und Überspannungsschutzdioden.

Welche Sperrdioden verwendest Du? Und wo genau schaltest Du die dazwischen? Wenn eine am Ausgang vom DAC hängt, dann ändert sich doch die Spannung (also der Wert für den Regler) dramatisch, nicht?

Zudem habe ich das Gefühl, dass nicht nur meine Schaltung, sondern auch der Analogeingang des Wechselrichters driftet und das Rücklesen und Regeln der tatsächlich eingespeisten Leistung durchaus sinnvoll sein kann.

Guter Punkt. Ich habe/hatte die Hoffnung, dass ich die Regelung rein mittels meines Shelly 3EM hinbekomme. Ich müsste mal schauen wie oft der Shelly mir per MQTT Updates schickt. Dieses "Solar" ist noch alles #neuland für mich 😀


   
AntwortZitat
(@sunseeker)
Newbie
Beigetreten: Vor 2 Jahren
Beiträge: 2
 

Hallo Trucki,

vielen Dank dass du dir die Zeit genommen hast, diese lange Antwort zu schreiben!

Ich kann die Strategie deiner Leistungsjustierung durchaus verstehen! Ich denke, so einen Weg werde ich auch gehen. Im Zweifel habe ich immer einen höheren Strombedarf über den Tag als ich mit meiner kleinen Anlage liefern kann, deswegen ist es auch für mich die beste Strategie, möglichst nichts ins Netz zu speisen.

Ich werde mich also die Tage daran machen, deine Platine einzubauen und auszuprobieren. Da ich schon einen Raspberry Pi dort hängen habe, der den Inselwechselrichter ausliest, kann der auch noch die Steuerung vom Sun 1000 übernehmen. Vielleicht probiere ich anschließend mal, ob ich es aber nicht auch mit einem ESP8266 D1 mini hinbekomme.

Nur weil du das noch genannt hast.. der Shelly3EM hat eine REST API, die alle aktuellen Daten liefert. Wenn man sie z.B. aufruft über http://<shelly3em-hostname>/status bekommt man ein JSON zurück, der unter dem Schlüssel "emeters" alle gemessenen Volt und Watt der Phasen enthält. Die Gesamtleistung steht unter dem Schlüssel "total_power".
Der Arduino kann per REST Api Client wie dem hier (noch nicht getestet) https://github.com/robbie-remote/RESTClient die Shelly API abfragen und per deserializeJson() auf die Werte aus dem JSON String zugreifen. So werde ich das mal versuchen.

Viele Grüße!


   
AntwortZitat
(@derbuchner)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 107
 

... der Shelly3EM hat eine REST API, die alle aktuellen Daten liefert. Wenn man sie z.B. aufruft über http://<shelly3em-hostname>/status bekommt man ein JSON zurück, der unter dem Schlüssel "emeters" alle gemessenen Volt und Watt der Phasen enthält. Die Gesamtleistung steht unter dem Schlüssel "total_power".

Super! Danke. Das wusste ich noch nicht. Kann ich gut gebrauchen, der Wert wird sehr oft upgedated und ist immer aktuell. Kann ich zusätzlich zu MQTT benutzen (Fallback/gegenchecken).

... ob ich es aber nicht auch mit einem ESP8266 D1 mini hinbekomme.

Ich halte den ESP8266/ESP32, der mit dem SUN kommuniziert, so dumm wie möglich. Der bekommt nur einen REST-Server drauf, der den Power Wert empfägt und dann auf dem SUN setzt. Den Rest, also das Gehirn mit der Regelung, lasse ich wo anders laufen. Das kann ich dann in Python machen, ist mir viel lieber als C. Vielleicht kann ich da, in Zukunft, sogar bisschen was mit Mustererkennung/Machine Learning einbauen, damit z.B. erkannt wird "OK, das ist jetzt der Herd, der schaltet zyklisch ein/aus" oder "OK, das ist jetzt der Fön, der zieht permanent 1500W" - und entsprechend darauf reagieren.


   
AntwortZitat
(@barnabas1231)
Newbie
Beigetreten: Vor 2 Jahren
Beiträge: 1
 

Hallo Trucki,
ich hätte auch Interesse an diesem Interface, PN habe ich gesendet, jedoch noch keine Antwort erhalten.


   
AntwortZitat
(@trucki)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 369
Themenstarter  

Guten Morgen,

jetzt sind alle Platinen verschenkt/verkauft/versprochen und ich habe einen neuen Satz nachbestellt.In 3-4 Wochen wird es dann wieder welche geben. Ich werde wohl den Preis um 5-8€ erhöhen, da Bauteile jetzt zwar wieder verfügbar, aber teuer sind.

Zur 2000W Variante gibt es noch nichts Neues. Bislang weiterhin ungetestet.

Könnte vielleicht jemand mal ein 10kOhm Poti an seinen analog Eingang seines SUN GTIL2-2000W anschließen und mit einem Multimeter die Spannung(!) an den beiden Poti-Pins bei verschiedenen Leistungen messen?

Achtung wie immer bitte darauf achten, dass die AC Phase am richtigen Pin des AC Eingangs angeschlossen ist!

Poti anschließen geht grundsätzlich so:

Leistungen für die ich die Spannung an den beiden Poti-Pins bräuche sind:
37.0W = x.xV
42.0W = x.xV
47.0W = x.xV
52.0W = x.xV
55.0W = x.xV
60.0W = x.xV
67.0W = x.xV
75.0W = x.xV
80.0W = x.xV
94.0W = x.xV
110.0W = x.xV
120.0W = x.xV
134.0W = x.xV
150.0W = x.xV
160.0W = x.xV
188.0W = x.xV
220.0W = x.xV
250.0W = x.xV
370.0W = x.xV
390.0W = x.xV
700.0W = x.xV
1000.0W = x.xV
1200.0W = x.xV
1400.0W = x.xV
1600.0W = x.xV
1900.0W = x.xV
2000.0W = x.xV (bzw. statt 2kW die maximale Leistung)

Natürlich brauche ich die Leistungen nicht ganz genau. Am Ende wird sowieso interpoliert. Die kleineren Leistungen (beim Sun1000 bis 200W) müssen feiner abgetastet werden, da dort das Verhalten deutlich unlinearer ist als bei Leistungen >200W.

Das wäre super, dann hätte ich einen Ausgangswert für die 2000W Variante.

Danke
Gruß,
Trucki


   
AntwortZitat
(@zaimaen)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 35
 

Guten Morgen in die Runde und erstmal Danke an Trucki für die tolle Arbeit. Nachdem ich mich mit meinem sun2000 an diversen Regelungen über den externen limitereingang und selbstgebastelten Lösungen versucht habe kann ich bestätigen, dass die Platine auch an dem sun2000 ohne Probleme läuft. Ich habe dazu den jumper auf 2000w zusammengelötet und nutze für die Kommunikation die uart Schnittstelle (Widerstand auf der platine entfernt). Die Daten kommen per esphome an und der sun lässt sich auch auf vorgegebene Werte steuern. Großes Lob an Trucki. So stabil lief bisher keine andere Lösung.

- Platine angeschlossen und alle Kabel und Schrauben dabei, spitze
- sun 2000 lässt sich endlich steuern
- Auf dem wemos d1 Mini läuft auch ein kleiner Server, diensteuerung geht daher ohne installiertes esphome

Einziger Wermutstropfen und das liegt NICHT an der Platine, ich nutze seit Jahren iobroker und da klappt die Anbindung über den esphome Adapter leider nicht. Konnte nicht genau ausprobieren woran es liegt, der esp wird erkannt, die Verbindung ist aber (mit dem skript von github für homeassistant) immer wieder weg und eine Steuerung bzw. das Anzeigen der Daten ist so direkt (noch) nicht möglich.

Da ich aber gerade im Urlaub bin und keinen Zugriff auf die Daten und Hardware habe, kann ich diese erst später nachreichen.


   
AntwortZitat
(@und-mehr)
Heroischer Stromgenerator
Beigetreten: Vor 2 Jahren
Beiträge: 1098
 

Einziger Wermutstropfen und das liegt NICHT an der Platine, ich nutze seit Jahren iobroker und da klappt die Anbindung über den esphome Adapter leider nicht. Konnte nicht genau ausprobieren woran es liegt, der esp wird erkannt, die Verbindung ist aber (mit dem skript von github für homeassistant) immer wieder weg und eine Steuerung bzw. das Anzeigen der Daten ist so direkt (noch) nicht möglich.

Benutzt du im ESPHome die api: oder mqtt: publication?
Über api hatte ich bei den 2866ern auch Verbindungsabbrüche in Homeassistant wen es viele sensordaten gibt.
au mqtt umgestellt liefen die dann wieder unterbrechungsfrei. Der Bug war reproduzierbar.
Weil HA und EspHome mqtt-discovery benutzen und dieselben Objektnamen wie bei api entstehen hatte ich damit auch keinen Aufwand.
Bei den 32ern habe ich das Problem bisher nicht gesehen, aber ein anderes.
Einer der Nodes konnte von Homeassistant gar nicht gefunden werden, http ging aber.
Dort hat "mdns: disabled: true" unter wifi geholfen, ist aber der einzige der das mal brauchte.

..,-


   
AntwortZitat
(@zaimaen)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 35
 

Wenn du mir nun noch sagen könntest, wie ich das mache, könnte ich es ausprobieren. Bis jetzt kannte ich esphome überhaupt nicht und weiß ehrlich gesagt nicht wie/was du meinst :shifty:

Hier übrigens noch n Screenshot vom wenos direkt mit Port 80, damit man es sich vorstellen kann... (die Werte sind auf 0 bis 2000 begrenzt um mit dem Handy und meinen dicken Fingern etwas auswählen zu können 😉 )


   
AntwortZitat
(@und-mehr)
Heroischer Stromgenerator
Beigetreten: Vor 2 Jahren
Beiträge: 1098
 

Das, was du da hast ist doch nicht von Himmel gefallen, das musst du doch irgendwie auf den esp gebracht haben. 😉

Esphome hat Konifgdateien, mit denen esphome den Main Quelltext generiert um den dann zu kompilieren.
In den Konfigdateien yaml fomat (normal eine pro Node) steht dann so was wie:

wifi:
ssid: "ssid"
password: "dasdarfichniemandensagen"
mdns:
disabled: true

captive_portal:
ota:
api:
...

statt api kann man auch alles zum mqtt server schicken, alos api: raus und dafür mqtt rein,

mqtt:
broker: "servername"
username: "username"
password: "password"
id: "clientid"

wen man mehr wissen will, man findet ein gut dokumentiertes Projekt, wenn man googelt.

..,-


   
AntwortZitat
Seite 2 / 88
Teilen: