From 03b739667630b64c04a106b5a93990b10d4c07fd Mon Sep 17 00:00:00 2001 From: Dusan Vojacek Date: Sat, 13 Jun 2026 01:00:13 +0200 Subject: [PATCH] =?UTF-8?q?Tesla=20charge=5Flimit=5Fsoc=20=3D=20strop,=20n?= =?UTF-8?q?e=20c=C3=ADl=20session?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch po příjezdu přepisoval target_soc_pct limitem auta (LFP 100 %) a zahazoval kaskádu fn_ev_session_defaults (default vozidla 30 %) — auto by se v noci tlačilo do plna ze sítě proti vůli majitele (session #2 dnes). Nově se target snižuje jen pokud je limit auta POD ním; fn_tesla_arrival_context vrací i target_soc_pct session. Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/services/telemetry_collector.py | 9 +++++++-- db/routines/R__095_fn_tesla.sql | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/backend/services/telemetry_collector.py b/backend/services/telemetry_collector.py index 12e638d..279f4d9 100644 --- a/backend/services/telemetry_collector.py +++ b/backend/services/telemetry_collector.py @@ -216,8 +216,13 @@ async def _patch_session_from_tesla( ) patch: dict = {"soc_at_connect_pct": state["battery_level"]} - if state.get("charge_limit_soc"): - patch["target_soc_pct"] = state["charge_limit_soc"] + # Tesla charge_limit_soc je STROP (nad něj auto nenabije), NE cíl — + # cíl drží kaskáda fn_ev_session_defaults (weekly/forecast/default + # vozidla, např. 30 %). Snižovat target jen když limit auta je POD ním. + limit = state.get("charge_limit_soc") + current_target = ctx.get("target_soc_pct") + if limit and current_target is not None and float(current_target) > float(limit): + patch["target_soc_pct"] = limit import json as _json await fetch_json( conn, diff --git a/db/routines/R__095_fn_tesla.sql b/db/routines/R__095_fn_tesla.sql index 13d4887..220cd7c 100644 --- a/db/routines/R__095_fn_tesla.sql +++ b/db/routines/R__095_fn_tesla.sql @@ -49,13 +49,14 @@ as $fn$ 'vin', v.vin, 'battery_capacity_kwh', v.battery_capacity_kwh, 'session_id', s.id, - 'soc_at_connect_pct', s.soc_at_connect_pct + 'soc_at_connect_pct', s.soc_at_connect_pct, + 'target_soc_pct', s.target_soc_pct ), '{}'::jsonb) from ems.asset_ev_charger c join ems.asset_vehicle v on v.site_id = c.site_id and v.default_charger_id = c.id and v.active left join lateral ( - select es.id, es.soc_at_connect_pct + select es.id, es.soc_at_connect_pct, es.target_soc_pct from ems.ev_session es where es.charger_id = c.id and es.session_end is null order by es.id desc