From 9913dccfa9d2d9e5ffdf85e2cfc5124aeb3b8542 Mon Sep 17 00:00:00 2001 From: retr0 <42kdesigners@gmail.com> Date: Mon, 27 Apr 2026 11:27:00 +0200 Subject: [PATCH] Fix: SDM-630 Gesamtwirkleistung aus Phasensumme berechnet (v1.2.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Register 0x0030 liefert je nach SDM-630-Firmware-Variante den Phasenwinkel statt der Gesamtwirkleistung. total_power wird jetzt zuverlässig aus power_l1 + power_l2 + power_l3 berechnet und überschreibt den Hardware-Wert. Co-Authored-By: Claude Sonnet 4.6 --- ROADMAP.md | 42 +++++++++++++++++++++++++++++++++ haos-addon/config.yaml | 2 +- haos-addon/src/modbus_client.py | 8 +++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 ROADMAP.md diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..ea9ea09 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,42 @@ +# ShineBridge — Roadmap + +## In Arbeit / Bekannte Bugs + +- [ ] SDM-630 Gesamtwirkleistung zeigt falschen Wert → Fix in v1.2.1 (aus Phasensumme berechnet) + +--- + +## Phase 2 (ShineBridge Add-on) + +- [ ] Flash-Wizard — NuttX-Firmware via USB DFU direkt aus dem HA Web UI flashen (kein ST-Link) +- [ ] Persistente History — Sensorwerte über Add-on-Neustart hinaus speichern +- [ ] Weitere Growatt-Modelle — MOD 10000, SPH 10000 etc. + +--- + +## Phase 3 — Multi-Brand / Multi-Hardware + +### Goodwe WiFi Stick (ESP32 + LAN) +- [ ] Hardware analysieren: LAN-Chip identifizieren (W5500? LAN8720?) +- [ ] Firmware: NuttX auf ESP32 + mbusd → Modbus TCP Gateway (wie ShineLAN-X) +- [ ] Goodwe Register-Maps in `inverters.py` ergänzen (SEMS-Protokoll, gut dokumentiert) +- [ ] Goodwe-Modelle im Web UI auswählbar + +### ShineWifi-X als ShineBridge-Gateway +- [ ] Schlankes ESP8266-Projekt: RS485 → Modbus TCP Bridge (Arduino/ESP-IDF) +- [ ] Dann: ShineWifi-X ebenfalls in ShineBridge Web UI verwaltbar (statt separater ESPHome-YAMLs) + +### Langfristig +- [ ] ShineBridge als universelle Multi-Brand-Plattform (Growatt, Goodwe, weitere) +- [ ] Hardware-Erkennung automatisch im Web UI + +--- + +## Erledigt + +- [x] v1.0.0 — Grundfunktion: ShineLAN-X + Growatt MIC via Modbus TCP + MQTT +- [x] v1.1.3 — Security: XSS-Fix, Flask-Binding, API-Validierung +- [x] v1.1.4 — Fix: Flask zurück auf 0.0.0.0 (HA Ingress) +- [x] v1.1.5 — Feature: Eastron SDM-630 Support + Float32 Decode +- [x] v1.2.0 — Feature: Aggregat-Gerät + Energie-Dashboard Sensoren +- [x] v1.2.1 — Fix: SDM-630 Gesamtwirkleistung aus Phasensumme berechnet diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index 62a9a26..8424255 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -1,5 +1,5 @@ name: ShineBridge -version: "1.2.0" +version: "1.2.1" slug: shinebridge description: Growatt Wechselrichter lokal in Home Assistant — Modbus TCP via ShineLAN-X, MQTT Discovery, Web UI url: https://gitea.bitfire.work/retr0/Growatt-Wechselrichter-HAOS diff --git a/haos-addon/src/modbus_client.py b/haos-addon/src/modbus_client.py index 974080d..3f76eee 100644 --- a/haos-addon/src/modbus_client.py +++ b/haos-addon/src/modbus_client.py @@ -81,4 +81,12 @@ def _extract_sensors(sensors: list, regs: Dict[int, int]) -> Dict[str, float]: else: raw_val = regs[s.reg] * s.scale values[s.id] = round(raw_val, 3) + + # SDM-630: register 0x0030 enthält je nach Firmware-Variante den Phasenwinkel statt + # der Gesamtwirkleistung → sicherer aus den Phasenwerten ableiten + if {"power_l1", "power_l2", "power_l3"} <= values.keys(): + values["total_power"] = round( + values["power_l1"] + values["power_l2"] + values["power_l3"], 3 + ) + return values