From dc2df891fb7df94d0a7120e81fbdbbdb53990b60 Mon Sep 17 00:00:00 2001 From: retr0 <42kdesigners@gmail.com> Date: Thu, 7 May 2026 10:08:59 +0200 Subject: [PATCH] fix: TCP-Timeout auf 40% des Poll-Intervalls begrenzt (max. 5s) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Logs zeigen: Bei 10s Poll-Rate + 10s TCP-Timeout läuft ein fehlgeschlagener Connect exakt so lange wie das Interval. stop.wait() wird 0 → nächster Poll startet sofort → zweite parallele TCP-Verbindung → Wallbox überfordert → Spirale. Fix: timeout = min(5.0, interval * 0.4). Bei 15s → 5.0s Timeout; bei 10s → 4.0s. Ein Fehler belegt max. 40% des Intervalls, der Rest ist Wartezeit vor dem nächsten Versuch. Gilt für WallboxReader (Kathrein) und ModbusReader (ShineLAN-X / SDM-630). Co-Authored-By: Claude Sonnet 4.6 --- ROADMAP.md | 1 + haos-addon/config.yaml | 2 +- haos-addon/src/main.py | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index e03ce9f..2d75f96 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -99,3 +99,4 @@ | v1.8.22 | 2026-05-06 | Fix: Stromtarif-Einstellungen bleiben nach Neustart erhalten; Finanzen-Tab Layout | | v1.8.23 | 2026-05-07 | Fix: Goodwe Netzbezug-Periode zeigt 0 kWh — integrierter grid_power-Zähler statt e_total_imp-Delta | | v1.8.24 | 2026-05-07 | Fix: WR/Wallbox-Offline-Flapping — erst nach 3 aufeinanderfolgenden Lesefehlern offline schalten | +| v1.8.25 | 2026-05-07 | Fix: TCP-Timeout auf max. 40% des Poll-Intervalls begrenzt (Wallbox + Modbus) — verhindert Poll-Überlappung | diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index 088f9bc..f3e9cd4 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -1,5 +1,5 @@ name: ShineBridge -version: "1.8.24" +version: "1.8.25" 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 55a2dbc..28264b7 100644 --- a/haos-addon/src/main.py +++ b/haos-addon/src/main.py @@ -280,7 +280,7 @@ def _poll_loop(inv_cfg: Dict[str, Any], stop: threading.Event): log.info("[%s] Poll-Loop: %s @ %s (Goodwe UDP/8899) alle %ds", inv_id, inverter.name, host, interval) elif inverter.protocol == "kathrein": - reader = WallboxReader(host=host, port=port) + reader = WallboxReader(host=host, port=port, timeout=min(5.0, interval * 0.4)) ems = EmsController( min_pv_power=inv_cfg.get("ems_min_pv", 1400), pv_timeout_h=inv_cfg.get("ems_timeout", 4.0), @@ -290,7 +290,7 @@ def _poll_loop(inv_cfg: Dict[str, Any], stop: threading.Event): log.info("[%s] Poll-Loop: %s @ %s:%s (Kathrein EMS) alle %ds", inv_id, inverter.name, host, port, interval) else: - reader = ModbusReader(host=host, port=port, slave=slave) + reader = ModbusReader(host=host, port=port, slave=slave, timeout=min(5.0, interval * 0.4)) log.info("[%s] Poll-Loop: %s @ %s:%s alle %ds", inv_id, inverter.name, host, port, interval)