Hybrid Wechselrichter Sungrow SH10RT und Speicher Einbindung in IPS

Hallo Zusammen

ich bekomme eine PV-Anlage mit ca. 20kWp.
Der Hybrid-Wechselrichter ist von Sungrow SH10RT.
Die Batterie ist von Sungrow SBR224.

Ich möchte gerne die daten auslesen und in der IP-Symcon verarbeiten und auswerten.
Hat damit jemand Erfahrungen?
Ich betreibe zuhause eine KNX Anlage.

Ich danke euch für Euere Unterstützung.

Sollte über Modbus ohne Probleme möglich sein. Bei den Sungrow Geräten nutzt man dazu den Netzwerkanschluss am Gerät. Über den Dongle kommen wohl nicht alle Daten.

Danke für deine Antwort.
Muss ich denn noch irgendein Gerät installieren für das Modbus Signal oder kann die IPS das schon?

Das kann IP-Symcon von Haus aus.

Hallo Zusammen

Meine PV-Anlage ist nun installiert.

Garage:
24 Module á 400 Wp = 9,6 kWp
Sungrow Hybrid Wechselrichter sh10rt

Hauptdach:
33 Module á 400Wp = 13,2 kWp
Sungrow Hybrid Wechselrichter sh10rt
Sungrow SBR 224 22,4kWh Speicher

Ich bin jetzt angefangen per Modbus die Daten aus den beiden Wechselrichtern auszulesen.

Hallo, ich habe zwar nicht den gleichen Wechselrichter, aber einen SG10RT im Einsatz.
Daraus polle ich per Modbus die wichtigsten Werte in Symcon.

Wie schon geschrieben wurde, ist es wichtig, dass der Netzwerkanschluss per Kabel genutzt wird. Den Dongle habe ich bei mir trotzdem dran, aber nicht so, dass er per WLAN auf mein Netzwerk zugreift, sondern per LAN Kabel, welches am Dongle unten dran steckt. Wer so ein Dongle besitzt, weiss dass man unten ein Netzwerkkabel anstecken kann.
Damit lässt sich der Dongle so konfigurieren, dass er über das LAN Kabel die Verbindung ins eigene Netzwerk und zur Sungrow Cloud aufbaut.

Wenn das Teil also im eigenen Netzwerk erkannt ist benötigt man dann die IP Adresse davon. Diese benötigt man für die Modbus Schnittstelle (Client Socket) in Symcon.
So sieht es bei mir aus:

Ausserdem braucht man noch ein Modbus Gateway. Bei mir hat das standardmäßig die Geräte-ID 1. Das ist so auch in meinem Wechselrichter als Standard vorgegeben gewesen.
So sieht das bei mir aus:

Und dann benötigt man die eigentlichen ModBus Devices zum Auslesen der Register des Wechselrichters. Dazu musst Du die Register Deines Wechselrichters haben bzw. suchen.
Einfach mal danach bei Tante Google nach „Modbus Register SH10RT“ suchen. Dort wirst Du bestimmt fündig.

Um Dir ein Beispiel zu geben, zeige ich Dir ein ModBus Device meines Wechselrichters.
Das ist die Tagesproduktion:

Wie Du siehst, hat dieser Wert bei meinem Wechselrichter die Adresse 5002 und ich muss den ankommenden Wert durch 10 Teilen, damit er richtig ankommt. Aktuell 0,00 kWh, weil die Sonne noch nicht aufgegangen ist. :wink:
Der Intervall steht auf 0 Millisekunden, weil ich selbst entscheiden will, wie oft ich den Wert polle (abhole).
Hintergrund ist: Modbus ist nicht uneingeschränkt abrufbar. Es gibt klar definierte Grenzen.
Deshalb rufe ich diesen Wert nur alle 5 Minuten ab. Insgesamt rufe ich 7 Werte ab, alle 5 Minuten. Bisher hat sich die Modbus Schnittstelle damit auch nicht verschluckt und funktioniert zuverlässig.

Ich bin kein ModBus Spezialist, aber wollte hier nur eine kleine Starhilfe geben, falls nötig.
Gerne kannst Du mich aber gerne fragen, falls Du es auf Anhieb nicht hinbekommen solltest.

Gruß, Nico.

1 „Gefällt mir“

Mit den meisten Abfragen klappt es soweit. Bin seid einiger zeit dabei den Energie Fluss zu aufzuzeigen leider mit nicht so großem Erfolg.

Bin zur zeit mit dem Register 13000 (13001) „Running state(Power flow)“ am auswerten aber die werde die ich dort bekomme passen nicht. Akku wird geladen aber der wert bleibt bei 0.
Ich bin leider nicht so gut im Skripte schreiben mittels PHP vll. kann mir da jemand weiter helfen bzw. hat eine Idee was ich fasch mache.

<?php
    //ModBus Appendix1.2 Running state abfrage 
    // SUNGROW SH10RT
    //
    //KE
    //Erstellt: 2023-03-10
    //last update: 2023-03-10 V1.0


// Running state Wert abfragen aus IP-Symcon
    $abfrage=GetValue(30678);

//wert umwandeln in binär
    $binär=decbin($abfrage);

//binär auffüllen auf 8 stellen mit nullen links auffüllen
    $binär8=str_pad($binär, 8, 0, STR_PAD_LEFT);

//binär wert in einzele ziffer auflösen und in einem array schreiben
    $ziffern = str_split((string) $binär8);

// binär8 einzele ziffern in einzele variablen schreiben
    $bit0=$binär8[0];
    $bit1=$binär8[1];
    $bit2=$binär8[2];
    $bit3=$binär8[3];
    $bit4=$binär8[4];
    $bit5=$binär8[5];
    $bit6=$binär8[6];
    $bit7=$binär8[7];

//ziffern mit namen versehen

//Bit0 PV power
    //Bit0 == 0 No power generated from PV
    //Bit0 == 1 Power generated from PV
    if($bit0==0){
        $bit0_name="No power generated from PV";
    }else   {
          $bit0_name="Power generated from PV";
        }

//Bit1 Battery charging
    //Bit1 == 0 Not charging
    //Bit1 == 1 Charging
    if($bit1==0){
        $bit1_name="Battery Not charging";
    }else {
        $bit1_name="Battery Charging";
    }

//Bit2 Battery discharging
    //Bit2 == 0 Not discharging
    //Bit2 == 1 Discharging
    if($bit2==0){
        $bit2_name="Battery Not discharging";
    }else {
        $bit2_name="Battery Discharging";
    }

//Bit3 Positive load power
	//Bit3 == 0 Load is reactive
	//Bit3 == 1 Load is active
    if($bit3==0){
        $bit3_name="Load is reactive";
    }else {
        $bit3_name="Load is active";
    }

//Bit4 Feed-in power
        //Bit4 == 0 No power feed-in the grid
        //Bit4 == 1 Power feed-in the grid
    if($bit4==0){
        $bit4_name="No power feed-in the grid";
    }else {
        $bit4_name="Power feed-in the grid";
    }

//Bit5 Import Power from grid
		//Bit5 == 0 No power imported from the grid
		//Bit5 == 1 Importing power from grid
    if($bit5==0){
        $bit5_name="No power imported from the grid";
    }else {
        $bit5_name="Importing power from grid";
    }

//Bit6 Reserved 
        //Bit6
    if($bit6==0){
        $bit6_name="Reserved 0";
    }else {
        $bit6_name="Reserved 1";
    }

//Bit7(Refitting System) Negative load power
        //Bit7 == 0 No power generated from “Load”
        //Bit7== 1 Power generated from“Load”
    if($bit7==0){
        $bit7_name="No power generated from “Load”";
    }else {
        $bit7_name="Power generated from“Load”";
    }
//umwandeln von integer in Boolean
//danach
//Schreiben in einer Variable
  //PV power
    $bit0ID ="50604";
    $bit0t= (bool) "$bit0";
    SetValueBoolean($bit0ID,$bit0t);
//Battery charging
    $bit1ID ="31708";
    $bit1t= (bool) "$bit1";
    SetValueBoolean($bit1ID,$bit1t);
//Battery discharging
	$bit2ID ="57289";
    $bit2t= (bool) "$bit2";
    SetValueBoolean($bit2ID,$bit2t);
//Positive load power
	$bit3ID ="48222";
    $bit3t= (bool) "$bit3";
    SetValueBoolean($bit3ID,$bit3t);
//Feed-in power	
	$bit4ID ="55612";
    $bit4t= (bool) "$bit4";
    SetValueBoolean($bit4ID,$bit4t);
//Import Power from grid	
	$bit5ID ="20965";
    $bit5t= (bool) "$bit5";
    SetValueBoolean($bit5ID,$bit5t);
//Reserved	
	$bit6ID ="32756";
    $bit6t= (bool) "$bit6";
    SetValueBoolean($bit6ID,$bit6t);
//(Refitting System) Negative load power	
	$bit7ID ="28634";
    $bit7t= (bool) "$bit7";
    SetValueBoolean($bit7ID,$bit7t);
    
?>

Hallo Ralamon,
ich habe auch seit kurzem einen Sungrow SH10RT, das auslesen aller Werte klappt super. Aber eine Frage hätte ich, konntest Du das auslesen des Registers 13000 bzw. 13001 lösen? Bei mir steht im Register 13000 immer 0 bzw. 2 im 13001.

Für eine kurze Rückmeldung wäre ich sehr dankbar.

Grüße Torsten

Edit: Hat sich erledigt, habe die Ursache gefunden. Ich hatte die LAN Schnittstelle von WiNET benutzt, über diese konnte ich die Werte auslesen aber anscheinend nicht alle. Als ich die Feste LAN Schittstelle für Modbus benutzt habe ging es dann.

Gruß Torsten

Wieviele Register können in welchen Zeitscheiben abgefragt werden ohne dass der Modus abstürzt?
Klar, die meisten werden nicht sekündlich benötigt, aber wo ist die Grenze?

Hallo ihr Kundigen,

ich bin nun auch stolzer Besitzer einer PV-Anlage mit Sungrow Wechselrichter (SH8.0RT) und habe mich daran gemacht, die Daten auszulesen.
Das klappt erstaunlicherweise recht gut, jedoch haben hier einige Adresse ziemlich merkwürdige Werte, die ich nicht nachvollziehen kann. Vielleicht kann mir das jemand auf die Sprünge helfen?
Es fängt schon an bei Adresse 5002 (5001 - 8bit - Big-Endian). Hier sollte die heutige PV Produktion stehen. Der Tag ist eher düster, die Anlage produziert zwischen 50 und 700 Watt, aber ich lese in besagter Adresse eine Tagesnutzung aus der Anlage von 950 kWh aus!
Das nächste Rätsel sehe ich bei Adresse 5017 (5016 - 16bit - Little Endian). Demnach liefert meine Anlage derzeit eine Leistung von 60928 Watt. Korrekt sind jedoch nur rund 192 Watt.
Auch der Wert der Adresse 13010 (13009 - 32bit - Little-Endian - mit Vorzeichen), der aktuellen Abnahme aus dem Stromnetz, ist völlig unverständlich. -8500 Wat (ja, ich speise gerade ein) ist viel zu hoch, da die PV Anlage nur knapp 200 Watt liefert.
Woran kann das liegen?
Ich habe die jeweiligen Adressen und Schnittstellenparameter aus der Sungrow „Communication Protocol of Residential Hybrid Inverter“ Liste 1.0.23 genommen. Gibt es da etwas neueres?

Danke schon mal für die Hilfe.

Andreas

Hallo,

ich habe ebenfalls seit 4 Tagen einen SH10RT mit 15,7kWp und 12,8kWh Speicher in Betrieb. Habe heute auch angefangen die Daten vom Modbus einzulesen. Deine Werte @APieroth bekomm ich allerdings sauber rein. Hier etwas das Register 5002. Das wäre meine Konfig dafür.


Ich bin nach der Liste vorgegangen:

Hier steht ja auch unit32sw was nach dieser Seite wiederum für (Big Endian Word Swap) steht:

Aber wenn ich hier auf „Little-Endian (Bytes vertauscht)“ stelle, bekomm ich die gleichen Werte wie über die Browserseite vom WR rein. Ich vermute da einfach einen Fehler auf der GitHub Seite.

Hallo MarcelL,
ich habe es mittlerweile auch hinbekommen.
Das Problem waren die 32bit Werte, hier musste ich "Little-Endian (Bytes vertauscht) wählen. Passt also zu deiner Angabe von Big-Endian Word Swap).

Hast du zufällig noch einen DSTU666 SmartEnergyMeter und hast es geschafft, diesen auch auszulesen? Hier komme ich keinen Schritt vorwärts.
LG
Andreas

Ja ich habe auch das DTSU666 aber ich befürchte da kommt man so über Modbus TCP nicht ran. Höchsten über einen direkten Abgriff.

Ich habe zwar was zum DTSU gefunden, aber ich denke, dass man hier direkt eine serielle Verbindung aufbauen müsste. Der DTSU ist ja an den WR angekoppelt, ich vermute, dass der die Register nicht 1zu1 durchreichen wird.
(https://github.com/bohdan-s/Sungrow-Inverter/blob/main/Modbus%20Information/DTSU666%20Meter%20Communication%20Protocol_20210601.pdf)

Das hatte ich befüchtet, schade.
Vielleicht ist das aber auch gar nicht notwendig, da ich an die wichtigen Werte wohl auch über den Wechselrichter dran komme.

Moin,

leider bin ich schon wieder auf ein bisher unüberwindbares Problem gestoßen.
Über die Adressen 6099 aufwärts, soll man eine Menge Statistikemn abrufen können.
Das klappt bei mir leider nicht.
Wann immer ich versuche, eine solche Adresse auszulesen (ich habe diversen im Bereich von 6099 bis 6825 probiert), erhalte ich die Fehlermeldung

Warning: NameDerVariablen: ILLEGAL_DATA_ADDRESS in /- on line 10

Hat jemand damit Erfahrungen oder eine Idee?

LG
Andreas

Hallo Kressi,

du hast geschrieben, dass man nicht die WiNet-LAN-Schnittstelle, sondern die feste nutzen solle.
Hast du die für den Modbus anders eingerichtet, als die WiNet Schnittstelle (Port, GeräteID)?
Ich habe es versucht und bin gescheitert. Meine WiNet Schnittstelle hat die interne Adresse 192.168.168.80, die feste hat die 192.168.1768.81. Wenn ich für die feste Schnittstelle ein Modbus Gatewas hinzufüge und mit der zweiten IP, anber demselben Port 502 einrichte, dann dauert es nur einige Sekunden und ich bekomme eine Fehlermeldung:

Client Socket Fehler beim Lesen: End of file

Hast du eine Idee?

LG
Andreas

Hm, merkwürdig. Ich habe keine Ahnung, was ich nun anders gemacht habe.
Nach der Umbenennung der Sockets für das WiNet- und das neue Gateway, läuft es!

Hallo Andreas,
sorry für die späte Rückmeldung. In IPSymcon benutze ich nur den festen Modbus Anschluss. Hat eine IP aus meinem Netz, Port 502 und ID 1. Das WiNet benutze ich in IPS überhaupt nicht, hat bei mir auch eine IP aus meinem Netz, macht aber nur Kommunikation zur ISolarCloud.
Lese derzeit ca. 80-90 Werte aus, auch den Wechselrichter Status und rechne diesen mittels eines Scripts von Ralamon Post 7 in diesem Thread Hybrid Wechselrichter Sungrow SH10RT und Speicher Einbindung in IPS - #7 von Ralamon um. Damit stelle ich dann die Flussrichtung der Energien da. Meine Modbus Vorlage kann ich gerne posten, wollte das eh schon mal für alle machen, allerdings habe ich dort noch eigene Beschriftungen die ich noch anpassen muss (Zeitmangel).

Grüße Torsten

1 „Gefällt mir“

Hallo Kressi,
danke für deine Rückmeldung. Grundsätzlich habe ich mittlerweile große Fortschritte gemacht. Auch die Statusmeldungen konnte ich auslesen und auswerten.
Und auch ich habe Daten nur noch über den zweiten LAN-Anschluss des Wechselrichters bekommen.
Leider treibt mich das Ding schier zur Verzweiflung. Erst lief es eine Weile ganz gut. Erst als ich wieder mal irgend eine Änderung an einem Modus-Gerät gemacht habe, lief alles aus dem Ruder. Der Modbus Socket liefert ständig Fehler (Client Socket. Fehler beim Lesen: End of File). Dazu muss noch nicht mal ein Modbus-Gerät mit diesem Socket und Gateway verbunden sein.
Und Daten lassen sich dann auch nicht aus den Registern des Wechselrichters lesen.
Ich habe schon diverse Dinge versucht: Symcon neu starten, Fritz!Box neu starten, Wechselrichter neu starten. Mal hilft das, momentan allerdings nicht.
Port 502 und Gerät 1 ist doch richtig, oder? Zumindest hat es damit schon mal funktioniert.

Das Auslesen des WiNet klappt übrigens tadellos. Leider bekomme ich hier bekanntlich einige wichtige Werte nicht geliefert (Stichwort: Status).

Dein Angebot, deine Modbus Vorlage einmal zu posten, nehme ich übrigens gerne und dankend an.

VG
Andreas

Hallo Andreas,

also Port 502 und Gerät 1 ist vollkommen richtig, ist bei mir auch so. Anbei noch meine Modbus Register zum importieren.

Gruß Torsten
SH10RT.json (31,1 KB)

Vieln Dank.
Ich schaue mir das mal an