Sungrow SH10RT-20 — Modbus Register-Referenz
Stand: 2026-04-02
Verbindung
- Host: 192.168.100.75 (WiNet-S WLAN) oder 192.168.100.28 (WiNet-S LAN)
- Port: 502 (Modbus TCP)
- Device ID: 1
- Beide IPs liefern identische Daten
Register-Bereiche
Der SH10RT hat drei Register-Bereiche:
| Bereich | Typ | Funktion |
|---|---|---|
| 5xxx (Input) | Read-Only | PV- und WR-Messwerte (MPPT, AC, Temperaturen) |
| 13xxx (Input) | Read-Only | Batterie-Status, Energiebilanzen, Systemstatus |
| 13xxx (Holding) | Read-Write | EMS-Steuerung (Modus, SOC-Grenzen, Zwangsladen) |
WICHTIG: Dieselbe Adresse 13xxx existiert als Input Register (Funktion 04) UND Holding Register (Funktion 03). Sie liefern unterschiedliche Daten!
PV / DC (Input Register 5xxx)
| Register | Name | Typ | Einheit | Faktor |
|---|---|---|---|---|
| 5003 | Tages-Erzeugung AC | uint16 | kWh | 0.1 |
| 5004-5005 | Gesamt-Erzeugung AC | uint32 | kWh | 0.1 |
| 5008 | WR Innentemperatur | int16 | C | 0.1 |
| 5011 | MPPT 1 Spannung | uint16 | V | 0.1 |
| 5012 | MPPT 1 Strom | uint16 | A | 0.1 |
| 5013 | MPPT 2 Spannung | uint16 | V | 0.1 |
| 5014 | MPPT 2 Strom | uint16 | A | 0.1 |
| 5016-5017 | Total DC Power | uint32 | W | 1 |
| 5019 | Phase A Spannung | uint16 | V | 0.1 |
| 5020 | Phase B Spannung | uint16 | V | 0.1 |
| 5021 | Phase C Spannung | uint16 | V | 0.1 |
| 5031-5032 | Total Active Power | uint32 | W | 1 |
| 5036 | Netzfrequenz | uint16 | Hz | 0.1 |
Batterie-Messwerte — zwei Quellen!
Quelle 1: Input Register 13xxx (EMS-Controller)
| Register | Name | Typ | Einheit | Faktor |
|---|---|---|---|---|
| 13019 | Batterie Spannung | uint16 | V | 0.1 |
| 13020 | Batterie Strom | uint16 | A | 0.1 |
| 13021 | Batterie Leistung | int16 | W | 1 |
| 13022 | Batterie SOC (EMS) | uint16 | % | 0.1 |
| 13023 | Batterie SOH | uint16 | % | 0.1 |
| 13024 | Batterie Temperatur | int16 | C | 0.1 |
Achtung: Register 13022 liefert den vom EMS angepassten SOC. Bei Kommunikationsstörungen zwischen EMS und BMS kann dieser Wert falsch sein!
Quelle 2: Input Register 5xxx (BMS direkt)
| Register | Name | Typ | Einheit | Faktor |
|---|---|---|---|---|
| 5083 | Batterie Spannung | uint16 | V | 0.1 |
| 5084 | Batterie Strom | int16 | A | 0.1 |
| 5085 | Batterie Leistung | int32 | W | 1 |
| 5086 | Batterie SOC (nominell) | uint16 | % | 0.1 |
| 5087 | Batterie SOC (BMS) | uint16 | % | 0.1 |
| 5088 | Batterie Temperatur | int16 | C | 0.1 |
Register 5087 ist zuverlässiger als 13022 — es liefert den SOC direkt vom BMS, nicht den vom EMS modifizierten Wert.
Vorfall 02.04.2026: SOC-Diskrepanz
| Register | Wert | Quelle |
|---|---|---|
| 13022 (EMS) | 0.7% | Falsch — EMS hat BMS-Kommunikation verloren |
| 5087 (BMS) | 25.3% | Korrekt — Batterie lädt normal |
| iSolarCloud | 0% | Liest EMS-Wert → auch falsch |
Fix: Sungrow-Exporter auf Register 5087 umgestellt (02.04.2026).
EMS-Steuerung (Holding Register 13xxx)
| Register | Name | Typ | Werte |
|---|---|---|---|
| 13000 | System State | uint16 | 0=Standby |
| 13001 | Running State | uint16 | Bitmask (9=PV+Import, 11=PV+Laden, 12=Entladen+Last, 28=Entladen+Einspeisung) |
| 13049 | EMS Modus | uint16 | 0=Eigenverbrauch, 2=Zwangsmodus, 3=Ext. EMS, 4=VPP |
| 13050 | Lade/Entlade-Befehl | uint16 | 0xAA(170)=Laden, 0xBB(187)=Entladen, 0xCC(204)=STOPP |
| 13051 | Lade/Entlade-Leistung | uint16 | W (0-100% der BDC-Nennleistung) |
| 13057 | Batterie Kapazität | uint16 | Ah (Wert 1000 = korrekt) |
| 13058 | Min SOC | uint16 | x0.1% (Wert 100 = 10%) |
| 13059 | Max SOC | uint16 | x0.1% (MUSS 1000 = 100% sein!) |
| 13099 | Backup Reserve SOC | uint16 | % |
WICHTIG: Register 13057 und 13058 sind per Modbus NICHT schreibbar (Exception 4). Änderungen nur über iSolarCloud!
WICHTIG: Max SOC (13059) NICHT unter 100% setzen — verhindert Zellenbalancing!
SOC-Kalibrierung per Modbus
Bei SOC-Diskrepanzen kann ein Kalibrierungszyklus durchgeführt werden:
write_register(13049, 2)— Zwangsmodus aktivierenwrite_register(13050, 170)— Zwangsladen (0xAA)write_register(13051, 5000)— 5000W Ladeleistung- Warten bis SOC = 100%
write_register(13050, 187)— Zwangsentladen (0xBB)- Warten bis SOC ≈ 10%
write_register(13049, 0)— zurück auf Eigenverbrauch
Emergency Charging
Bei SOC <= 5% löst das BMS automatisch Notladung aus bis SOC 10%. Signal wird automatisch gelöscht.
Automatisches Balancing (SBR, Firmware V24+)
- Korrigiert 1% SOC-Differenz/Tag zwischen Modulen
- Maximal 25 Tage aktiv
- Aktivierung: Auf 100% laden, dann auf <= 15% entladen, 1h halten
- Temperatur muss dauerhaft 10-35°C sein
Bekannte Probleme
Fehler 714: BMS-Kommunikation
- Holding-Register 13xxx liefern 65535 (0xFFFF)
- Input-Register 13xxx liefern teilweise noch gültige Werte
- Input-Register 5xxx liefern BMS-Daten direkt
- Fix: WR-Reset oder SOC-Kalibrierungszyklus
Firmware-Änderung Register 13021
- Ab Firmware ~95.03: Datentyp wechselte von uint16 auf int16
- Positiv = Laden, Negativ = Entladen
WiNet-S Dual-IP
- WLAN (.75) und LAN (.28) gleichzeitig im selben Subnetz
- Kann ARP-Konflikte verursachen
- Langfristig auf EINE Verbindung reduzieren (LAN bevorzugt)
Quellen
- Offizielles Modbus-Protokoll:
/home/ak/sungrow-docs/modbus/Modbus_Protocol_Residential_Hybrid_v1.1.2.pdf - GitHub: mkaiser/Sungrow-SHx-Inverter-Modbus-Home-Assistant (641 Stars)
- GitHub: MickMake/GoSungrow (981 API-Endpoints dokumentiert)
- Sungrow Academy: academy.sungrow-emea.com
- iSolarCloud API: developer-api.isolarcloud.com (NDA erforderlich für AppKey)