Einbindung eines Sungrow SH10RT: SH05,SH06,SH08,SH10

Begonnen von 3gmann, 05 November 2020, 11:22:14

Vorheriges Thema - Nächstes Thema

ChrisH

Angesichts der aktuellen Ereignisse bin ich darauf gestossen. Die SunGrow WR koennen die Netzfrequenz auch in 0.01Hz Aufloesung liefern.
Stand in meinem alten File nicht drin, aber z.B. hier Modbus Register Beschreibung 1.1.4

Hier mein Schnippsel fuer die Netzfrequenz mit 2 Nachkommstellen. Da haette der Frequenzabfall gestern gesehen werden koennen.

attr SH08rt01 obj-i5241-expr $val/100
attr SH08rt01 obj-i5241-poll 1
attr SH08rt01 obj-i5241-reading Grid_Frequency_High_Precision
attr SH08rt01 obj-i5241-type U16


Wie kann ich erzwingen das immer zwei Nachkommastellen angezeigt werden?
Christian

FhemPiUser

Ich habe bei mir mal die Änderungen bzw. zusätzlichen Werte in der SH10RT Modbus Doku für den System State (bzw. jetzt heißt er eigentlich Running State") für neuere Firmware-Versionen (ich denke ab 95.01) nachgezogen.

Falls es jemandem hilft und er es übernehmen möchte: Einfach die entsprechende Stelle in den userReadings des SH10rt devices für "98_System_State_text" mit dem folgenden Code aktualisieren.

98_System_State_text:98_System_State.* {if ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0001) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x8000)) {return "Stop";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0008) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1400)) {return "Standby";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0010) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1200)) {return "Initial Standby";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0020) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1600)) {return "Startup";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0040) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0000)) {return "Running";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0041) {return "Off-grid Charge";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0080) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x8100)) {return "Derating Running";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0100) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x5500)) {return "Fault";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0200) {return "Update failed";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0400) {return "Running in maintain mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0800) {return "Running in forced mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1000) {return "Running in off-grid mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1111) {return "Uninitialized";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0002) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1300)) {return "Shutdown";} elsif ((ReadingsVal("SH10rt_1","98_System_State","0") == 0x0004) or (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1500)) {return "Emergency Stop";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1700) {return "AFCI Selt-Test Shutdown";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1800) {return "Intelligent Station Building Status";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1900) {return "Safe Mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x2000) {return "Open Loop";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x2501) {return "Restarting";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x4000) {return "Running in External EMS mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x4001) {return "Emergency Charging Operation";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x8200) {return "Dispatch Running";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x9100) {return "Warn Running";} else {return "unknown (".ReadingsVal("SH10rt_1","98_System_State","0").")";}}

thomasg

Guten Morgen zusammen,

ich plane die Anschaffung eines Sungrow SG15RT Wechselrichters für meine im Aufbau befindliche Solaranlage.

Der Wechselrichter arbeitet nach meiner Kenntnis ausschließlich mit einem "Sungrow DTSU666 5/80 A" Smartmeter zusammen.
Schade eigentlich, da ich schon einen IR-Lesekopf an meinem Zweirichtungsstromzähler habe, der zuverlässig Informationen an FHEM liefert.

Kann ich die Sungrow DTSU666 auch zusätzlich an fhem oder an einen Batteriewechselrichter wie den Victron Multiplus 2 anbinden? So könnte ich dann den IR-Lesekopf in Rente schicken ;)

Danke Euch
Fhem + knx + 1wire auf raspi 2

FhemPiUser

Ich kann meinen dtsu666 über modbus in fhem auslesen. bei mir gibt es aber zusätzlich einen zweirichtungszähler vom evu, den ich auch mit ir lesekopf über fhem auslese....

thomasg

Meinst du man kann an den dtsu666 mehrere Geräte anschließen - ist ja ein Bussystem und müsste möglich sein also in meinem Fall dann den sungrow Wechselrichter und meine fhem Instanz.
Fhem + knx + 1wire auf raspi 2

FhemPiUser

nein, der dtsu666 ist am sh10rt angeschlossen und vom sh10rt bekommt fhem über modbus tcp wie in diesem thread beschrieben dann alle registerwerte, die dann auch die dtsu666-werte enthalten.

thomasg

#201
Danke. Jetzt habe ichs verstanden. Und andersherum kriegt man die zählefaten nicht in den sungrow: ir Lesekopf - Fhem - sungrow (über Modbus TCP) ... Ich muss mir also das zusätzliche smartmeter dtsu666 besorgen
Fhem + knx + 1wire auf raspi 2

FhemPiUser

#202
das müssten diese register sein:

attr SH10rt_1 obj-i5600-expr $val/1
attr SH10rt_1 obj-i5600-poll 1
attr SH10rt_1 obj-i5600-reading Meter_Active_Power
attr SH10rt_1 obj-i5600-type S32
attr SH10rt_1 obj-i5602-poll 1
attr SH10rt_1 obj-i5602-reading Meter_Active_Power_Phase_1
attr SH10rt_1 obj-i5602-type S32
attr SH10rt_1 obj-i5604-poll 1
attr SH10rt_1 obj-i5604-reading Meter_Active_Power_Phase_2
attr SH10rt_1 obj-i5604-type S32
attr SH10rt_1 obj-i5606-poll 1
attr SH10rt_1 obj-i5606-reading Meter_Active_Power_Phase_3

attr SH10rt_1 obj-i5746-expr $val/100
attr SH10rt_1 obj-i5746-poll 1
attr SH10rt_1 obj-i5746-reading Meter_Total_Import_Energy
attr SH10rt_1 obj-i5746-type U32
attr SH10rt_1 obj-i5748-expr $val/100
attr SH10rt_1 obj-i5748-poll 1
attr SH10rt_1 obj-i5748-reading Meter_Total_Export_Energy
attr SH10rt_1 obj-i5748-type U32

meines wissens nach kann man den sungrow wr gar nicht ohne eigenen smart meter (dtsu666) betreiben...

tobmaster1985

Die SHxxRT benötigen den DTSU666 nur, wenn sie im Hybridmodus mit Akku laufen.

Aber die SGxxRT sind reine PV Wechselrichter, afaik brauchen die gar keinen Zähler, wie bereits im anderen Thread geschrieben..

Den IR-Lesekopf kannste auch nicht in Rente schicken, die Werte vom DTSU666 und EVU Zähler haben teilweise Differenzen von 2kWh am Tag und maßgeblich ist nunmal der offizielle und geeichte EVU Zähler.

Zur Info: der DTSU666 muss die Sungrow Firmware haben, sonst passen die Registeradressen nicht.

Bzgl Bussystem.. Ja, RS485 bzw Modbus RTU ist ein Bussystem, aber kein Multi-Master, sondern nur Multi Slave.

Warum möchtest du Geld beim Sungrow SH10RT sparen und dafür den Victron MP2 kaufen? Klingt alles nicht sinnvoll.

Tom S

Hallo,
ich würde mich gern mit einem grundsätzlichen Problem in den Chat einschalten: ich habe seit 2 Wochen einen Sungrow WR SH6.0RT in Betrieb und versuche seitdem erfolglos, diesen in FHEM einzubinden. Ich bekomme als Modbus-Reaktion ständig nur "disconnected". Hier meine Definition. Ich versuche es sowohl über die Winet-WLAN-Schnittstelle wie auch über die hintere LAN-Schnittstelle. Das Ergebnis ist in beiden Fällen identisch.
Über die iSolarCloud und über WiNet-S erreiche ich den Wechselrichter und bekomme Daten.

defmod SH6.0RT ModbusAttr 1 60 192.168.xxx.xxx:502 TCP
attr SH6.0RT obj-i5010-poll 5
attr SH6.0RT obj-i5010-reading MPPT_1_Voltage
attr SH6.0RT room Solar Forecast

Hat evtl. jemand eine Idee, wo man noch suchen könnte? Vielen Dank im Voraus für jeden Tipp!

Tom S
Tom S

3 x Pi 3B mit FHEM, CUL868/Selbstbau, USB Cam, IPCAM, SolarView PV-Überwachung, I2C, 1-wire

softwear

Hallo Tom,

sieh Dir einmal auf der ersten Seite dieses Threads an, wie die Register konfiguriert sind, die Du auslesen möchtest. Dann klappt's auch mit dem einen.

Grüße
softwear

Tom S

Hallo softwear,
danke für die superschnelle Reaktion. Gesagt, getan: ich habe nochmal die Attribute von der ersten Seite übernommen für ein Register. Leider mit gleichem (negativen) Ergebnis.Der Sungrow ist per ping am Netz erreichbar und auch mein IP-Scanner sieht ihn.

defmod SH6.0RT ModbusAttr 1 60 192.168.xxx.xxx:502 TCP
attr SH6.0RT dev-type-S16-unpack s>
attr SH6.0RT dev-type-S32-len 2
attr SH6.0RT dev-type-S32-revRegs 1
attr SH6.0RT dev-type-S32-unpack l>
attr SH6.0RT dev-type-U32-len 2
attr SH6.0RT dev-type-U32-revRegs 1
attr SH6.0RT dev-type-U32-unpack N
attr SH6.0RT disable 0
attr SH6.0RT event-on-change-reading .*
attr SH6.0RT obj-i5010-expr $val/10
attr SH6.0RT obj-i5010-poll 1
attr SH6.0RT obj-i5010-reading MPPT_1_Voltage
attr SH6.0RT room Solar Forecast

setstate SH6.0RT disconnected
setstate SH6.0RT 2025-08-01 12:48:07 state disconnected

So sieht das Ergebnis aus:
DEF 1 60 192.168.xxx.xxx:502 TCP
DeviceName 192.168.xxx.xxx:502
EXPECT idle
FUUID 680561d8-f33f-6f63-a0e0-561b8636612f1f18
IODev SH6.0RT
Interval 60
LASTOPEN 1754045284.49882
MODBUSID 1
MODE master
MODULEVERSION Modbus 4.5.6 - 7.11.2023
NAME SH6.0RT
NEXT_OPEN 1754045347.50276
NOTIFYDEV global
NR 147
NTFY_ORDER 50-SH6.0RT
PARTIAL
PROTOCOL TCP
STATE disconnected
TCPConn 1
TYPE ModbusAttr
devioLoglevel 3
devioNoSTATE 1
eventCount 8
nextOpenDelay 60

Muss an dem WR evtl. noch Modbus aktiviert werden oder Ähnliches?

Grüße
Tom
Tom S

3 x Pi 3B mit FHEM, CUL868/Selbstbau, USB Cam, IPCAM, SolarView PV-Überwachung, I2C, 1-wire

softwear

Google-Suche ergibt Antwort der KI:

ZitatUm Modbus bei einem Sungrow SH6.0RT Wechselrichter zu aktivieren, müssen Sie sich zuerst mit der Weboberfläche des Wechselrichters verbinden, dann zur "System"-Registerkarte navigieren und dort die "Transfer Configuration" auswählen. Anschließend wählen Sie die Parametergruppe "MODBUS" und aktivieren den Schalter. Wenn eine Whitelist aktiviert ist, muss die IP-Adresse Ihrer Steuerung (z.B. smartha Zentrale) in den Whitelist-Einstellungen hinzugefügt werden, laut smartha.io.

Hilft Dir das weiter?

tobmaster1985

Da sieht man wieder wie gut diese KI Antworten sind.. nämlich totaler Schrott..
Der SH10xxRT hat kein Webinterface und man muss Modbus / Modbus-TCP auch nicht extra aktivieren.

WiNet-S reagiert nicht auf die gleichen Register, wie der SHxxRT selbst.

Hier mal ein Auszug meiner Definition, mit der es funktioniert:
defmod SH10RT ModbusAttr 1 1 aa.bb.cc.dd:502 TCP
attr SH10RT dev-h-combine 50
attr SH10RT dev-i-combine 100
attr SH10RT dev-i-defPoll 1
attr SH10RT dev-type-S16-unpack s>
attr SH10RT dev-type-S32-len 2
attr SH10RT dev-type-S32-revRegs 1
attr SH10RT dev-type-S32-unpack l>
attr SH10RT dev-type-U32-len 2
attr SH10RT dev-type-U32-revRegs 1
attr SH10RT dev-type-U32-unpack N
attr SH10RT enableQueueLengthReading 1
attr SH10RT event-on-change-reading .*
[...]
attr SH10RT obj-i05252-expr $val/10
attr SH10RT obj-i05252-reading Voltage_MPPT_1
attr SH10RT obj-i05253-expr $val/100
attr SH10RT obj-i05253-reading Current_MPPT_1
attr SH10RT obj-i05254-expr $val/10
attr SH10RT obj-i05254-reading Voltage_MPPT_2
attr SH10RT obj-i05255-expr $val/100
attr SH10RT obj-i05255-reading Current_MPPT_2
[...]
attr SH10RT obj-i12999-map 2:Stop, 8:Standby, 16:Init_Standby, 32:Startup, 64:Running
attr SH10RT obj-i12999-polldelay x10
attr SH10RT obj-i12999-reading State_System
attr SH10RT showError 1

und hier für den WiNet-S, über den ich den Akku auslese:
defmod SBR128 ModbusAttr 2 2 <IP WiNet>:502 TCP
attr SBR128 dev-h-combine 10
attr SBR128 dev-i-combine 10
attr SBR128 dev-type-S16-unpack s>
attr SBR128 dev-type-S32-len 2
attr SBR128 dev-type-S32-revRegs 1
attr SBR128 dev-type-S32-unpack l>
attr SBR128 dev-type-U32-len 2
attr SBR128 dev-type-U32-revRegs 1
attr SBR128 dev-type-U32-unpack N
attr SBR128 enableQueueLengthReading 0
attr SBR128 event-min-interval .*:3600
attr SBR128 event-on-change-reading .*
attr SBR128 obj-i10740-expr $val/10
attr SBR128 obj-i10740-poll 1
attr SBR128 obj-i10740-reading Voltage_Battery
attr SBR128 obj-i10741-expr $val/10
attr SBR128 obj-i10741-poll 1
attr SBR128 obj-i10741-reading Current_Battery
attr SBR128 obj-i10741-type S16
[...]

showError könnte evtl hilfreich sein, das Problem zu finden, da kommt dann vielleicht sowas raus:     
timeout waiting for reply to fc 4 to id 1, i05719, len 31

Zitat von: Tom S am 01 August 2025, 13:03:08Der Sungrow ist per ping am Netz erreichbar und auch mein IP-Scanner sieht ihn.

was sagt denn ein Portscan?
nmap -p 502 <WR-IP>Sendet FHEM bzw ModbusAttr überhaupt was?
tcpdump -nni eth0 host <WR-IP>
Kannst auch mal das versuchen, evtl stört noch das disable Attribut:
deleteattr SH6.0RT disable
set SH6.0RT active

softwear

Grüße Dich tobmaster,

da ich auch nur einen SH10RT fahre und dessen Webinterface nutze, war mir die Antwort der KI korrekt. Selbst Du hast diesen Wechselrichter (eventuell ein älteres Modell?). Der Fragende jedoch einen 6er!

Mag sein, dass dort kein Webinterface vorhanden ist. Das möge er selbst einmal prüfen. Mir ging es jedoch darum, dass er auch selbst suchen könne.

Den eventuellen Störfaktor des disable hatte ich auch auf dem Schirm, allerdings hat das setstate keine aktive Wirkung, falls nicht ModbusAttr dises direkt auswertet.

Liebe Grüße
softwear