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:
@@ -38,6 +38,7 @@
|
||||
"evcs_current_a": states("sensor.victron_evcs_current"),
|
||||
"evcs_ac_power_w": states("sensor.victron_evcs_ac_power"),
|
||||
"evcs_charging_time": states("sensor.victron_evcs_charging_time"),
|
||||
"evcs_session_energy_kwh": states("sensor.evcs_hq2239dnt7p_last_session_energy"),
|
||||
"evcs_charging_switch": states("switch.victron_evcs_charging"),
|
||||
"evcs_auto_start_switch": states("switch.victron_evcs_auto_start"),
|
||||
|
||||
|
||||
@@ -328,6 +328,11 @@ const parsed = {
|
||||
|
||||
evcsAcPowerW: Math.max(0, num(input.evcs_ac_power_w, 0)),
|
||||
evcsChargingTimeSec: parseChargingTimeToSec(input.evcs_charging_time),
|
||||
// Energie deja livree par la session EN COURS (kWh). Le capteur de la borne
|
||||
// s'appelle "last_session_energy" mais il suit la session courante et repart
|
||||
// de zero a chaque nouvelle connexion (verifie le 07/09/2026 : 0 -> 0,1 -> 0,2
|
||||
// ... pendant la charge). Sert a juger la credibilite d'un statut "charged".
|
||||
evcsSessionEnergyKwh: Math.max(0, num(input.evcs_session_energy_kwh, 0)),
|
||||
evcsChargingSwitchOn: low(input.evcs_charging_switch || 'off') === 'on',
|
||||
evcsAutoStartSwitchOn: low(input.evcs_auto_start_switch || 'off') === 'on',
|
||||
|
||||
|
||||
@@ -430,10 +430,36 @@ const sessionFresh =
|
||||
// collant écrit par DECISION pendant la session (voir Fix E DECISION).
|
||||
// P11 : sur une session neuve, on ignore aussi un éventuel statut 3 résiduel
|
||||
// (le temps que la borne renégocie avec le nouveau véhicule).
|
||||
// Fix H (07/09/2026) : un statut "charged" n'est pas cru sur parole.
|
||||
// La borne l'a annonce le 07/09 a 14:28:18 apres 2 min 42 s de charge et
|
||||
// 0,10 kWh livre, ce qui a latche `day_vehicle_full_idle` pour deux heures
|
||||
// alors que le vehicule pouvait charger (il a repris a 16:30 et tenu).
|
||||
//
|
||||
// Aucun signal ELECTRIQUE instantane ne separe une vraie fin de charge d'une
|
||||
// interruption : mesure a la seconde des deux coupures, elles sont
|
||||
// superposables (VW 06/09, vraie fin : 1534 -> 550 -> 82 -> 11 -> 0 W ;
|
||||
// JEEP 07/09, faux positif : 1626 -> 741 -> 100 -> 13 -> 0 W). Seule la
|
||||
// DUREE de la 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).
|
||||
//
|
||||
// Deux formes de "charged" sont credibles, et une seule ne l'est pas :
|
||||
// energie de session nulle -> le vehicule etait plein en arrivant (P10)
|
||||
// session >= min_run_minutes -> charge menee a son terme
|
||||
// entre les deux -> charge INTERROMPUE : on ne latche pas
|
||||
// Convergence : une session interrompue redemarre a energie nulle, donc un
|
||||
// second "charged" immediat retombe dans le premier cas et latche.
|
||||
const chargedSessionEnergyKwh = Math.max(0, parsed.evcsSessionEnergyKwh || 0);
|
||||
const chargedSessionEstablished =
|
||||
Number.isFinite(parsed.evcsChargingTimeSec) &&
|
||||
parsed.evcsChargingTimeSec >= params.minRunMinutes * 60;
|
||||
const chargedCredible =
|
||||
chargedSessionEnergyKwh <= 0 || chargedSessionEstablished;
|
||||
|
||||
const evcsStatusCharged =
|
||||
!sessionFresh &&
|
||||
Number.parseFloat(parsed.evcsStatusRaw) === 3 &&
|
||||
Math.max(0, parsed.evcsAcPowerW || 0) <= 300;
|
||||
Math.max(0, parsed.evcsAcPowerW || 0) <= 300 &&
|
||||
chargedCredible;
|
||||
|
||||
const vehicleChargeCompleted =
|
||||
nightSessionActive &&
|
||||
@@ -1043,6 +1069,9 @@ return [{
|
||||
|
||||
// P11
|
||||
sessionFresh,
|
||||
chargedSessionEnergyKwh,
|
||||
chargedSessionEstablished,
|
||||
chargedCredible,
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
Reference in New Issue
Block a user