feat(ev): geofence arrival trigger (default-off)
ev_vehicle_obs.trigger += 'geofence_arrival' (V109); presence cesta zapíše příjezd i bez píchnutí (za flagem EV_GEOFENCE_ARRIVAL_OBS_ENABLED, default OFF); fn_ev_build_trips páruje. Constraint name ověřen živě. Worktree agent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
26
db/migration/V109__ev_obs_geofence_trigger.sql
Normal file
26
db/migration/V109__ev_obs_geofence_trigger.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- Geofence arrival trigger pro EV pozorování.
|
||||
--
|
||||
-- Dosud arrival obs (ems.ev_vehicle_obs) vznikalo JEN z wallboxu (plug-in přes
|
||||
-- fn_ev_session_transition). Když uživatel nepíchne, jízda se nezaznamenala a
|
||||
-- spotřební forecast (ev_trip → ev_usage_stats) o ní nevěděl.
|
||||
--
|
||||
-- Telemetry_collector už dnes z Tesla polohy (geofence, scope location, BEZ
|
||||
-- buzení auta) detekuje přechod pryč→domů do ems.ev_presence_obs. Tato migrace
|
||||
-- rozšiřuje povolené hodnoty ev_vehicle_obs.trigger o 'geofence_arrival', aby
|
||||
-- presence cesta mohla zapsat příjezd i bez píchnutí do wallboxu.
|
||||
--
|
||||
-- Zpětná kompatibilita: stávající hodnoty 'arrival' / 'departure' / 'manual'
|
||||
-- zůstávají platné; přidává se jen nová hodnota. Žádná data se nemění.
|
||||
-- Párování jízd (fn_ev_build_trips) bere 'geofence_arrival' jako platný arrival
|
||||
-- (R__096); wallbox 'arrival' zůstává autoritativní, geofence je doplněk pro
|
||||
-- případy, kdy auto stojí doma nepíchnuté.
|
||||
|
||||
alter table ems.ev_vehicle_obs
|
||||
drop constraint if exists ev_vehicle_obs_trigger_check;
|
||||
|
||||
alter table ems.ev_vehicle_obs
|
||||
add constraint ev_vehicle_obs_trigger_check
|
||||
check (trigger in ('arrival', 'departure', 'manual', 'geofence_arrival'));
|
||||
|
||||
comment on column ems.ev_vehicle_obs.trigger is
|
||||
'Zdroj pozorování: arrival/departure z wallboxu (plug-in/out, autoritativní), manual ruční, geofence_arrival z Tesla polohy (přijel domů, nepíchnutý — auto vzhůru, čtení nebudí). geofence_arrival se páruje jako příjezd v fn_ev_build_trips.';
|
||||
@@ -44,7 +44,7 @@ begin
|
||||
select a.* into v_arr
|
||||
from ems.ev_vehicle_obs a
|
||||
where a.vehicle_id = r.vehicle_id
|
||||
and a.trigger = 'arrival'
|
||||
and a.trigger in ('arrival', 'geofence_arrival')
|
||||
and a.observed_at > r.observed_at
|
||||
and a.odometer_km is not null
|
||||
order by a.observed_at
|
||||
@@ -79,6 +79,9 @@ begin
|
||||
end;
|
||||
$fn$;
|
||||
|
||||
comment on function ems.fn_ev_build_trips is
|
||||
'Spáruje každý nespárovaný odjezd (trigger=departure) s nejbližším následujícím příjezdem téhož vozidla. Příjezd = trigger ''arrival'' (wallbox plug-in, autoritativní) NEBO ''geofence_arrival'' (Tesla poloha, auto přijelo domů nepíchnuté). km z odometru, kWh z ΔSoC.';
|
||||
|
||||
-- Přepočet týdenního rytmu z jízd za lookback okno (plný přepočet, ne EMA —
|
||||
-- rebuild-friendly; jízdy s nabíjením cestou se počítají do km, ne do kWh).
|
||||
create or replace function ems.fn_update_ev_usage_stats(
|
||||
|
||||
Reference in New Issue
Block a user