HOTFIX: planovac oslepl k autu po prejmenovani wallboxu (hardcoded kody)

fn_planning_site_context (R__039) a fn_load_planning_slots_full (R__063) mely
natvrdo 'ev-charger-1/2' a 'deye-main'. Uzivatel prejmenoval wallboxy na
'vt-ev-charger-1/2' -> ctx.vehicles=[], ev_sessions=[null,null], ev1/ev2_connected
vzdy false -> planovac nevidel auto -> ZADNE nabijeni ani v zapornych cenach
(Tesla 70%, potrebuje 90% do Po 7:00, okno -0.32 Kc ve 13:45 nevyuzite).

Fix: vyber wallboxu DYNAMICKY podle site_id, ev1=nejnizsi ch.id, ev2=druhy
(stabilni, odolne prejmenovani). Inverter pro gen_cutoff pres controllable=true
misto code='deye-main'. Konzistentni R__039 (vehicles order by id, sessions
dynamicke kody) + R__063 (ev1/ev2 connected). Pure SQL, 363 testu zelenych.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dusan Vojacek
2026-06-14 11:26:41 +02:00
parent 74e156514a
commit 1060bad57b
2 changed files with 19 additions and 8 deletions

View File

@@ -126,7 +126,8 @@ begin
select ai.deye_gen_microinverter_cutoff_enabled select ai.deye_gen_microinverter_cutoff_enabled
from ems.asset_inverter ai from ems.asset_inverter ai
where ai.site_id = p_site_id where ai.site_id = p_site_id
and ai.code = 'deye-main' and ai.controllable = true
order by ai.id
limit 1 limit 1
), ),
false false
@@ -169,22 +170,30 @@ begin
'battery_capacity_kwh', v.battery_capacity_kwh, 'battery_capacity_kwh', v.battery_capacity_kwh,
'default_target_soc_pct', v.default_target_soc_pct 'default_target_soc_pct', v.default_target_soc_pct
) )
order by ch.code order by ch.id
), ),
'[]'::jsonb '[]'::jsonb
) )
into v_veh into v_veh
from ems.asset_vehicle v from ems.asset_vehicle v
join ems.asset_ev_charger ch on ch.id = v.default_charger_id join ems.asset_ev_charger ch on ch.id = v.default_charger_id
where v.site_id = p_site_id where v.site_id = p_site_id;
and ch.code in ('ev-charger-1', 'ev-charger-2');
-- EV session per wallbox — logika v ems.fn_ev_session_planning_json -- EV session per wallbox — logika v ems.fn_ev_session_planning_json
-- (R__038): session se NEvyřazuje při needed_wh=0 (auto nad targetem), -- (R__038): session se NEvyřazuje při needed_wh=0 (auto nad targetem),
-- zůstává v plánu kvůli oportunistickému headroomu i jako známá zátěž. -- zůstává v plánu kvůli oportunistickému headroomu i jako známá zátěž.
-- Wallboxy se vybírají DYNAMICKY podle site (řazeno ch.id = stabilní pořadí
-- ev1/ev2), NE podle natvrdo kódu — uživatel může wallbox přejmenovat
-- (2026-06-14: rename 'ev-charger-1' → 'vt-ev-charger-1' oslepil plánovač).
v_ev := jsonb_build_array( v_ev := jsonb_build_array(
ems.fn_ev_session_planning_json(p_site_id, 'ev-charger-1'), ems.fn_ev_session_planning_json(
ems.fn_ev_session_planning_json(p_site_id, 'ev-charger-2') p_site_id,
(select code from ems.asset_ev_charger where site_id = p_site_id order by id limit 1)
),
ems.fn_ev_session_planning_json(
p_site_id,
(select code from ems.asset_ev_charger where site_id = p_site_id order by id offset 1 limit 1)
)
); );
select ti.battery_soc_percent select ti.battery_soc_percent

View File

@@ -209,7 +209,8 @@ begin
select t.status select t.status
from ems.telemetry_ev_charger t from ems.telemetry_ev_charger t
join ems.asset_ev_charger ch on ch.id = t.charger_id join ems.asset_ev_charger ch on ch.id = t.charger_id
where t.site_id = p_site_id and ch.code = 'ev-charger-1' where t.site_id = p_site_id
and ch.id = (select id from ems.asset_ev_charger where site_id = p_site_id order by id limit 1)
order by t.measured_at desc order by t.measured_at desc
limit 1 limit 1
) ev1 on true ) ev1 on true
@@ -217,7 +218,8 @@ begin
select t.status select t.status
from ems.telemetry_ev_charger t from ems.telemetry_ev_charger t
join ems.asset_ev_charger ch on ch.id = t.charger_id join ems.asset_ev_charger ch on ch.id = t.charger_id
where t.site_id = p_site_id and ch.code = 'ev-charger-2' where t.site_id = p_site_id
and ch.id = (select id from ems.asset_ev_charger where site_id = p_site_id order by id offset 1 limit 1)
order by t.measured_at desc order by t.measured_at desc
limit 1 limit 1
) ev2 on true; ) ev2 on true;