implementace dynamickeho bodu T (kde se rodpojuje PV A)
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
Navazuje na [`planning.md`](planning.md), [`planning-arbitrage-accounting.md`](planning-arbitrage-accounting.md), [`planning-changelog.md`](../planning-changelog.md), [`heat-pump.md`](heat-pump.md), [`ev-charging.md`](ev-charging.md).
|
||||
|
||||
**Stav:** část je **implementovaná** (v32–v34), část je **návrh** (v35+ termika, bazén, spirála). V textu je označeno `✅ hotovo` vs `📋 návrh`.
|
||||
**Stav:** část je **implementovaná** (v32–v35), část je **návrh** (v36+ termika, bazén, spirála). V textu je označeno `✅ hotovo` vs `📋 návrh`.
|
||||
|
||||
---
|
||||
|
||||
@@ -31,6 +31,7 @@ Navazuje na [`planning.md`](planning.md), [`planning-arbitrage-accounting.md`](p
|
||||
| **`E_surplus_after_t`** 📋 | Integrál plánovaného přebytku FVE (typ. od **T** do `last_sell<0`), který by jinak šel do sítě / curtail — budget pro TČ předehřát, bazén, spirálu. |
|
||||
| **Pre-neg export (v33)** | Kladné `sell` **před** prvním `sell < 0`: export FVE jen pokud forecast v celém `sell < 0` okně pokryje dobítí na prep cíl (× margin **1,15**). |
|
||||
| **Load-first (v34)** | Dům z `pv_ld`; při dostatečné FVE žádný fiktivní `grid_import = load` v plánu. |
|
||||
| **Rampa B + bod T (v35)** | `soc_need` zpět od tail jen z PV B; **t_detach**; `E_surplus_after_t`; uvolnění A po T (měkké). |
|
||||
| **Reg 340** | Deye *max solar power* ≈ `pv_a_forecast_solver_w − pv_a_curtailed_w`. |
|
||||
|
||||
---
|
||||
@@ -56,13 +57,13 @@ Navazuje na [`planning.md`](planning.md), [`planning-arbitrage-accounting.md`](p
|
||||
|
||||
### 3.2 Fáze B — okno `sell < 0`
|
||||
|
||||
**Energie (dnes v32, návrh v35):**
|
||||
**Energie (v32–v35):**
|
||||
|
||||
| Období v B | Dnes (v32) | Návrh (v35) |
|
||||
|------------|------------|-------------|
|
||||
| Začátek okna | ASAP nabít na **80 %** z A+B | Nabít podle **rampy SoC** odvozené zpět z B od tail |
|
||||
| Střed okna | Měkký **curtail A** při SoC ≥ 80 % na začátku slotu | Od **T**: A necpát do bat; B + přebytek |
|
||||
| Tail (posledních N slotů) | Rampa 80 % → 100 % | Rampa z **T** / B → 100 % |
|
||||
| Období v B | Chování (v35) |
|
||||
|------------|----------------|
|
||||
| Začátek okna | Nabít podle **rampy SoC** (`soc_need`) zpět z PV B od tail |
|
||||
| Střed okna | Od **t_detach**: měkké omezení `bc_pv`; hold/curtail při `soc_prev ≥ soc_target[t]` |
|
||||
| Tail (posledních N slotů) | Rampa z `soc_need[tail_start]` → 100 % |
|
||||
|
||||
**Termika (📋):**
|
||||
|
||||
@@ -83,7 +84,7 @@ Navazuje na [`planning.md`](planning.md), [`planning-arbitrage-accounting.md`](p
|
||||
|
||||
---
|
||||
|
||||
## 4. Implementované vrstvy (v32–v34)
|
||||
## 4. Implementované vrstvy (v32–v35)
|
||||
|
||||
### 4.1 v32 — fázované SoC a curtail A ✅
|
||||
|
||||
@@ -91,7 +92,7 @@ Navazuje na [`planning.md`](planning.md), [`planning-arbitrage-accounting.md`](p
|
||||
|
||||
| Sloupec | Default | Význam |
|
||||
|---------|---------|--------|
|
||||
| `planner_neg_sell_prep_soc_percent` | 80 | Plochý cíl SoC v prep fázi (% `soc_max`). **100** = legacy (tlak na max až v tail). |
|
||||
| `planner_neg_sell_prep_soc_percent` | 80 | **v32 legacy** — od v35 se v LP neřídí (rampa z B). **100** = vypnutí fází (`_neg_sell_phases_enabled`). |
|
||||
| `planner_neg_sell_full_soc_tail_slots` | 4 | Počet 15min slotů tail před koncem denního `sell < 0`. **0** = bez tail. |
|
||||
| `planner_neg_sell_vent_min_sell_czk_kwh` | −1 (home-01) | V tail: ventil pole B (`ge_pv`) pokud `sell ≥` práh. **NULL** = jen při plné baterii. |
|
||||
|
||||
@@ -127,11 +128,32 @@ Navazuje na [`planning.md`](planning.md), [`planning-arbitrage-accounting.md`](p
|
||||
|
||||
**Ověření:** `LoadFirstDispatchTests::test_neg_sell_prep_no_fictitious_grid_import_for_load`.
|
||||
|
||||
### 4.4 v35 — rampa SoC z PV B, bod T, přebytek ✅
|
||||
|
||||
**Tag:** `2026-05-28-neg-sell-b-ramp-v35`
|
||||
|
||||
**Kód:** `_neg_sell_pv_b_charge_wh`, `_neg_sell_day_phases` (rampa), `_neg_sell_e_surplus_after_t_wh`, `_neg_sell_day_pv_b_usable_wh` (cushion v33).
|
||||
|
||||
- Zpětná projekce `soc_need` jen z PV B; prep `soc_target[t] = soc_need[t]` (ne fixních 80 %).
|
||||
- **t_detach** = první prep slot kde `soc_need[t] ≤ soc_need[tail_start]`; **E_surplus_after_t** od T do konce okna.
|
||||
- Prep hold: `soc_prev ≥ soc_target[t]`; po T: `NEG_SELL_POST_DETACH_BCPV_DISCOURAGE` na `bc_pv`.
|
||||
- `solver_params.inputs`: `neg_sell_b_ramp_v35`, `t_detach_idx`, `e_surplus_after_t_wh`, `neg_sell_day_meta`.
|
||||
|
||||
**Ověření:** `NegSellSocPhaseTests::test_b_ramp_t_detach_and_surplus_meta`, MCP `solver_params`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Návrh v35 — energie: rampa z PV B, bod T, přebytek
|
||||
## 5. Specifikace rampy (v35 — reference)
|
||||
|
||||
📋 **Není v produkci** — specifikace pro implementaci.
|
||||
### 5.0 Rozhodnutí produktu (home-01, 2026-05)
|
||||
|
||||
| Téma | Rozhodnutí |
|
||||
|------|------------|
|
||||
| Rampa / **T** | Odvozené z PV B; **bez** řízení fixním `planner_neg_sell_prep_soc_percent` v LP pro home-01. |
|
||||
| TČ v pre-neg | **Zákaz** plánovaného topení. |
|
||||
| Bazén | Min. 4 h filtrace/den, dynamicky navýšit; Shelly; přitop ručně / později. |
|
||||
| Spirála | Loxone; v38. |
|
||||
| UI flex | Workshop **před** v37 — viz § 9.1. |
|
||||
|
||||
### 5.1 Kotva vzadu (tail — beze změny konceptu)
|
||||
|
||||
@@ -270,25 +292,28 @@ Navrhované klíče v `planning_run.solver_params.inputs`:
|
||||
|
||||
Spirála vyžaduje **novou zátěž** v DB + LP (`flex_load_spiral[t]` nebo signál Loxone).
|
||||
|
||||
### 6.4 Konfigurovatelné teploty (📋 — rozhodnutí)
|
||||
### 6.4 Parametry termiky (rozhodnutí + otevřeno)
|
||||
|
||||
| Parametr | Navrh | Poznámka |
|
||||
|----------|-------|----------|
|
||||
| `tuv_comfort_temp_c` | např. 50–52 | Denní komfort |
|
||||
| `tuv_preheat_temp_c` | např. 55–58 | V bodu **T**, podmíněně |
|
||||
| `tuv_evening_topup_before_min` | např. 90 | Doklep před sprchou |
|
||||
| `hp_no_run_pre_neg_export` | true | Blok TČ ve fázích A (v33 sloty) |
|
||||
| Parametr | Stav | Hodnota / poznámka |
|
||||
|----------|------|---------------------|
|
||||
| `hp_no_run_pre_neg_export` | **Rozhodnuto** | `true` — v `pre_neg_pv_export_ts` **netopit** (raději export FVE). |
|
||||
| `tuv_comfort_temp_c` | Otevřeno | Např. 50–52 °C — doplnit do konfigurace site. |
|
||||
| `tuv_preheat_temp_c` | Otevřeno | Např. 55–58 °C — jen v bodu **T**, pokud `E_surplus_after_t` stačí. |
|
||||
| `tuv_evening_topup_hour` | **Rozhodnuto** | **19:00** Europe/Prague — večerní doklep TUV (implementace v36). |
|
||||
| Spirála | **Rozhodnuto** | Ovládání **Loxone**; model v EMS až v38. |
|
||||
|
||||
---
|
||||
|
||||
## 7. Bazén — filtrace a přitop (📋)
|
||||
|
||||
### 7.1 Provozní záměr
|
||||
### 7.1 Provozní záměr (rozhodnutí home-01)
|
||||
|
||||
- **Filtrace ~1 kW** — regulovatelný **denní rozpočet hodin** (např. 4–6 h).
|
||||
- **Kdy:** jen ve **slunečných** hodinách (např. 09:00–17:00 Prague, nebo příznak `is_daytime_pv_surplus_slot` z `fn_load_planning_slots_full`).
|
||||
- **Proč ve dni:** cirkulace promíchá prohřátou hladinu (uživatelský požadavek).
|
||||
- **Priorita:** po naplnění bat rampy / od **T**, před exportem B za `sell < 0`.
|
||||
- **Filtrace ~1 kW** — min. **4 h/den**; **více hodin**, pokud `E_surplus_after_t` a přebytek dovolí (marginalní náklad ≈ 0).
|
||||
- **Kdy:** přes den ve **slunečných** slotech (`is_daytime_pv_surplus_slot` nebo obdobné); **dynamicky** dle cen / přebytku, ne pevné okno 09–17.
|
||||
- **Proč ve dni:** cirkulace promíchá prohřátou hladinu.
|
||||
- **Priorita:** po rampě bat / od bodu **T**, před exportem B za `sell < 0`.
|
||||
- **Přitop vody:** **mimo** první verzi plánovače; začátek sezóny **ručně**; automatika později.
|
||||
- **Exekuce:** **Shelly** — ovládání z EMS po implementaci assetu (v37).
|
||||
|
||||
### 7.2 Napojení na `E_surplus_after_t`
|
||||
|
||||
@@ -342,6 +367,27 @@ Příklad: forecast A = 4 654 W, curtail = 1 117 W → povoleno **3 537 W*
|
||||
|
||||
**Bat. / síť / SoC:** `battery_setpoint_w` / `grid_setpoint_w` / `battery_soc_target_pct` — po v34 u vysoké FVE **grid ≈ 0**, ne fiktivní import = load.
|
||||
|
||||
### 9.1 Vizualizace flexibilních zátěží — probrat před implementací (📋)
|
||||
|
||||
**Stav:** produktové rozhodnutí **není** — **neimplementovat** bazén / rozšířené TČ v UI ani v LP sinku, dokud není schválený návrh. Workshop mezi **v35** a **v37**.
|
||||
|
||||
**Proč:** flexibilní zátěže (TČ, bazén, spirála, EV) sdílí stejnou časovou osu jako energie (**T**, `E_surplus_after_t`, fáze sell<0). Bez přehledného UI bude provoz těžko kontrolovatelný.
|
||||
|
||||
**Návrhy k diskusi** (nic z toho není závazná implementace):
|
||||
|
||||
| Nápad | Co ukázat |
|
||||
|-------|-----------|
|
||||
| **Pásma dne** | V grafu plánu: pre-neg export \| sell<0 prep \| od **T** \| tail \| večerní export bat. |
|
||||
| **Bod T** | Svislá značka + tooltip: `t_detach`, `e_surplus_after_t_wh`, odhad hodin bazénu. |
|
||||
| **Rozpočet bazénu** | „Dnes 2/4 h filtrace naplánováno“ + zbývající Wh přebytku. |
|
||||
| **Slot detail** | Kromě bat/síť/FVE: **TČ** (`heat_pump_setpoint_w`), **EV**, (budoucí) **bazén ON**, badge **flex sink**. |
|
||||
| **Srovnání běhů** | Před/po v35: rampa SoC, méně fiktivního grid importu, curtail A. |
|
||||
| **Živě vs plán** | Volitelně: telemetrie TUV / Shelly pool vs plánovaný stav (až bude data). |
|
||||
|
||||
**Výstup workshopu:** krátký mock / seznam widgetů v `Planning.tsx` + které sloupce ukládat do `planning_interval` / `solver_params`.
|
||||
|
||||
**Otevřené otázky UI:** viz [`docs/06-open-questions.md`](../06-open-questions.md).
|
||||
|
||||
---
|
||||
|
||||
## 10. Priorita flexibilních spotřebičů (📋)
|
||||
@@ -363,14 +409,15 @@ Při `sell < 0` a plné / dostatečné baterii:
|
||||
|
||||
## 11. Roadmap implementace
|
||||
|
||||
| Fáze | Tag / doc | Obsah | Závislost |
|
||||
|------|-----------|--------|-----------|
|
||||
| **v35** | `neg-sell-b-ramp-v35` | Rampa `soc_need` z B, **T**, `E_surplus_after_t`, uvolnění A | V083 sloupce; náhrada plochých 80 % v LP |
|
||||
| **v36** | termika-v36 | Blok TČ v pre-neg; TUV doklep; komfort v `sell<0` po **T** | v35 |
|
||||
| **v37** | pool-v37 | Asset bazén, denní hodiny, LP sink | v35 |
|
||||
| **v38** | spiral-v38 | Spirála + volba TČ vs spirála | Loxone/Modbus, v37 |
|
||||
| Pořadí | Fáze | Tag / doc | Obsah | Blokátor |
|
||||
|--------|------|-----------|--------|----------|
|
||||
| 1 | **v35** ✅ | `neg-sell-b-ramp-v35` | Rampa `soc_need` z B, **T**, `E_surplus_after_t`, uvolnění A | — |
|
||||
| 2 | **UI workshop** | — | Vizualizace flex. zátěží — § 9.1; schválený návrh widgetů | **Před v37** |
|
||||
| 3 | **v36** | `termika-v36` | Blok TČ pre-neg; TUV v `sell<0` po **T**; večerní doklep **19:00** Prague | v35 |
|
||||
| 4 | **v37** | `pool-v37` | Bazén: Shelly, min 4 h/den, LP sink | UI workshop |
|
||||
| 5 | **v38** | `spiral-v38` | Spirála (Loxone) + volba TČ vs spirála | v37 |
|
||||
|
||||
Každá fáze: migrace (pokud DB), `planning_engine.py`, testy MILP, zápis do `planning-changelog.md`, ověření na home-01 přes MCP.
|
||||
Každá implementační fáze: migrace (pokud DB), `planning_engine.py`, testy MILP, `planning-changelog.md`, ověření MCP na home-01.
|
||||
|
||||
---
|
||||
|
||||
@@ -426,4 +473,6 @@ cd backend && python3 -m pytest tests/test_planning_dispatch_milp.py -k "NegSell
|
||||
|
||||
## 14. Otevřená rozhodnutí
|
||||
|
||||
Přesunuta do [`docs/06-open-questions.md`](../06-open-questions.md) sekce **Plánování — neg sell, termika, bazén** — nutné doplnit před v36+.
|
||||
Živý seznam: [`docs/06-open-questions.md`](../06-open-questions.md) — sekce **Plánování — neg sell, termika, flexibilní zátěže**.
|
||||
|
||||
Zbývá hlavně: **čas večerního doklepu TUV** (~19h?), **návrh UI flex zátěží** (workshop před v37).
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
**Planner tag v26:** v25 + upřesnění večerního exportu — viz sekce **Večerní export z baterie** níže a changelog v26.
|
||||
**Planner tag v23:** v22b + **výboj baterie do sítě** před `buy<0` (`_pre_neg_buy_discharge_indices`, sell≥1 Kč/kWh, push `ge_bat` z DB limitů). Viz changelog v23.
|
||||
V `solve_dispatch` (AUTO): **`charge_slots`** = `allow_charge` z DB + **`buy < 0`** + všechny sloty **`sell < 0`** s PV přebytkem > 500 W (i bez `block_export_on_negative_sell`, BA81). **`pv_charge_shortfall`** / **`NEG_SELL_CURTAIL_PENALTY`** platí v těchto slotech. Při **`sell < 0`** (legacy): safety deficit cílí **`soc_max_wh`**; po posledním **`sell < 0`**: **`post_neg_pv_topup`**. **Planner tag v32:** fázované SoC — viz níže.
|
||||
- **Záporný výkup — strategie home-01 (v32–v34 hotovo, v35+ návrh):** Kompletní specifikace (rampa SoC z PV B, bod **T**, termika, bazén, UI curtail): **[`planning-neg-sell-strategy.md`](planning-neg-sell-strategy.md)**. Stručně — **v32:** `planner_neg_sell_prep_soc_percent` (80 %), `planner_neg_sell_full_soc_tail_slots` (4), `planner_neg_sell_vent_min_sell_czk_kwh`; fáze prep/tail, měkký curtail A. **v33:** export FVE před `sell<0` s forecast pojistkou. **v34:** tvrdý load-first. **v35 (návrh):** nahradit fixních 80 % rampou z B a bodem **T**.
|
||||
- **Záporný výkup — strategie home-01 (v32–v35 hotovo, v36+ návrh):** Kompletní specifikace (rampa SoC z PV B, bod **T**, termika, bazén, UI curtail): **[`planning-neg-sell-strategy.md`](planning-neg-sell-strategy.md)**. Stručně — **v32:** fáze prep/tail, curtail A. **v33:** export FVE před `sell<0` s forecast pojistkou (B usable). **v34:** tvrdý load-first. **v35:** rampa `soc_need` z PV B, **t_detach**, `E_surplus_after_t` (tag `2026-05-28-neg-sell-b-ramp-v35`).
|
||||
- **Před sell<0 — export FVE s forecast pojistkou (v33):** `_pre_neg_pv_export_forecast_cushion_ok` — export FVE v kladných slotech před prvním `sell<0` jen pokud součet predikovaného PV přebytku v sell<0 okně (týž pražský den) pokryje dobítí na prep SoC (× **1,15**). Jinak LP raději nabíjí z FVE (riziko deště). Při splněné pojistce: `bc_pv=0` v `pre_neg_pv_export_ts`, shortfall na `ge_pv`, penalizace `bc_pv`. `solver_params.inputs.pre_neg_pv_export_forecast_ok`, `pre_neg_pv_export_slots`. Testy `PreNegPvExportForecastTests`. U **fixního tarifu** s polem B: **`ge_pv ≤ pv_b`** (ne pv_store **`ge_pv = 0`**). Při **`deye_gen_microinverter_cutoff_enabled`**: **`ge == 0` jen** pokud **`block_export_on_negative_sell`** (KV1), ne kvůli samotnému `z_gen_cutoff` (BA81 musí moci exportovat B při plné baterii). Vstupní **`soc_wh`** z telemetrie se před MILP omezí přes **`_planner_soc_for_solver`** (rezerva ~650 Wh pod `soc_max`, jinak Infeasible při 100 % SoC a dlouhém záporném výkupu). **`planner_build_tag`** v `solver_params`. Changelog: [`docs/planning-changelog.md`](../planning-changelog.md).
|
||||
- **Záporná nákupní cena:**
|
||||
- horní mez `grid_import` zahrnuje `load_baseline_w` + nabíjení/EV/TČ (bez nekonečného importu).
|
||||
|
||||
@@ -18,15 +18,34 @@ Tento soubor slouží jako živý seznam věcí které je potřeba rozhodnout p
|
||||
|
||||
## Důležité (neblokují, ale řeší se brzy)
|
||||
|
||||
### Plánování — neg sell, termika, bazén
|
||||
### Plánování — neg sell, termika, flexibilní zátěže
|
||||
|
||||
Kompletní návrh: [`docs/04-modules/planning-neg-sell-strategy.md`](04-modules/planning-neg-sell-strategy.md). Implementace v35+ čeká na doplnění:
|
||||
Kompletní návrh: [`docs/04-modules/planning-neg-sell-strategy.md`](04-modules/planning-neg-sell-strategy.md).
|
||||
|
||||
- [ ] **v35 — bod T a rampa SoC z PV B** — potvrdit, zda `soc_detach_wh` = odvozené z rampy, nebo ponechat konfigurovatelné % jako strop (náhrada 80 %).
|
||||
- [ ] **TUV teploty** — `tuv_comfort_temp_c`, `tuv_preheat_temp_c` pro předehřát v bodu T; čas večerního doklepu před sprchou (fixní hodina vs. uživatelský profil).
|
||||
- [ ] **Bazén** — `filter_hours_per_day` (kolik hodin filtrace), okno slunce (Prague 09–17?), jen filtrace 1 kW nebo i přitop TČ vody.
|
||||
- [ ] **Spirála** — je ovladatelná z EMS/Loxone? Samostatný asset vs. signál; priorita oproti TČ v dnech bez `sell < 0`.
|
||||
- [ ] **TČ v pre-neg exportu** — potvrdit zákaz plánovaného topení ve slotech `pre_neg_pv_export_ts` (v36).
|
||||
#### Rozhodnuto (home-01, 2026-05)
|
||||
|
||||
| Téma | Rozhodnutí |
|
||||
|------|------------|
|
||||
| **v35 — bod T, rampa SoC** | `soc_detach` a rampa **jen odvozené** z forecastu PV B zpět od tail (100 %). Fixní **80 %** v LP pro home-01 **zrušit** (sloupce V083 mohou zůstat pro legacy/KV1, ale solver home-01 je neřídí). |
|
||||
| **TČ před `sell < 0`** | V ranních slotech **pre-neg export** (v33) **netopit** — energii raději **prodat** do site. |
|
||||
| **Spirála** | Ovládání přes **Loxone** (signál / virtuální vstup). Samostatný model v EMS až ve fázi v38. |
|
||||
| **Bazén — filtrace** | Min. **4 h/den**, za dne **více**, pokud je přebytek (`E_surplus_after_t`) a „nic to nestojí“. Rozložení **dynamicky** dle cen / přebytku / slunce, ne pevné 09–17. |
|
||||
| **Bazén — přitop** | **Mimo** automatiku plánovače na začátku; sezónní nahřátí **ručně**. Automatický přitop až později, pokud vůbec. |
|
||||
| **Bazén — exekuce** | **Shelly** (zapínání filtrace) — napojit až po v37 (asset + LP), ovládání z EMS. |
|
||||
|
||||
#### Otevřeno před implementací
|
||||
|
||||
- [x] **TUV — večerní doklep** — **19:00** Europe/Prague (rozhodnuto 2026-05); implementace v **v36**; doplnit `tuv_comfort_temp_c` / `tuv_preheat_temp_c` do konfigurace site.
|
||||
- [ ] **Vizualizace flexibilních zátěží v UI** — **probrat a navrhnout před v37+** (neimplementovat bazén/TČ sink do FE naslepo). Viz [`planning-neg-sell-strategy.md` § 9.1](04-modules/planning-neg-sell-strategy.md). Návrhy k diskusi: pásma dne (pre-neg / sell<0 / bod **T**), rozpočet hodin bazénu vs. `E_surplus_after_t`, slotový rozpad `hp` / EV / (budoucí pool), srovnání běhů plánu.
|
||||
- [x] **v35 implementace** — rampa B, **t_detach**, `E_surplus_after_t` (`2026-05-28-neg-sell-b-ramp-v35`).
|
||||
|
||||
#### Roadmap (pořadí)
|
||||
|
||||
1. ~~**v35**~~ — hotovo
|
||||
2. **Workshop UI** — flexibilní zátěže (viz výše)
|
||||
3. **v36** — termika (blok TČ pre-neg, TUV v `sell < 0`, doklep **19:00**)
|
||||
4. **v37** — bazén (Shelly + LP), až po UI dohodě
|
||||
5. **v38** — spirála (Loxone)
|
||||
|
||||
- [x] **Arbitráž baterie — 1. vlna (před solve):** `charge_acquisition_buy_czk_kwh` + cutoff před 1. `allow_discharge_export`; LP `+ge_bat×acquisition` v exportních slotech. Zbývá iterace po solve a více charge slotů — [`planning-arbitrage-accounting.md`](04-modules/planning-arbitrage-accounting.md) §6, [`docs/05-todo.md`](05-todo.md).
|
||||
|
||||
|
||||
@@ -7,7 +7,17 @@ Formát: **datum (ISO)** · stručný důvod · soubory · chování / ověřen
|
||||
|
||||
## 2026-05-28 — Dokumentace strategie sell<0 + termika + bazén
|
||||
|
||||
**Soubor:** [`docs/04-modules/planning-neg-sell-strategy.md`](04-modules/planning-neg-sell-strategy.md) — cíle, slovník, časová osa dne, v32–v34 vs návrh v35+, TČ/TUV podle typu dne, bazén, UI curtail/reg 340, roadmap, SQL ověření. Otevřená rozhodnutí: [`docs/06-open-questions.md`](06-open-questions.md).
|
||||
**Soubor:** [`docs/04-modules/planning-neg-sell-strategy.md`](04-modules/planning-neg-sell-strategy.md) — cíle, slovník, časová osa dne, v32–v35, návrh v36+, TČ/TUV podle typu dne, bazén, UI curtail/reg 340, roadmap, SQL ověření.
|
||||
|
||||
**Rozhodnutí home-01** (souhrn v [`docs/06-open-questions.md`](06-open-questions.md)): rampa/**T** odvozené z PV B (bez fixních 80 % v LP); TČ ne v pre-neg exportu; bazén min 4 h/den + Shelly; spirála Loxone; **workshop UI flex zátěží před v37** (§ 9.1 strategie).
|
||||
|
||||
## 2026-05-28 — Rampa SoC z PV B, bod T (v35)
|
||||
|
||||
**Kód:** `backend/services/planning_engine.py` — tag `2026-05-28-neg-sell-b-ramp-v35`.
|
||||
|
||||
**Změna:** `_neg_sell_day_phases` počítá `soc_need[t]` zpětnou projekcí jen z PV B; prep cíle = rampa (ne fixních 80 %). **t_detach**, **E_surplus_after_t** v `solver_params.inputs`. Prep hold na `soc_target[t]` z rampy; po T měkké `NEG_SELL_POST_DETACH_BCPV_DISCOURAGE`. Cushion v33: cíl z rampy, usable jen z B.
|
||||
|
||||
**Ověření:** `pytest tests/test_planning_dispatch_milp.py -k "NegSell or PreNeg or LoadFirst"`; MCP `solver_params.inputs.neg_sell_day_meta`.
|
||||
|
||||
## 2026-05-28 — Tvrdý load-first v LP (v34)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user