Sungrow SH10RT — Batterie, EMS & Modbus Referenz
Stand: 23. März 2026
Systembeschreibung
| Komponente | Modell | Details |
|---|---|---|
| Wechselrichter | SH10RT-20 | 10 kW Hybrid, SN: A2351210260 |
| Batterie | SBR128→SBR160 | 5 SBR-Module (seit 06.03.2026), 16 kWh nominal |
| Wallbox | AC011E-01 | 11 kW, RS485 auf COM1, SN: A24919A2960 |
| Logger | WiNet-S | Modbus TCP Gateway, 192.168.100.75:502 |
Modbus-Zugang
- IP: 192.168.100.75 (WiNet-S Dongle)
- Port: 502 (Modbus TCP)
- Unit ID: 1 (Wechselrichter)
- Erreichbar von: raspip5 (192.168.178.199) via Sungrow-Subnetz 192.168.100.x
- Latenz: ~17ms
Input Register (Read-Only) — Messwerte
| Register | Name | Typ | Scale | Einheit | Beschreibung |
|---|---|---|---|---|---|
| 13000 | Running State | U16 | 1 | — | Betriebszustand (Bitmask) |
| 13009 | Grid Power | S16 | 1 | W | Netzleistung (neg=Export) |
| 13010 | Battery Power | S16 | 1 | W | Batterieleistung (pos=Entladung, 0xFFFF=idle) |
| 13022 | Battery Voltage | U16 | 0.1 | V | Batteriespannung |
| 13023 | Battery SOC | U16 | 0.1 | % | Ladezustand |
| 13024 | Battery SOH/Temp | U16 | 0.1 | — | SOH oder Temperatur |
Running State Bitmask (Register 13000)
| Bit | Wert | Bedeutung |
|---|---|---|
| 0 | 1 | PV erzeugt |
| 1 | 2 | Batterie wird geladen |
| 2 | 4 | Batterie wird entladen |
| 3 | 8 | Last aktiv |
| 4 | 16 | Einspeisung (Export) |
| 5 | 32 | Netzbezug (Import) |
Typische Kombinationen: - 12 (4+8) = Entladen + Last → Batterie versorgt Haus (nachts, normal) - 25 (1+8+16) = PV + Last + Export → PV versorgt Haus + speist ein - 27 (1+2+8+16) = PV + Laden + Last + Export → PV versorgt alles + lädt Batterie - 40 (8+32) = Last + Import → Netz versorgt Haus (Batterie inaktiv!)
Holding Register (Read/Write) — EMS-Steuerung
| Register | Name | Scale | Bereich | Normaler Wert | Beschreibung |
|---|---|---|---|---|---|
| 13049 | EMS Mode | 1 | 0,2,3 | 0 | 0=Eigenverbrauch, 2=Forced, 3=External EMS |
| 13050 | Charge/Discharge Cmd | 1 | 0xAA/BB/CC | 0xBB (187) | 0xAA=Laden, 0xBB=Entladen, 0xCC=STOPP! |
| 13051 | Forced Power | 1 W | 0–5000 | 0 | Leistung für Forced Mode |
| 13055 | Battery Type | 1 | 0–10 | 9 | 9=Li-ion Sungrow |
| 13056 | Nominal Voltage | 0.1 V | — | — | Nominale Batteriespannung |
| 13057 | Battery Capacity | 1 Ah | 10–1000 | 500 | Batteriekapazität (in Ah!) |
| 13058 | Min SOC | 0.1 % | 0–50% | 100 (=10%) | Entlade-Untergrenze |
| 13099 | Backup Reserve SOC | 1 % | 0–100 | 5 | Notstrom-Reserve |
Erweiterte Register (33xxx-Bereich)
| Register | Name | Scale | Beschreibung |
|---|---|---|---|
| 33046 | Max Charge Power | ×10 W | Maximale Ladeleistung |
| 33047 | Max Discharge Power | ×10 W | Maximale Entladeleistung |
SOC-Parameter — Drei verschiedene Werte!
| Parameter | Register | Funktion |
|---|---|---|
| Min SOC (13058) | Entlade-Untergrenze im Normalbetrieb | Batterie wird nicht darunter entladen |
| Backup Reserve SOC (13099) | Reserviert für Notstrom | Wird im Normalbetrieb nicht genutzt |
| BMS-Abschaltung | Intern, ~0-5% | Hardware-Schutz gegen Tiefentladung |
Zusammenspiel: Im Normalbetrieb entlädt der WR bis max(Min SOC, Backup Reserve). Bei Netzausfall wird die Backup Reserve freigegeben.
Wichtig: Max SOC (Register 13057 lt. manchen Protokollversionen) immer auf 100% lassen! Werte <100% deaktivieren das BMS Cell-Balancing.
Batterie-Hardware
SBR-Module (LiFePO4)
| Parameter | Wert |
|---|---|
| Spannung pro Modul | 51,2 V nominal (16S × 3,2V) |
| Kapazität pro Modul | 3,2 kWh |
| Vollladung (100% SOC) | ~57 V pro Modul |
| Systemspannung 5 Module | ~256 V nominal, ~277 V bei 100% |
| BMS-Kommunikation | CAN-Bus (proprietär, NICHT RS485) |
| SOC-Berechnung | Coulomb-Counting + OCV-Korrektur (durch BMS) |
| Zyklen | ≥6.000 bei 90% DoD |
Spannungsreferenz
| Module | Nominal | 100% SOC |
|---|---|---|
| 4 | 204,8 V | ~205 V |
| 5 | 256,0 V | ~277 V |
| 6 | 307,2 V | ~334 V |
Vorfälle & Troubleshooting
Vorfall 1: Batterie-Stopp nach Moduleinbau (07./08.03.2026)
Problem: Nach Einbau des 5. SBR-Moduls entlud die Batterie nicht mehr. Running State = 40 (Import+Last).
Ursache: Register 13050 = 0xCC (STOPP) — vom Installateur nicht zurückgesetzt.
Fix: client.write_register(address=13050, value=187) (0xBB = Entladen)
Vorfall 2: Batteriekapazität = 0 (22./23.03.2026)
Problem: Batterie entlud nicht, SOC zeigte 0%, Spannung 100V. Running State = 40. Ursache: Batteriekapazität in den erweiterten Einstellungen stand auf 0 kWh. Vermutung: Wurde beim Moduleinbau zurückgesetzt oder war nie korrekt eingestellt. Fix: In iSolarCloud Web-App → Geräte → Wechselrichter → Erweiterte Einstellungen → Batterieparameter → Batteriekapazität auf 16 gesetzt. Ergebnis: Register 13057 änderte sich von 1000 auf 500 (Ah), SOC sprang von 0% auf 99%. Hinweis: WiNet-S überträgt Cloud-Änderungen verzögert (Minuten bis Stunden). Bei Nicht-Übernahme: WiNet-S physisch neustarten.
Troubleshooting-Checkliste: Batterie entlädt nicht
- Running State prüfen (13000): Soll nachts 12 sein, nicht 40
- SOC prüfen (13023): Muss > Min SOC sein
- Min SOC prüfen (13058): Soll 100 (=10%), nicht 0 oder 1000
- Batteriekapazität prüfen (13057): Muss > 0 sein (z.B. 500 Ah für 5 Module)
- Lade/Entlade-Befehl prüfen (13050): Muss 0xBB (187) sein, nicht 0xCC (204)
- EMS-Modus prüfen (13049): Soll 0 (Eigenverbrauch) sein
- Batteriespannung prüfen (13022): Sollte ~250-280V für 5 Module sein
Vorfall 3: Wallbox-Abbruch blockiert Batterie (22./23.03.2026)
Problem: Batterie entlud nicht, Running State = 40, trotz korrekter Parameter. Vermutete Ursache: Fehlgeschlagener Wallbox-Ladeversuch am 22.03. nachmittags. Wallbox blieb in Status "Laden unterbrochen" hängen → WR-EMS reservierte Leistung für Wallbox → Batterie-Entladung blockiert. Begleiterscheinungen: Batteriekapazität=0, Max SOC=50% — möglicherweise durch Wallbox-EMS-Interaktion zurückgesetzt. Fix: WR-Reset (AC+DC+Batterie aus, 10 Min, wieder ein) → Wallbox-Status auf "nicht angeschlossen" zurückgesetzt. Verifizierung: Forced Mode per Modbus (13049=2, 13050=0xBB, 13051=3000) → Batterie entlud 3 kW → BMS funktioniert. Verifizierung Abend 23.03.: Batterie entlädt im Eigenverbrauchsmodus → State 12, 265V, SOC 99%, Netz 0W. Problem bestätigt gelöst durch WR-Reset. Empfehlung: Nach jedem abgebrochenen Wallbox-Ladevorgang Status in iEnergyCharge App prüfen. Bei Fehlzustand: Wallbox in App manuell zurücksetzen oder WR neustarten.
Vorfall 4: Batterie-Stopp durch Kälteschutz (26./27.03.2026)
Problem: Ab 26.03. ~22:00 entlud die Batterie nicht mehr, WR ging in Standby (Running State=0). Hausverbrauch, Batterie-Leistung zeigten 0 — in HA, Grafana UND iSolarCloud.
Ursache: Kälteschutz des BMS. Die Nacht 26→27.03 war deutlich kälter als die Nächte davor:
| Nacht 25→26.03 (OK) | Nacht 26→27.03 (Stopp) | |
|---|---|---|
| Batterie-Temp 22:00 | 8°C | 6°C |
| Tiefsttemp (morgens) | 4°C | 2°C |
| Entladung | ganze Nacht (77%→36%) | stoppt um 22:00 (91%→77%) |
Die SBR LiFePO4-Zellen stoppen die Entladung bei ≤5-6°C Batterietemperatur.
Kein Fix nötig — Hardwareschutz des BMS. Batterie entlädt wieder bei steigender Temperatur.
Begleitfix: Weil der WR im Standby-Modus 0 für das Load-Register meldet, wurden berechnete Metriken eingeführt (siehe Abschnitt "Berechnete Metriken").
Kaelteschutz und Standort-Isolierung
Hintergrund: Die SBR-Module stehen im Carport (ueberdacht, feuchtigkeitsgeschuetzt, aber nicht temperaturgeschuetzt). Im Winter faellt die Batterietemperatur regelmaessig unter die BMS-Schwelle.
BMS-Temperaturgrenzen (fest, nicht konfigurierbar):
| Temperatur | Laden | Entladen |
|---|---|---|
| > 5°C | Ja | Ja |
| 0-5°C | Nein | Eingeschraenkt/Nein |
| < 0°C | Nein | Nein |
Die 5°C-Grenze ist im BMS der SBR-Module hardcodiert — kein Parameter in iSolarCloud, kein Modbus-Register, nicht aenderbar. Der Temperatursensor sitzt im BMS innerhalb der Module (misst Zelltemperatur direkt).
Sungrow spezifiziert fuer SBR-Module: -10°C bis +50°C (Lagerung), 0°C bis +50°C (Betrieb).
Empfehlung: Styropor-Isolierung fuer Winterbetrieb
- Styropor-Platten (40-60 mm) um alle Module — Seiten, Deckel, Unterlage
- Kabel durch Ausschnitte fuehren
- Nicht luftdicht verschliessen — Belueftungsschlitze lassen (Kondensation)
- Optional: Frostwaechter-Heizluefter (Thermostat auf 8°C) mit in die Box
- Im Fruehjahr Deckel abnehmen — Ueberhitzung im Sommer vermeiden!
Erwarteter Effekt: +3-5°C gegenueber Aussentemperatur. Die Batterie erzeugt beim Laden/Entladen selbst Waerme, die Isolierung haelt diese im Gehaeuse.
Kosten: ~20 EUR Material (Baumarkt), optional +30 EUR Frostwaechter.
Kalibrierung nach Modulerweiterung
- Batteriekapazität im WR/iSolarCloud anpassen (kWh)
- Battery Type ggf. aktualisieren (SBR128 → SBR160)
- Einmal komplett entladen lassen (bis BMS-Abschaltung)
- Einmal komplett auf 100% laden lassen
- Dieser Vollzyklus synchronisiert BMS-SOC und WR-SOC
iSolarCloud — Zugang & Menüstruktur
Zugangsdaten
| Portal | Account | Typ |
|---|---|---|
| https://web3.isolarcloud.eu | anknorr@gmail.com | Installateur (Erweiterte Einstellungen) |
| https://web3.isolarcloud.eu | anknorr@me.com | Endkunde |
| iOS App: iSolarCloud | — | Kein Zugriff auf Erweiterte Einstellungen! |
Menüstruktur Web-App (deutsche GUI)
Geräte → Wechselrichter SH10RT auswählen → Einstellungen
├── Allgemeine Parametereinstellungen (Endkunde)
│ ├── Leistungssteuerung
│ │ ├── Backup-Modus aktivieren
│ │ └── Reservierter Batterie-SOC für Backup
│ ├── Energiemanagementparameter
│ │ ├── EMS-Modus
│ │ └── DO-Kontakt
│ └── Batterie-Management
│ ├── Lade-/Entladezeiten
│ └── Zwangsladung
│
└── Erweiterte Parametereinstellungen (nur Installateur, nur Web!)
├── Schutzparameter
├── Leistungssteuerungsmodus
├── Energiemanagementparameter
└── Batterieparameter
├── Batteriekapazität (kWh)
├── Max SOC (%)
├── Min SOC (%) ← Entlade-Untergrenze
├── Max. Ladeleistung (kW)
├── Max. Entladeleistung (kW)
└── Entladeabschaltung SOC
Wichtig: Erweiterte Einstellungen sind nur in der Web-Version verfügbar, nicht in der iOS App!
API-Verschlüsselung
Die iSolarCloud API (seit ~2026) erfordert AES+RSA-Verschlüsselung:
1. Random AES-256 Key generieren ("web" + 29 Zufallszeichen)
2. AES Key mit RSA Public Key verschlüsseln → Header x-random-secret-key
3. Request-Body mit AES-ECB verschlüsseln (hex-encoded)
4. Header x-access-key: 9grzgbmxdsp3arfmmgq347xjbza4ysps
5. AppKey: B0455FBE7AA0328DB57B59AA729F05D8
6. Passwort als MD5-Hash
7. RSA Public Key: siehe /tmp/isolar_final2.py
Status API-Zugang: Login mit anknorr@me.com funktioniert (MD5-Hash von 282013Hr). Login mit anknorr@gmail.com scheitert (Passwort-Format unklar).
Home Assistant Integration
Modbus-Konfiguration
Datei: /data/docker/homeassistant/config/modbus_sungrow.yaml
Prometheus-Metriken (sungrow-exporter, Port 9789)
45 Metriken mit Prefix sungrow_*, u.a.:
- sungrow_battery_soc_percent, sungrow_running_state
- sungrow_battery_power_watts, sungrow_battery_voltage_volts
- sungrow_daily_charge_energy_kwh, sungrow_daily_discharge_energy_kwh
Berechnete Metriken (hinzugefügt 27.03.2026)
Problem: Wenn der WR in Standby geht (nachts, Kälteschutz), meldet das Load-Register 0W, obwohl das Haus weiter Strom bezieht. Grid-Register funktioniert weiterhin (CT-Clamp/Meter).
HA Template-Sensoren (in configuration.yaml):
- sensor.sungrow_hausverbrauch_berechnet — Berechnet PV - Grid + Battery als Fallback
wenn Load-Register 0 liefert. Nutzt running_state-Bits für Batterie-Vorzeichen.
- sensor.sungrow_batterie_status — Nutzt running_state-Bits (Bit 1=Laden, Bit 2=Entladen)
statt nur Leistungswert. 0W bei running_state=0 → "Standby" (vorher fälschlich "Entladen").
Prometheus-Exporter (neue Metriken):
- sungrow_load_power_calculated_watts — Berechneter Hausverbrauch (Fallback)
- sungrow_battery_power_signed_watts — Mit Vorzeichen (positiv=Laden, negativ=Entladen)
Grafana Dashboard (ck-pv-sungrow): 4 Panels auf berechnete Metriken umgestellt.
Logik: Wenn load_power > 0 → Registerwert verwenden. Sonst: max(0, PV - Grid_active + Battery_net).
Dabei Battery_net = +power bei Entladung, -power bei Ladung, 0 bei Standby (per running_state-Bits).
Alertmanager-Regeln (in alerts.yml)
- BatterieEntlaedtNicht: Running State=40 + SOC>15%, 30 Min → warning
- BatterieStopp: Running State=40 + SOC>50%, 5 Min → critical
- SungrowExporterDown: Exporter nicht erreichbar, 5 Min → warning
Energie-Dashboard
- HA:
/energie/pv(lovelace.energie) - Grafana: sungrow-exporter Metriken
Sungrow-Subnetz (192.168.100.x)
| IP | Gerät | Ports |
|---|---|---|
| .1 | Gateway | 80, 443 |
| .23 | FRITZ!Powerline-Adapter | 80, 443 |
| .26 | FRITZ!Repeater | 80, 443 |
| .28 | WiNet-S (zweiter Pfad) | 443, 502 |
| .73 | INSTAR IP-Kamera | 80, 443 |
| .75 | WiNet-S / SH10RT | 443, 502 |
WiNet-S Local API
POST https://192.168.100.75/inverter/list→ Geräteliste (WR, Wallbox, Batterie)- Kein Reboot-Endpunkt verfügbar
- Kein Parameter-Set-Endpunkt verfügbar
- Parameter-Änderungen nur über iSolarCloud (Cloud) oder Modbus (wo erlaubt)
Quellen
- Sungrow Communication Protocol V1.0.20 – V1.1.4 (Residential Hybrid Inverter)
- GitHub: mkaiser/Sungrow-SHx-Inverter-Modbus-Home-Assistant
- GitHub: janispritzkau/Modbus Registers Gist
- Photovoltaikforum: Sungrow-Board (Threads zu Min SOC, Erweiterte Einstellungen)
- Sungrow Academy: academy.sungrow-emea.com
- elektronik-nach-mass.de: Sungrow Hybrid technische Einstellungen PDFs
Troubleshooting-Checkliste: Kälteschutz
- Batterie-Temperatur prüfen (Exporter:
sungrow_battery_temperature_celsius): <5°C → Entladung gesperrt - Running State (13000): 0 = kompletter Standby, 40 = Import+Last (Netz versorgt Haus)
- Grafana/HA: Berechnete Metriken zeigen trotzdem korrekten Verbrauch (über Grid-Wert)
- iSolarCloud: Zeigt 0 — kann nicht gefixt werden, WR meldet nichts im Standby
- Entwarnung: Batterie entlädt wieder automatisch bei steigender Temperatur
Aktualisiert: 28.03.2026 Zusammengeführt aus: Modbus-Analyse, iSolarCloud App-Recherche, SBR-Batterie-Dokumentation, Kälteschutz-Analyse