From dfb42e69023102b1a1bdc103c8c1e2d8bee46948 Mon Sep 17 00:00:00 2001 From: retr0 <42kdesigners@gmail.com> Date: Tue, 5 May 2026 13:12:43 +0200 Subject: [PATCH] v1.8.15: Abschlags-Tracker zeigt ganze Zahlungen statt Bruchmonate Berechnung auf geleistete Abschlagszahlungen umgestellt: Anzahl ganzer Monate seit Abrechnungsstart statt Tage/30.4. Co-Authored-By: Claude Sonnet 4.6 --- haos-addon/config.yaml | 2 +- haos-addon/src/main.py | 14 +++++++++----- haos-addon/src/web/index.html | 6 +++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index 813f71c..7cdc580 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -1,5 +1,5 @@ name: ShineBridge -version: "1.8.14" +version: "1.8.15" 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 2fb7afe..a1efeab 100644 --- a/haos-addon/src/main.py +++ b/haos-addon/src/main.py @@ -509,17 +509,21 @@ def api_period_energy(): grundpreis = float(State.mqtt_cfg.get("grundpreis_eur_per_month", 0.0)) yr_key = history.period_key("yearly", billing_day, billing_month) yr_start = datetime.date.fromisoformat(yr_key) - days_elapsed = (datetime.date.today() - yr_start).days - months_elapsed = round(days_elapsed / 30.4375, 4) - total_paid = round(months_elapsed * monthly_rate, 2) - grundpreis_total= round(months_elapsed * grundpreis, 2) + today = datetime.date.today() + # Anzahl geleisteter Abschlagszahlungen (ganze Monate seit Periodenstart) + months_diff = (today.year - yr_start.year) * 12 + (today.month - yr_start.month) + if today.day >= yr_start.day: + months_diff += 1 + payments_made = max(0, months_diff) + total_paid = round(payments_made * monthly_rate, 2) + grundpreis_total= round(payments_made * grundpreis, 2) energy_cost = result.get("yearly", {}).get("import_cost", 0.0) total_cost = round(energy_cost + grundpreis_total, 2) nachzahlung = round(total_cost - total_paid, 2) result["billing_tracker"] = { "monthly_rate_eur": monthly_rate, "grundpreis_eur_per_month": grundpreis, - "months_elapsed": round(months_elapsed, 1), + "payments_made": payments_made, "total_paid_eur": total_paid, "grundpreis_total_eur": grundpreis_total, "energy_cost_eur": energy_cost, diff --git a/haos-addon/src/web/index.html b/haos-addon/src/web/index.html index 93e6017..790a57e 100644 --- a/haos-addon/src/web/index.html +++ b/haos-addon/src/web/index.html @@ -673,15 +673,15 @@ function renderEnergy(inverters, aggregates, period, spotData) { const nzLabel = isNachzahlung ? 'Voraussichtliche Nachzahlung' : 'Voraussichtliches Guthaben'; const nzSign = isNachzahlung ? '+' : '−'; return `
-
Abschlags-Übersicht · ${bt.months_elapsed} Monate
+
Abschlags-Übersicht · ${bt.payments_made} Zahlung${bt.payments_made !== 1 ? 'en' : ''}
${fEur(bt.total_paid_eur)}
-
Bereits bezahlt
${bt.months_elapsed} × ${fEur(bt.monthly_rate_eur)}/Monat
+
Bereits bezahlt
${bt.payments_made} × ${fEur(bt.monthly_rate_eur)}
${fEur(bt.grundpreis_total_eur)}
-
Grundpreis anteilig
${fEur(bt.grundpreis_eur_per_month)}/Monat
+
Grundpreis anteilig
${bt.payments_made} × ${fEur(bt.grundpreis_eur_per_month)}
${fEur(bt.energy_cost_eur)}