Sungrow SGxxRT mit WiNetS

Welche Geräte sollen noch implementiert werden?
Was sollte man ändern / verbessern / ergänzen an der Solaranzeige? Hier kann Jeder seine Ideen einbringen.
Außerdem steht hier, woran gerade gerbeitet wird.

Moderator: Ulrich

Forumsregeln
Wenn neue Geräte implementiert werden sollen ist die Protokollbeschreibung der Schnittstelle vom Hersteller Voraussetzung.

Bitte nur konkrete Ideen hier eintragen und in jedem Beitrag bitte nur eine Erweiterung / Änderung, damit das Ganze noch überschaubar bleibt. Ein ganzes Sammelsorium von Ideen in einem Thread ist zu unübersichtlich. Nicht alles kann und wird auch verwirklicht werden.
Antworten
jdkbx
Beiträge: 1
Registriert: Mi 1. Mär 2023, 00:11

Sungrow SGxxRT mit WiNetS

Beitrag von jdkbx »

Hallo,

ich habe seit kurzem einen Sungrow SG17RT mit einem WiNetS. Bei der Suche nach einer Möglichkeit zum Auslesen der Werte ohne über Sungrows Cloud (iSolarCloud) gehen zu müssen, habe ich so ziemlich alle größeren Projekte in dem Umfeld ausprobiert. Funktionierende Umsetzungen waren nur in https://github.com/meltaxa/solariot] und https://github.com/bohdan-s/SunGather]. Beide verwenden im Backend https://github.com/bohdan-s/SungrowModbusWebClient und bieten die Möglichkeit in verschiedene Formate zu exportieren. Sie bringen aber keine Anzeige-Komponente mit.
Zuerst habe ich die Daten mit solariot in eine InfluxDB geschrieben, und dann im grafana von solaranzeige integriert. Das war aber nur bedingt ausreichend.
Um mich etwas intensiver mit der Technik auseinander zu setzen, habe ich den Programmfluss aus SungrowModbusWebClient in php für solaranzeige nachimplementiert. Zuerst hatte ich alles in Regler 70 integriert, was aber eigentlich keinen Sinn macht, da an so ziemlich jeder interessanten Stelle die SG WRs von der SH (Hybrid) WRs divergieren und Regler 70 eigentlich nur für SHs ist. Daher habe ich einen neuen Regler daraus gemacht.
sungrow_sg.php
(32.68 KiB) 129-mal heruntergeladen
Bei den Namen der Daten bin ich dann von den Bezeichnungen in Solaranzeige abgewichen und habe die Bezeichnungen aus der Sungrow Doku verwendet. Eine für den Regler passende query für funktionen.inc.php ist:

Code: Alles auswählen

if (date( "i" ) == "01" or $daten["Demodaten"] or date( "H" ) == date( "H", $Sonnenaufgang )) {
          $query .= "Info ";
	  $query .= "dev_code=\"".$daten["dev_code"]."\"";
	  $query .= ",dev_model=\"".$daten["dev_model"]."\"";
	  $query .= ",dev_type=\"".$daten["dev_type"]."\"";
	  $query .= ",Installed_PV_Power=\"".$daten["Installed PV Power"]."\"";
	  $query .= ",Objekt=\"".$daten["Objekt"]."\"";
	  $query .= ",Datum=\"".$daten["Datum"]."\"";
	  $query .= "  ".$daten["zentralerTimestamp"];
	  $query .= "\n";
	}
        $query .= "AC ";
        $query .= "phase_A_voltage=".$daten["phase A voltage"];
        $query .= ",phase_B_Voltage=".$daten["phase B Voltage"];
        $query .= ",phase_C_Voltage=".$daten["phase C Voltage"];
        $query .= ",Phase_A_current=".$daten["Phase A current"];
        $query .= ",Phase_B_current=".$daten["Phase B current"];
        $query .= ",Phase_C_current=".$daten["Phase C current"];

        //$query .= ",Leistung_R=".$daten["AC_Leistung_R"];
        //$query .= ",Leistung_S=".$daten["AC_Leistung_S"];
        //$query .= ",Leistung_T=".$daten["AC_Leistung_T"];
        
        $query .= ",Grid_frequency=".$daten["Grid frequency"];
        $query .= ",Total_active_power=".$daten["Total active power"];
        //$query .= ",export=".$daten["export"];
        //$query .= ",import=".$daten["import"];
        //$query .= ",usage=".$daten["usage"];
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n";
        $query .= "PV ";
        $query .= "Total_DC_power=".$daten["Total DC power"];
        //for ($i = 1; $i <= $daten["Anz_PV_Strings"]; $i++) {
          //$query .= ",String_".$i."_voltage=".$daten["String ".$i." voltage"];
          //$query .= ",String_".$i."_current=".$daten["String ".$i." current"];
          //$query .= ",String_".$i."_power=".$daten["String ".$i." power"];
          //$query .= ",String_".$i."_power=".($daten["String ".$i." voltage"] * $daten["String ".$i." current"]);
        //}
        for ($i = 1; $i <= $daten["Anz_MPP_Trackers"]; $i++) {
          $query .= ",MPPT_".$i."_voltage=".$daten["MPPT ".$i." voltage"];
          $query .= ",MPPT_".$i."_current=".$daten["MPPT ".$i." current"];
          //$query .= ",MPPT_Leistung".$i."=".($daten["MPPT".$i."_Leistung"]);
          $query .= ",MPPT_".$i."_power=".($daten["MPPT ".$i." voltage"] * $daten["MPPT ".$i." current"]);
        }
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n";
        $query .= "Service ";
        $query .= "Internal_temperature=".$daten["Internal temperature"];
	$query .= ",Fault/Alarmcode_1=".$daten["Fault/Alarmcode 1"];
	$query .= ",Work_state=".$daten["Work state"];
        $query .= ",Work_state_text=\"".$daten["Work state text"]."\"";
	$query .= ",Anz_MPPT=".$daten["Anz_MPP_Trackers"];
	$query .= ",Anz_Strings=".$daten["Anz_PV_Strings"];
        $query .= ",Modell_ID=".$daten["ModellID"];
        $query .= ",Modell=\"".$daten["Modell"]."\"";
        $query .= ",Effizienz=".$daten["Effizienz"];
	$query .= ",dev_sn=\"".$daten["dev_sn"]."\"";
	//$query .= ",Geraetestatus=\"".$daten["Geraetestatus"]."\"";
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n";
        $query .= "Summen ";
        $query .= "Daily_power_yields=".$daten["Daily power yields"];
        $query .= ",Total_power_yields=".$daten["Total power yields"];
        $query .= ",Monthly_power_yields=".$daten["Monthly power yields"];
        $query .= ",Total_running_time=".$daten["Total running time"];
        $query .= ",Daily_running_time=".$daten["Daily running time"];
        //$query .= ",Wh_EinspeisungHeute=".$daten["EinspeisungHeute"];
        //$query .= ",Wh_BezugHeute=".$daten["BezugHeute"];
        //$query .= ",Wh_HausverbrauchHeute=".$daten["HausverbrauchHeute"];
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n";
Hier kann man die Namen auch wieder auf ein anderes Schema umbiegen. Das Ergebnis in grafana:
sungrowSGgrafana.jpg
SungrowSG.json
(64.13 KiB) 94-mal heruntergeladen
Ich habe in php bisher noch nie etwas gemacht, daher sind da sicherlich noch einige Dummheiten drin. War auch meine erste Berührung mit grafana, daher ist auch hier viel Potential zur Verbesserung.

Leider ist mein SmartMeter falsch am Wechselrichter angeschlossen worden. Somit fehlen die Werte zu Import und Export von Strom sowie die Trennung zu Eigenverbrauch und Einspeisung. Das hole ich nach, wenn der Anschluss korrigiert wird.

Die Lösung nutzt eine Kommunikation über Websocket auf Port 8082, gefolgt von normalem http auf Port 80. In der config sind also die IP und Port 8082 anzugeben. Für den Websocket Teil habe ich auf https://github.com/Textalk/websocket-php zurückgegriffen. Daher gibt es eine Abhängigkeit zu diesen php Dateien. Die habe ich mittels

Code: Alles auswählen

composer require textalk/websocket
aufgelöst und den vendor ordner auf der Ebene der anderen solaranzeige php Dateien plaziert. Es gibt dabei noch eine Abhängigkeit zu php-mbstring. Das lässt sich auf einem Raspberry Pi mit apt durch

Code: Alles auswählen

apt install php-mbstring
installieren. Eine alternative Lösung ohne solch viele Abhängigkeiten nur für den Aufbau einen Websocket Session wäre hier wünschenswert; php ist aber nicht meine Welt.

Einige Register scheinen nicht über WiNetS zugreifbar zu sein. So komme ich an die String-Stromstärke nicht heran. Auch "Installed PV Power" ist bei mir immer 0xFFFF, also nicht zugreifbar.

Falls das jemandem nützt, gern geschehen. Vielleicht kann das auch direkt in solaranzeige integriert werden. Wie gesagt, WiNetS ist hier Voraussetzung. Für direkte ModBus Kommunikation ist das nicht geeignet. Dafür sollte man Regler 70 entsprechend den SG Registern anpassen.

Icebox82
Beiträge: 69
Registriert: Di 17. Jan 2023, 08:30
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Sungrow SGxxRT mit WiNetS

Beitrag von Icebox82 »

Hallo,

ich habe das selbe Problem und anscheinend gibt es dazu bisher auch keine Lösung mit der standard Installation. Laufen tut die Solaranzeige bei mir auf einem Pi4 und ist natürlich mit LAN verbunden. Wechselrichter hab ich einen SG10RT mit WinetS an LAN.
Ich würde diese Lösung gerne umsetzen, habe aber so gut wie keine Ahnung von php, Linux etc. Könnte mir jemand dabei evtl behilflich sein was ich wo eingeben oder einspielen muss?

Wo muss zB die .php hin?
"composer require textalk/websocket" und "apt install php-mbstring" gebe ich einfach im Kommandofenster/Putty ein?
Und was heißt "aufgelöst und den vendor ordner auf der Ebene der anderen solaranzeige php Dateien plaziert" ???

Sorry für die vielen Fragen, die für euch evtl selbstverständlich sind
Vielen Dank schon mal!

Antworten

Zurück zu „Wunschliste und was wird gerade umgesetzt.“