HU1 studie: --pure-bess a --rt-eff flagy + výsledky čistého BESS
Zadání majitele: čistý BESS bez odběru, export povolen, varianta bez ztrát. Výsledky (365 dní vč. zimy 25/26): arbitráž na spotu +129.4 tis. Kč/rok (η=1.0) / +110.0 tis. (η=0.9); konzervativně (spready −30 % + deg 0.5) +63.4 tis. Na fixní smlouvě jen ~24–35 tis. → spot je podmínka smysluplnosti BESS. Léto ~378 Kč/den, zima ~308. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -152,8 +152,10 @@ async def load_site_params(conn: asyncpg.Connection) -> SiteParams:
|
||||
usable_capacity_wh=float(b["usable_capacity_wh"]),
|
||||
min_soc_wh=float(b["min_soc_wh"]),
|
||||
soc_max_wh=float(b["soc_max_wh"]),
|
||||
charge_efficiency=float(b["charge_efficiency"]),
|
||||
discharge_efficiency=float(b["discharge_efficiency"]),
|
||||
charge_efficiency=(RT_EFF_OVERRIDE ** 0.5 if RT_EFF_OVERRIDE is not None
|
||||
else float(b["charge_efficiency"])),
|
||||
discharge_efficiency=(RT_EFF_OVERRIDE ** 0.5 if RT_EFF_OVERRIDE is not None
|
||||
else float(b["discharge_efficiency"])),
|
||||
max_charge_power_w=float(b["max_charge_power_w"]),
|
||||
max_discharge_power_w=float(b["max_discharge_power_w"]),
|
||||
degradation_cost_czk_kwh=float(b["degradation_cost_czk_kwh"]),
|
||||
@@ -230,8 +232,14 @@ async def load_ote_days(
|
||||
# ---------------------------------------------------------------------------
|
||||
# Odběrový profil a ceny
|
||||
# ---------------------------------------------------------------------------
|
||||
PURE_BESS = False #: True → nulový odběr (--pure-bess)
|
||||
RT_EFF_OVERRIDE: float | None = None #: --rt-eff (1.0 = bez ztrát)
|
||||
|
||||
|
||||
def load_profile_w(ts_utc: datetime) -> float:
|
||||
"""Parametrizovaný průmyslový odběr (W) pro slot začínající ts_utc."""
|
||||
if PURE_BESS:
|
||||
return 0.0
|
||||
local = ts_utc.astimezone(PRAGUE)
|
||||
load = LOAD_BASE_W
|
||||
is_workday = local.weekday() < 5 or not PEAK_WORKDAYS_ONLY
|
||||
@@ -464,6 +472,9 @@ def annualize(rs: list[DayResult], getter) -> float:
|
||||
# Main
|
||||
# ---------------------------------------------------------------------------
|
||||
async def run(args: argparse.Namespace) -> None:
|
||||
global PURE_BESS, RT_EFF_OVERRIDE
|
||||
PURE_BESS = bool(getattr(args, "pure_bess", False))
|
||||
RT_EFF_OVERRIDE = getattr(args, "rt_eff", None)
|
||||
dsn = _build_dsn(args)
|
||||
try:
|
||||
conn = await asyncpg.connect(dsn, timeout=15)
|
||||
@@ -780,6 +791,10 @@ def main() -> None:
|
||||
)
|
||||
p.add_argument("--from", dest="range_from", default=None, help="YYYY-MM-DD (Prague)")
|
||||
p.add_argument("--to", dest="range_to", default=None, help="YYYY-MM-DD (Prague), včetně")
|
||||
p.add_argument("--pure-bess", action="store_true",
|
||||
help="čistý BESS: nulový odběr (jen arbitráž nákup/prodej)")
|
||||
p.add_argument("--rt-eff", default=None, type=float,
|
||||
help="přepiš round-trip účinnost (např. 1.0 = bez ztrát, 0.9 = realisticky); default = hodnoty z DB")
|
||||
p.add_argument("--fix-buy", default=FIX_BUY_CZK_KWH_DEFAULT, type=float,
|
||||
help="dnešní fixní nákupní cena Kč/kWh (default proxy BA81)")
|
||||
p.add_argument("--quick", action="store_true", help="jen posledních 60 dní (rychlý test)")
|
||||
|
||||
Reference in New Issue
Block a user