diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index 4d7af5f..9745f44 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -1,5 +1,5 @@ name: ShineBridge -version: "1.7.4" +version: "1.7.5" 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 56ab615..d047bbb 100644 --- a/haos-addon/src/main.py +++ b/haos-addon/src/main.py @@ -245,13 +245,20 @@ def _poll_loop(inv_cfg: Dict[str, Any], stop: threading.Event): if values and "grid_power" not in values and "import_kwh" in values and "total_power" in values: values["grid_power"] = values["total_power"] - # Growatt SPH: beide Batterie-Register können gleichzeitig != 0 sein (Messartefakt). - # Batterie kann physikalisch nur laden ODER entladen — kleineren Wert auf 0 setzen. - if values and "bat_charge_power" in values and "bat_discharge_power" in values: - if values["bat_charge_power"] >= values["bat_discharge_power"]: + # Growatt SPH: Register 1009/1011 für Batterie sind unzuverlässig (Messartefakt). + # Batterie-Nettoleistung wird stattdessen aus der Energiebilanz abgeleitet: + # bat_net = PV + grid_import - grid_export - ac_power_total + # Alle vier Quellen sind direkt gemessene, verlässliche Register. + if values and all(k in values for k in ("pv1_power", "ac_power_total", + "power_to_user", "power_to_grid")): + pv = values.get("pv1_power", 0) + values.get("pv2_power", 0) + bat_net = pv + values["power_to_user"] - values["power_to_grid"] - values["ac_power_total"] + if bat_net >= 0: + values["bat_charge_power"] = round(bat_net, 1) values["bat_discharge_power"] = 0.0 else: - values["bat_charge_power"] = 0.0 + values["bat_discharge_power"] = round(-bat_net, 1) + values["bat_charge_power"] = 0.0 # EMS: PV-Überschuss aus anderen Geräten holen und Ladestrom regeln if ems is not None and values is not None: