La borne annonce "charge" apres deux minutes, on ne la croit plus

Le 07/09 a 14:28:18 la borne a declare le statut 3 apres 2 min 42 s de charge
et 0,10 kWh livre. Le controleur l'a cru, a latche day_vehicle_full_idle, et la
JEEP est restee immobile deux heures en plein soleil alors qu'elle pouvait
charger : elle a repris a 16:30 et tenu.

La premiere idee etait de distinguer une vraie fin de charge d'une interruption
par la forme de la coupure. La mesure a la seconde l'a tuee : les deux courbes
sont superposables (VW 06/09, vraie fin : 1534 -> 550 -> 82 -> 11 -> 0 W ;
JEEP 07/09, faux positif : 1626 -> 741 -> 100 -> 13 -> 0 W). Aucun signal
electrique instantane ne separe les deux cas.

Seule la duree de session les distingue, et le systeme porte deja la grandeur
qui dit ce qu'est une charge etablie : min_run_minutes, 29 min en production.
Trois formes de "charged", une seule est refusee :

  energie de session nulle       -> vehicule plein a l'arrivee, on latche (P10)
  energie > 0, session < min_run -> charge INTERROMPUE, on ne latche pas
  energie > 0, session >= min_run -> charge menee a terme, on latche

Aucune constante nouvelle. Pas d'oscillateur : une session interrompue
redemarre a energie nulle, donc un second "charged" immediat retombe dans le
premier cas et latche.

Confirmation independante le meme jour : Uconnect a envoye a 14:29 un courriel
"RECHARGE ELECTRIQUE INTERROMPUE" invitant a controler la borne et le
connecteur. Le vehicule qualifie donc l'evenement d'interruption. Le releve de
la boite montre que c'est chronique depuis au moins decembre 2025 (12
interruptions et 6 echecs entre le 31/12 et le 08/03) : nos automates n'ont pas
cree le defaut, ils en ont augmente le cout.

Golden 80 -> 84, dont le releve reel et ses deux contrefactuels (duree et
energie). Trois mutations tombent chacune sur un jeu different ; celle qui rend
le cas "energie nulle" non credible fait echouer trois scenarios existants
(P10, Fix D, Fix E).

Corrige au passage le HANDOFF du 06/09 : last_session_energy ne decrit pas la
derniere session terminee, il suit la session en cours (verifie dans InfluxDB).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-07 17:19:33 +02:00
parent 3fe84e09d4
commit 1c1b22311a
6 changed files with 639 additions and 20 deletions

View File

@@ -317,6 +317,139 @@ export const scenarios = [
// Incident 09/08 09:49 : VW pleine, le surplus solaire retentait une charge
// toutes les ~15 min (statut "Charged", 0 W) → usure relais. Désormais
// collant jusqu'au débranchement, avec héritage des états done de la nuit.
// ===== Fix H (07/09/2026) : credibilite du statut "charged" =====
// Releve reel : la borne a annonce "charged" a 14:28:18 apres 2 min 42 s de
// charge et 0,10 kWh livre, ce qui a bloque le vehicule deux heures. Les deux
// coupures (vraie fin de charge et interruption) sont ELECTRIQUEMENT
// identiques, mesurees a la seconde : seule la duree de session les separe.
{
id: 'charged-interrompu-ne-latche-pas',
label: 'Statut 3 apres 2 min 42 s et 0,10 kWh livre (releve 07/09) -> interruption, PAS de collant',
time: AFTERNOON,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '96', pv_power_w: '2600', pv_power_10m_avg_w: '2500',
pv_trend_w: '0', battery_current_a: '2',
house_ac_power_w: '2100', vebus_ac_out_l1_power_w: '2100',
evcs_charging_switch: 'on',
charge_permission_now: 'on',
control_latch: 'on',
evcs_current_a: '0',
evcs_ac_power_w: '0',
evcs_status_raw: '3',
evcs_charging_time: '2m 42s',
evcs_session_energy_kwh: '0.1',
prev_surplus_state: 'charging_hold',
},
expect: {
profile: 'outside_window',
sourceMode: 'solar_only',
state: 'charging_step_up_battery',
decision: 'step_up',
desiredCharging: true,
currentA: 7,
takeoverNeeded: false,
edfOnAction: false,
takeoverHelperService: 'turn_off',
},
},
{
id: 'charged-session-etablie-latche',
label: 'CONTREFACTUEL : meme statut 3 apres 1 h 32 et 4,30 kWh (releve VW 06/09) -> vraie fin, collant',
time: AFTERNOON,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '96', pv_power_w: '2600', pv_power_10m_avg_w: '2500',
pv_trend_w: '0', battery_current_a: '2',
house_ac_power_w: '2100', vebus_ac_out_l1_power_w: '2100',
evcs_charging_switch: 'on',
charge_permission_now: 'on',
control_latch: 'on',
evcs_current_a: '0',
evcs_ac_power_w: '0',
evcs_status_raw: '3',
evcs_charging_time: '1h 32m 0s',
evcs_session_energy_kwh: '4.3',
prev_surplus_state: 'charging_hold',
},
expect: {
profile: 'outside_window',
sourceMode: 'blocked',
state: 'day_vehicle_full_idle',
decision: 'stop_vehicle_full_or_paused',
desiredCharging: false,
currentA: 6,
takeoverNeeded: false,
edfOnAction: false,
takeoverHelperService: 'turn_off',
},
},
{
id: 'charged-energie-nulle-latche',
label: 'CONTREFACTUEL : statut 3 avec ZERO kWh livre (vehicule plein a l arrivee, cas P10) -> collant',
time: AFTERNOON,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
soc_percent: '96', pv_power_w: '2600', pv_power_10m_avg_w: '2500',
pv_trend_w: '0', battery_current_a: '2',
house_ac_power_w: '2100', vebus_ac_out_l1_power_w: '2100',
evcs_charging_switch: 'on',
charge_permission_now: 'on',
control_latch: 'on',
evcs_current_a: '0',
evcs_ac_power_w: '0',
evcs_status_raw: '3',
evcs_charging_time: '3m 20s',
evcs_session_energy_kwh: '0',
prev_surplus_state: 'charging_hold',
},
expect: {
profile: 'outside_window',
sourceMode: 'blocked',
state: 'day_vehicle_full_idle',
decision: 'stop_vehicle_full_or_paused',
desiredCharging: false,
currentA: 6,
takeoverNeeded: false,
edfOnAction: false,
takeoverHelperService: 'turn_off',
},
},
{
id: 'night-charged-interrompu-ne-latche-pas',
label: 'Nuit HC : statut 3 apres 3 min et 0,10 kWh -> interruption, la charge HC continue',
time: NIGHT,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
night_session_active: 'on',
allow_grid_hc_night: 'on',
soc_percent: '55', pv_power_w: '0', pv_power_10m_avg_w: '0',
pv_trend_w: '0', battery_current_a: '0',
house_ac_power_w: '800', vebus_ac_out_l1_power_w: '800',
evcs_charging_switch: 'on',
charge_permission_now: 'on',
control_latch: 'on',
grid_switch: 'on',
acin1_available: '1',
evcs_current_a: '0',
evcs_ac_power_w: '0',
evcs_status_raw: '3',
evcs_charging_time: '3m 0s',
evcs_session_energy_kwh: '0.1',
prev_surplus_state: 'charging_step_up_grid_hc',
},
expect: {
profile: 'night_hc',
sourceMode: 'grid_hc_allowed',
state: 'night_wait_grid_takeover_runtime',
decision: 'hold',
desiredCharging: false,
currentA: 6,
takeoverNeeded: true,
edfOnAction: true,
takeoverHelperService: 'turn_on',
},
},
{
id: 'day-vw-pleine-statut3',
label: 'Matin PV fort, session armée 0 W, statut 3 → day_vehicle_full_idle collant (stop propre, plus de solaire)',