fxi ba81 maximum price sell
Some checks failed
CI and deploy / migration-check (push) Failing after 11s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-04-29 15:45:23 +02:00
parent efc6e54f0e
commit 03ebc6246d
2 changed files with 3 additions and 20 deletions

View File

@@ -309,6 +309,7 @@ begin
v_discharge_target_wh := v_exportable * v_discharge_buf; v_discharge_target_wh := v_exportable * v_discharge_buf;
-- Rozpočet na půl dne (Europe/Prague): 00:0012:00 vs 12:0024:00; chybějící segment dostane celý budget. -- Rozpočet na půl dne (Europe/Prague): 00:0012:00 vs 12:0024:00; chybějící segment dostane celý budget.
-- Nabíjecí rozpočet dál dělíme 50/50 (kvůli rozprostření v rámci dne), ale exportní vybíjení volíme globálně podle sell_price.
select select
coalesce( coalesce(
count(*) filter ( count(*) filter (
@@ -328,18 +329,12 @@ begin
if v_n_am <= 0 then if v_n_am <= 0 then
v_chg_am_wh := 0; v_chg_am_wh := 0;
v_chg_pm_wh := v_grid_target_wh; v_chg_pm_wh := v_grid_target_wh;
v_dis_am_wh := 0;
v_dis_pm_wh := v_discharge_target_wh;
elsif v_n_pm <= 0 then elsif v_n_pm <= 0 then
v_chg_am_wh := v_grid_target_wh; v_chg_am_wh := v_grid_target_wh;
v_chg_pm_wh := 0; v_chg_pm_wh := 0;
v_dis_am_wh := v_discharge_target_wh;
v_dis_pm_wh := 0;
else else
v_chg_am_wh := v_grid_target_wh / 2.0; v_chg_am_wh := v_grid_target_wh / 2.0;
v_chg_pm_wh := v_grid_target_wh - v_chg_am_wh; v_chg_pm_wh := v_grid_target_wh - v_chg_am_wh;
v_dis_am_wh := v_discharge_target_wh / 2.0;
v_dis_pm_wh := v_discharge_target_wh - v_dis_am_wh;
end if; end if;
-- charge mask (sloupce temp tabulky kvalifikujeme: RETURNS TABLE dělá PL proměnné stejných jmen) -- charge mask (sloupce temp tabulky kvalifikujeme: RETURNS TABLE dělá PL proměnné stejných jmen)
@@ -390,22 +385,9 @@ begin
for r_slot in for r_slot in
select wk.slot_ord select wk.slot_ord
from _ems_plan_slot_wk wk from _ems_plan_slot_wk wk
where extract(hour from wk.interval_start at time zone 'Europe/Prague') < 12
order by wk.sell_price desc, wk.slot_ord desc order by wk.sell_price desc, wk.slot_ord desc
loop loop
exit when v_cum >= v_dis_am_wh; exit when v_cum >= v_discharge_target_wh;
exit when v_per_slot_discharge_wh <= 0;
update _ems_plan_slot_wk wk set allow_discharge_export = true where wk.slot_ord = r_slot.slot_ord;
v_cum := v_cum + v_per_slot_discharge_wh;
end loop;
v_cum := 0;
for r_slot in
select wk.slot_ord
from _ems_plan_slot_wk wk
where extract(hour from wk.interval_start at time zone 'Europe/Prague') >= 12
order by wk.sell_price desc, wk.slot_ord desc
loop
exit when v_cum >= v_dis_pm_wh;
exit when v_per_slot_discharge_wh <= 0; exit when v_per_slot_discharge_wh <= 0;
update _ems_plan_slot_wk wk set allow_discharge_export = true where wk.slot_ord = r_slot.slot_ord; update _ems_plan_slot_wk wk set allow_discharge_export = true where wk.slot_ord = r_slot.slot_ord;
v_cum := v_cum + v_per_slot_discharge_wh; v_cum := v_cum + v_per_slot_discharge_wh;

View File

@@ -24,6 +24,7 @@
- měkký cíl na konci 24h přes `_soc_security_profile` + tvrdé dvouúrovňové pravidlo výše. - měkký cíl na konci 24h přes `_soc_security_profile` + tvrdé dvouúrovňové pravidlo výše.
- **Dynamická ekonomická podlaha (fáze 2):** - **Dynamická ekonomická podlaha (fáze 2):**
- `_dynamic_arb_floor_wh_series`: podle součtu FVE výkonu v dalších ~8 h (`ARB_LOOKAHEAD_SLOTS`) se `arb_floor_wh[t]` posouvá mezi `min_soc_wh` a rezervou z DB silné očekávané slunce ji sníží (ráno / po obloze); vynutit konstantní chování lze `battery.disable_dynamic_arb_floor=True` jen pro testy / ladění. - `_dynamic_arb_floor_wh_series`: podle součtu FVE výkonu v dalších ~8 h (`ARB_LOOKAHEAD_SLOTS`) se `arb_floor_wh[t]` posouvá mezi `min_soc_wh` a rezervou z DB silné očekávané slunce ji sníží (ráno / po obloze); vynutit konstantní chování lze `battery.disable_dynamic_arb_floor=True` jen pro testy / ladění.
- **Výběr exportních slotů (`allow_discharge_export`):** `ems.fn_load_planning_slots_full` omezuje, ve kterých slotech smí solver vybíjet baterii „nad rámec spotřeby“ pro export do sítě (anti-mikrocyklování). Aktuálně se sloty pro exportní vybíjení vybírají **globálně** podle `sell_price desc` přes celé okno (ne 50/50 AM/PM), aby solver neodkládal vybíjení do levnějších ranních slotů, pokud jsou dražší sloty už večer.
- **Záporná nákupní cena:** - **Záporná nákupní cena:**
- horní mez `grid_import` zahrnuje `load_baseline_w` + nabíjení/EV/TČ (bez nekonečného importu). - horní mez `grid_import` zahrnuje `load_baseline_w` + nabíjení/EV/TČ (bez nekonečného importu).
- **Uložené vstupy plánu** (`planning_interval`): `load_baseline_w`, `pv_*_forecast_raw_w`, `pv_*_forecast_solver_w` pro UI a audit. - **Uložené vstupy plánu** (`planning_interval`): `load_baseline_w`, `pv_*_forecast_raw_w`, `pv_*_forecast_solver_w` pro UI a audit.