Feature: Eigenversorgungs-Ersparnis in Perioden-Karten (v1.8.2)
- bat_discharge_total + bat_charge_total werden jetzt als Perioden-Starts getrackt - savings_kwh = Batterie-Entladung der Periode (→ Haus + Auto) - savings_eur = savings_kwh × effektiver Importpreis (Festpreis oder Börsendurchschnitt) - Neue Karte "Eigenversorgung" (lila) neben Netzbezug/Einspeisung - Preis-Refaktor: eff_price für Import, Export, Ersparnis aus einer Berechnung Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+19
-14
@@ -407,7 +407,8 @@ def api_period_energy():
|
||||
entry["label"] = f"{pd.strftime('%d.%m.%Y')} – {(end_d - datetime.timedelta(days=1)).strftime('%d.%m.%Y')}"
|
||||
pd_start_ts = datetime.datetime.combine(pd, datetime.time.min).timestamp()
|
||||
|
||||
for agg_id in ("grid_import_kwh", "grid_export_kwh"):
|
||||
for agg_id in ("grid_import_kwh", "grid_export_kwh",
|
||||
"bat_discharge_total", "bat_charge_total"):
|
||||
cur = agg.get(agg_id)
|
||||
if cur is None:
|
||||
continue
|
||||
@@ -416,23 +417,27 @@ def api_period_energy():
|
||||
if val is not None:
|
||||
entry[agg_id] = round(val, 2)
|
||||
|
||||
# Kostenberechnung: Festpreis oder Börsenpreis
|
||||
# Effektiver Importpreis (Festpreis oder Börsenpreis)
|
||||
eff_price = price_import
|
||||
if tariff_type == "spot":
|
||||
avg_ct = _get_avg_spot_price(pd_start_ts, now_ts, spot_country)
|
||||
if avg_ct is not None:
|
||||
eff_price = (avg_ct + spot_markup) / 100
|
||||
entry["spot_avg_ct"] = avg_ct
|
||||
entry["spot_markup_ct"] = spot_markup
|
||||
entry["effective_price"]= round(eff_price, 4)
|
||||
|
||||
if "grid_import_kwh" in entry:
|
||||
if tariff_type == "spot":
|
||||
avg_ct = _get_avg_spot_price(pd_start_ts, now_ts, spot_country)
|
||||
if avg_ct is not None:
|
||||
eff_price = (avg_ct + spot_markup) / 100 # ct/kWh → €/kWh
|
||||
entry["import_cost"] = round(entry["grid_import_kwh"] * eff_price, 2)
|
||||
entry["spot_avg_ct"] = avg_ct
|
||||
entry["spot_markup_ct"] = spot_markup
|
||||
entry["effective_price"]= round(eff_price, 4)
|
||||
else:
|
||||
entry["import_cost"] = round(entry["grid_import_kwh"] * price_import, 2)
|
||||
else:
|
||||
entry["import_cost"] = round(entry["grid_import_kwh"] * price_import, 2)
|
||||
entry["import_cost"] = round(entry["grid_import_kwh"] * eff_price, 2)
|
||||
if "grid_export_kwh" in entry:
|
||||
entry["export_revenue"] = round(entry["grid_export_kwh"] * price_export, 2)
|
||||
|
||||
# Eigenverbrauch-Ersparnis: Batterie-Entladung (→ Haus + Auto) zu Importpreis
|
||||
bat_dch = entry.get("bat_discharge_total")
|
||||
if bat_dch is not None:
|
||||
entry["savings_kwh"] = bat_dch
|
||||
entry["savings_eur"] = round(bat_dch * eff_price, 2)
|
||||
|
||||
result[period_type] = entry
|
||||
|
||||
return jsonify(result)
|
||||
|
||||
Reference in New Issue
Block a user