From 0dbf0266a8732bd48f4ed32ad906901c8918b0c9 Mon Sep 17 00:00:00 2001 From: retr0 <42kdesigners@gmail.com> Date: Mon, 4 May 2026 11:42:08 +0200 Subject: [PATCH] fix: _get_pv_surplus() via grid_power-Aggregat (SDM-630 fix, v1.8.11) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SDM-630 liefert grid_power (negativ=Einspeisung), wurde von active_power- Logik nicht erfasst. Jetzt einheitlich über grid_power-Aggregat. Co-Authored-By: Claude Sonnet 4.6 --- haos-addon/config.yaml | 2 +- haos-addon/src/main.py | 22 +++------------------- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index 030f395..6c82241 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -1,5 +1,5 @@ name: ShineBridge -version: "1.8.10" +version: "1.8.11" slug: shinebridge description: Growatt Wechselrichter lokal in Home Assistant — Modbus TCP via ShineLAN-X, MQTT Discovery, Web UI url: https://gitea.bitfire.work/retr0/shinebridge diff --git a/haos-addon/src/main.py b/haos-addon/src/main.py index 8eb66ad..207dd6e 100644 --- a/haos-addon/src/main.py +++ b/haos-addon/src/main.py @@ -180,25 +180,9 @@ def _compute_aggregates(allow_stale: bool = False) -> Dict[str, float]: # ── EMS Hilfsfunktionen ─────────────────────────────────────── def _get_pv_surplus() -> float: - """PV-Überschuss in Watt aus laufenden Geräten ermitteln. - Goodwe: active_power negativ = Einspeisung (Überschuss). - Growatt: power_to_grid positiv = Einspeisung. - """ - surplus = 0.0 - with State.lock: - for inv_cfg in State.inverters_cfg: - d = State.inv_data.get(inv_cfg["id"], {}) - if not d.get("modbus_ok") or not d.get("values"): - continue - v = d["values"] - # Goodwe ET: active_power > 0 = Einspeisung, < 0 = Netzbezug - # house_consumption = ppv + pbattery1 - active_power (Bibliotheks-Formel) - if "active_power" in v: - surplus += max(0.0, v["active_power"]) - # Growatt - if "power_to_grid" in v: - surplus += max(0.0, v["power_to_grid"]) - return surplus + """PV-Überschuss in Watt. Nutzt grid_power-Aggregat (negativ = Einspeisung).""" + agg = _compute_aggregates(allow_stale=True) + return max(0.0, -agg.get("grid_power", 0.0)) # ── Poll Loop ─────────────────────────────────────────────────