Merge branch 'worktree-agent-a53f3277d55fecfcb' into dev
All checks were successful
CI and deploy / migration-check (push) Successful in 19s
CI and deploy / deploy (push) Successful in 1m14s

This commit is contained in:
Dusan Vojacek
2026-06-12 19:40:50 +02:00
12 changed files with 425 additions and 57 deletions

View File

@@ -376,12 +376,33 @@ stav baterie auta → cíl (+kWh), deadline, plánovaná nabíjecí okna s ø ce
Tvrdý cíl (deadline) = „bez tohohle neodjedu"; měkký cíl = „klidně doplň
do 100 %, když je energie skoro zadarmo". Implementace: dekompozice
Σ(EV energie) == needed unmet + opp; `opp ∈ [0, headroom]`
(headroom = (100 target) % kapacity, jen když `asset_vehicle.
opportunistic_value_czk_kwh > 0`; default 1 Kč/kWh, 0 = vypnuto).
Σ(EV energie) == needed unmet + opp; `opp ∈ [0, headroom]`.
**Headroom = (100 max(target, soc_at_connect)) % kapacity** (fix paradoxu
„nižší target → větší headroom": auto fyzicky bere jen energii nad svým
aktuálním SoC). **Hodnota kWh:** `coalesce(ev_session.opportunistic_value_czk_kwh,
asset_vehicle.opportunistic_value_czk_kwh)` — V099 přidal per-session override
(NULL = zdědit z vozidla, 0 = vypnout pro session ⇒ headroom_wh = 0; patch
klíčem `opportunistic_value_czk_kwh` ve `fn_ev_session_apply_patch`, validace ≥ 0).
Default vozidla 1 Kč/kWh, 0 = vypnuto.
Hodnota = ušetřené BUDOUCÍ nabíjení (auto neumí zpět — žádný noční prodej),
proto nízká → uplatní se při záporných cenách / plné domácí baterce
(lepší než curtail), běžné ceny ji nezaplatí. Víkendový vzor „pátek
nemusím do plna, víkend doplní zadarmo" z toho plyne sám. Dekompozice
zároveň stropuje celkovou energii do auta (dřív při buy<0 chyběl strop).
Session zůstává v plánu i po dosažení targetu, dokud má headroom.
zároveň stropuje celkovou energii do auta (dřív při buy<0 chyběl strop)
a **bez session je EV == 0** (stop-session nevypíná jen tvrdý cíl, ale i
oportunismus). Session zůstává v plánu i po dosažení targetu, dokud má headroom;
**oportunistická vrstva není omezená deadline** (auto bývá doma dál, odjezd
řeší rolling replan — rozhodnutí 2026-06-12).
### Min. výkon wallboxu a účtování via-bat (2026-06-12, dev)
- **`asset_ev_charger.min_power_w`** (1380 W = 6 A IEC 61851) jde přes
`fn_planning_site_context` do solver_v2: binárka `ev_on[e][t]`,
`setpoint ∈ {0} [min_power_w, max]` — žádné nevykonatelné 400900 W.
- **Tvrdý cíl** sčítá jen sloty **před** deadline (slot začínající v deadline
už nepatří „do deadline" — oprava off-by-one).
- **`ev_direct ≤ gi + PV`** (fyzikální split; via_bat kryje vybíjení baterie).
- **Reporting:** kWh do EV z baterie (via_bat) neplatí slotový buy; solver_v2
je oceňuje oportunitní cenou v `planning_interval.battery_arbitrage_czk`
(min sell exportního slotu téhož pražského dne, jinak terminal value) a
`fn_plan_current_bundle.intervals` nese `ev1/ev2_via_bat_w` pro UI.