HC de midi : consigne qui ne descend plus avec un manque batterie, voiture autorisee au-dessus de 35 % en session, tension de recharge 51,5 V

This commit is contained in:
Tallagrand Thierry
2026-10-09 14:12:23 +02:00
parent a3950d4cd9
commit 1bbb54ae6e
8 changed files with 127 additions and 6 deletions

View File

@@ -2256,5 +2256,26 @@ approximations successives ») ; cette nuit la VW a charge A FOND de 05:17 a 07:
- **A verifier au matin du 10/10** (revue) : SOC a 07:24 contre 50,4 % ; HC de midi (gain, courant ACM, partage - **A verifier au matin du 10/10** (revue) : SOC a 07:24 contre 50,4 % ; HC de midi (gain, courant ACM, partage
avec la JEEP) ; aucune fermeture EDF en HP le soir ; JEEP pleine pour 06:30 samedi. avec la JEEP) ; aucune fermeture EDF en HP le soir ; JEEP pleine pour 06:30 samedi.
### 09/10 midi — HC de midi du jour faible : TROIS freins, corriges entre 14:02 et 14:10
Releve 13:59 : session engagee (jour faible), EDF ferme, ACM 140 A, bilan 12,9 kWh a reprendre (cible 100 %), mais
batterie a 32 A et JEEP (branchee 13:01, 52 %) qui ne demarre pas. SOC 47 % a 12 h -> 57 % a 14 h.
1. **Consigne qui descendait** (HA_SERVICE_CALLS_OUTPUT) : un chargeur bride faisait descendre la consigne a la maison
(2 524 W) malgre le manque. Desormais, avec un manque batterie, descente seulement si la batterie est pres de sa
limite (>= 80 % du DVCC). Scenario `consigne-hc-midi-chargeur-bride-batterie-loin-de-sa-limite` (9 059 W ; 2 087
sans le correctif) ; le scenario du 18/09 garde sa descente avec batterie a 170 A sur 180.
2. **Voiture bloquee au-dessus de 35 %** (BATTERY_CLOUD_LOCKS, `gridAllowedBySoc`, garde V2.5) : hors nuit, le reseau
n'etait permis a la voiture que si SOC <= 35, force_grid_now ou urgence de depart. Ajout : HC de midi ET session
engagee. ⚠️ La regle « voiture a midi » du 28/09 n'a donc JAMAIS pu charger une voiture au-dessus de 35 % (cause
aussi du 06/10 ; le golden ne verifiait que la source). Scenario `hc-midi-session-engagee-voiture-demarre-soc-55`.
Golden 146/146, mutations qui mordent. Deploye 14:02 : JEEP en charge des 14:03.
3. **Tension de recharge 50,1 V** (ACM, `tools/patch-20261009-acm-tension-recharge.mjs`) : evcs_takeover_recover
gardait la tension de night_slow ; a SOC 58 le chargeur passait en limitation de tension (23 A pour 140 A
autorises, reseau plafonne a 3,2 kW). Tension = pv_mid (51,5 V) des qu'un courant est calcule. golden-acm 26/26
(+1 releve du 09/10). Deploye 14:06, effectif 14:10 : **batterie 121-127 A, reseau 8,7 kW, JEEP 2,9 kW**.
- Nuit du 08-09/10 conforme : session engagee a 03:36 (SOC passe sous 50,4 %), SOC tenu a 51-52 %, ~51 % a 07:24.
Jour faible decide a 07:25 (52,7 % prevus a 17 h pour 71,2 %). Revue du 09/10 : rien a signaler.
- ⚠️ JEEP part samedi 06:30 : mode de nuit « complete » conseille ce soir (aucune regle ne charge une voiture a
depart connu en « sans EDF » si EDF ne se ferme pas pour la batterie — cas du planificateur).
--- ---
*Document mis a jour le : 09/10/2026 (~01:50) — conseiller relecteur de la journee (revue calculee + pistes) ; nuit : voiture qui profite d'EDF ferme pour la batterie, nuit qui prepare le soir les jours annonces faibles ; 08/10/2026 (~00:15) — jour faible : charge maximale en HC de midi (bilan 100 %, ACM plafond + solaire) ; 07/10/2026 (~22:45) — reprise de 16 h verifiee, EDF en HP a 18:03, bilan : reprise du soir et prevision recalee sur la matinee ; bilan HC de midi, reprise du soir apres coupure en pleine chauffe, mesure ECS sur 10 min ; recharge reseau HC : courant calcule (12 kVA) et consigne non tenue ; HC de midi : AUTO ne chauffe pas (BOOST), alerte v2, Jeep (contact, relecture, zone), recharge batterie bridee a 30 A par l'ACM ; jour faible = EDF les deux fenetres HC pour le chauffe-eau, alerte BOOST, Victron Mobile refait ; 1re decision jour faible en reel, mesure ECS reparee, douches 06:00/20:00, Grafana chauffe-eau, tableaux ECS ; chauffe-eau en HC de nuit les jours faibles (decision du bilan, workflow ECS sous controle du depot, VRM, V2.3 desactive) ; garde batterie reseau : voiture bridee a 6 A au lieu d'un arret ; garde-fou concierge 2 h ; allers-retours brefs de la borne retrouves dans l'historique HA (echange VW -> JEEP de 20 s), production 14,5 kWh contre 22 prevus, defaut garde batterie en mode reseau a trancher ; voiture a midi : la batterie n'est plus comptee comme du solaire (EDF automatique les jours de depart si le surplus ne couvre pas) ; nuit 05->06 : JEEP chargee sur EDF en complete (6,32 kWh), budget 0 du a la prevision, Windy/ECMWF contre VRM, a comparer ce soir ; concierge aligne sur la preuve fin de trajet ; a verifier : nuit 05->06 et mardi faible, comparaison VRM/Forecast.Solar ; JEEP identifiee aussi par sa fin de trajet, prevision de la nuit 05->06 ; identification JEEP reussie en reel, correction humaine qui prime (refus supprime), session du 04/10 coupee ; EVCS Master en quatre onglets ; Jeep lue par Uconnect et identifiee seule, capacite JEEP 10 kWh, concierge variante (a) ; releve par photo (SPARK), hass-uconnect en attente ; ecart semaine/week-end mesure (pas de profil week-end la nuit) ; nuit du budget : budget borne au plancher prudent, sans EDF = voiture bloquee meme EDF ferme (batterie seule) ; Energie : sauts corriges ; tableau Energie complete (Sud/Ouest, batterie par integration, borne ; aucun redemarrage HA) ; kilometrage des vehicules (km/kWh, capacite, releves de reference, agent cable 15/15) ; a verifier le 04/10 au matin : nuit du budget JEEP ; concierge : vehicule non confirme demande, heure de saisie ; Grafana vehicules en tableau ; Grafana vehicules : ZERO et Invite ajoutes, session 16:46 reetiquetee ZERO ; prevision SOC 10 h ~35 % ; concierge fiable : niveau note par le script, une ligne, dedoublonnage, simulation par drapeau ; agent : message incompris = question, bourse sur demande explicite (banc final 6/6) ; a verifier : nuit du samedi 03 au dimanche 04/10 (budget < besoin JEEP), cron orange-cloture lundi 05/10 apres 17:40, comparaison VRM / Forecast.Solar lundi 05/10* *Document mis a jour le : 09/10/2026 (~14:15) — conseiller relecteur de la journee (revue calculee + pistes) ; nuit : voiture qui profite d'EDF ferme pour la batterie, nuit qui prepare le soir les jours annonces faibles ; 08/10/2026 (~00:15) — jour faible : charge maximale en HC de midi (bilan 100 %, ACM plafond + solaire) ; 07/10/2026 (~22:45) — reprise de 16 h verifiee, EDF en HP a 18:03, bilan : reprise du soir et prevision recalee sur la matinee ; bilan HC de midi, reprise du soir apres coupure en pleine chauffe, mesure ECS sur 10 min ; recharge reseau HC : courant calcule (12 kVA) et consigne non tenue ; HC de midi : AUTO ne chauffe pas (BOOST), alerte v2, Jeep (contact, relecture, zone), recharge batterie bridee a 30 A par l'ACM ; jour faible = EDF les deux fenetres HC pour le chauffe-eau, alerte BOOST, Victron Mobile refait ; 1re decision jour faible en reel, mesure ECS reparee, douches 06:00/20:00, Grafana chauffe-eau, tableaux ECS ; chauffe-eau en HC de nuit les jours faibles (decision du bilan, workflow ECS sous controle du depot, VRM, V2.3 desactive) ; garde batterie reseau : voiture bridee a 6 A au lieu d'un arret ; garde-fou concierge 2 h ; allers-retours brefs de la borne retrouves dans l'historique HA (echange VW -> JEEP de 20 s), production 14,5 kWh contre 22 prevus, defaut garde batterie en mode reseau a trancher ; voiture a midi : la batterie n'est plus comptee comme du solaire (EDF automatique les jours de depart si le surplus ne couvre pas) ; nuit 05->06 : JEEP chargee sur EDF en complete (6,32 kWh), budget 0 du a la prevision, Windy/ECMWF contre VRM, a comparer ce soir ; concierge aligne sur la preuve fin de trajet ; a verifier : nuit 05->06 et mardi faible, comparaison VRM/Forecast.Solar ; JEEP identifiee aussi par sa fin de trajet, prevision de la nuit 05->06 ; identification JEEP reussie en reel, correction humaine qui prime (refus supprime), session du 04/10 coupee ; EVCS Master en quatre onglets ; Jeep lue par Uconnect et identifiee seule, capacite JEEP 10 kWh, concierge variante (a) ; releve par photo (SPARK), hass-uconnect en attente ; ecart semaine/week-end mesure (pas de profil week-end la nuit) ; nuit du budget : budget borne au plancher prudent, sans EDF = voiture bloquee meme EDF ferme (batterie seule) ; Energie : sauts corriges ; tableau Energie complete (Sud/Ouest, batterie par integration, borne ; aucun redemarrage HA) ; kilometrage des vehicules (km/kWh, capacite, releves de reference, agent cable 15/15) ; a verifier le 04/10 au matin : nuit du budget JEEP ; concierge : vehicule non confirme demande, heure de saisie ; Grafana vehicules en tableau ; Grafana vehicules : ZERO et Invite ajoutes, session 16:46 reetiquetee ZERO ; prevision SOC 10 h ~35 % ; concierge fiable : niveau note par le script, une ligne, dedoublonnage, simulation par drapeau ; agent : message incompris = question, bourse sur demande explicite (banc final 6/6) ; a verifier : nuit du samedi 03 au dimanche 04/10 (budget < besoin JEEP), cron orange-cloture lundi 05/10 apres 17:40, comparaison VRM / Forecast.Solar lundi 05/10*

View File

@@ -808,10 +808,17 @@ const solarHoldOk =
// FIX V2.5: Garde SOC - pas de grid pour EVCS si SOC > 35% sauf force_grid_now // FIX V2.5: Garde SOC - pas de grid pour EVCS si SOC > 35% sauf force_grid_now
// P9 (09/08/2026) : la fenêtre départ imminent autorise aussi le réseau. // P9 (09/08/2026) : la fenêtre départ imminent autorise aussi le réseau.
// ⚠️ HC DE MIDI AVEC SESSION ENGAGEE (09/10/2026) : EDF est ferme de toute
// facon (jour faible, batterie, voiture avant depart). La garde « SOC <= 35 »
// empechait la voiture de demarrer : JEEP branchee a 13:01 le 09/10, SOC 55,
// « Conditions de demarrage non reunies » ; meme cause le 06/10 (SOC 57).
// La regle « voiture a midi » du 28/09 n'a donc jamais pu charger une voiture
// au-dessus de 35 %.
const gridAllowedBySoc = const gridAllowedBySoc =
strategy.forceGridRequested || strategy.forceGridRequested ||
context.profile === 'night_hc' || context.profile === 'night_hc' ||
departureUrgentActive || departureUrgentActive ||
(context.profile === 'midday_hc_or_solar' && nightGridSessionCommitted) ||
parsed.soc <= 35; parsed.soc <= 35;
const gridStartOk = const gridStartOk =

View File

@@ -590,8 +590,19 @@ const solarResourceRefused =
// Pendant la fenetre d'etablissement (§29) les mesures PV et batterie ne // Pendant la fenetre d'etablissement (§29) les mesures PV et batterie ne
// decrivent aucun regime permanent : on ne descend pas sur elles. // decrivent aucun regime permanent : on ne descend pas sur elles.
// ⚠️ MANQUE BATTERIE EN HC : NE DESCENDRE QUE SI LA BATTERIE EST SATUREE (09/10/2026).
// HC de midi du 09/10, jour faible, 12,9 kWh demandes, ACM a 140 A : un chargeur
// bride a fait descendre la consigne a 2 524 W (la maison) et la batterie n'a pris
// que 32 A. Un chargeur bride ne prouve une ressource refusee QUE si la batterie
// est pres de sa limite de charge (sinon elle prendrait le solaire) ; avec 7 kW de
// soleil et la batterie a sa limite, descendre laisse bien entrer le solaire
// (scenario du 18/09).
const batteryNearChargeLimit =
Number.isFinite(params.dvccChargeLimitA) && params.dvccChargeLimitA > 0 &&
parsed.batteryCurrentA >= 0.8 * params.dvccChargeLimitA;
const gridSetpointDescendOk = const gridSetpointDescendOk =
gridSessionActive && gridSessionActive &&
(!(batterySetpointShareW > 0) || batteryNearChargeLimit) &&
solarResourceRefused && solarResourceRefused &&
!batteryPolicy.batterySoftBreachNow && !batteryPolicy.batterySoftBreachNow &&
!derived.gridSettling && !derived.gridSettling &&

View File

@@ -59,8 +59,18 @@ export const scenarios = [
time: h(ETE, '02:30'), time: h(ETE, '02:30'),
overrides: { ...parcNeuf, soc_percent: '30', night_takeover: 'on', overrides: { ...parcNeuf, soc_percent: '30', night_takeover: 'on',
edf_switch: 'on', night_target_soc: '50' }, edf_switch: 'on', night_target_soc: '50' },
// 09/10 : tension de la charge solaire normale (51,5 V) des qu'un courant est calcule.
expect: { mode: 'evcs_takeover_recover', profil: 'night_slow', expect: { mode: 'evcs_takeover_recover', profil: 'night_slow',
courantA: 30, tensionV: 50.1 }, courantA: 30, tensionV: 51.5 },
},
{
id: 'acm-takeover-midi-soc-58-tension-pas-bridee',
label: 'RELEVE 09/10 14:05 : SOC 58, 12,9 kWh a reprendre, maison 2,3 kW : 140 A ET 51,5 V (a 50,1 V la batterie plafonnait a 23 A)',
time: h(ETE, '14:05'),
overrides: { ...parcNeuf, soc_percent: '58', night_takeover: 'on', edf_switch: 'on',
night_target_soc: '90', grid_energy_needed_kwh: '12.9', house_ac_power_w: '2300',
grid_subscription_va: '12000', battery_voltage_v: '51', pv_power_w: '500' },
expect: { mode: 'evcs_takeover_recover', courantA: 140, tensionV: 51.5 },
}, },
// COURANT CALCULE (07/10/2026) : energie a reprendre / temps restant, borne // COURANT CALCULE (07/10/2026) : energie a reprendre / temps restant, borne
// par l'abonnement 12 kVA moins la maison. Releve du 07/10 a midi : SOC 31, // par l'abonnement 12 kVA moins la maison. Releve du 07/10 a midi : SOC 31,

View File

@@ -2823,6 +2823,52 @@ export const scenarios = [
}, },
expect: { profile: 'midday_hc_or_solar', sourceMode: 'grid_hc_allowed', takeoverNeeded: true }, expect: { profile: 'midday_hc_or_solar', sourceMode: 'grid_hc_allowed', takeoverNeeded: true },
}, },
{
// RELEVE 09/10 13:59 : JEEP branchee 13:01 a 52 %, SOC 55-57, session de midi
// engagee (jour faible), EDF ferme : « Conditions de demarrage non reunies ».
// La garde gridAllowedBySoc (SOC <= 35 hors nuit) bloquait le demarrage. Le
// scenario precedent ne verifiait que la source, pas la charge.
id: 'hc-midi-session-engagee-voiture-demarre-soc-55',
label: 'RELEVE 09/10 13:59 — midi, session engagee, EDF ferme, SOC 55 : la JEEP DEMARRE sur le reseau',
time: MIDDAY,
overrides: {
evcs_vehicle_connected: 'on', evcs_device_connected: 'on',
grid_state: 'on', victron_acin1_available: '1',
night_grid_session_committed_prev: 'on',
soc_percent: '55', battery_current_a: '30',
pv_power_w: '1750', pv_power_10m_avg_w: '1700', pv_trend_w: '0',
house_ac_power_w: '1650', vebus_ac_out_l1_power_w: '1650',
evcs_ac_power_w: '0',
balance_required_soc: '100', balance_energy_to_cover_kwh: '0.33',
balance_grid_energy_needed_kwh: '12.9',
balance_status: 'ok', balance_last_run: '08/08 12:50',
balance_vehicle_grid_needed: 'off', balance_ecs_nuit: 'on',
},
expect: { profile: 'midday_hc_or_solar', sourceMode: 'grid_hc_allowed', desiredCharging: true },
},
{
id: 'consigne-hc-midi-chargeur-bride-batterie-loin-de-sa-limite',
label: 'RELEVE 09/10 13:59 — midi, manque 12,9 kWh, un chargeur bride, batterie a 32 A sur 140 : la consigne NE DESCEND PAS a la maison',
time: MIDDAY,
overrides: {
evcs_vehicle_connected: 'off', evcs_device_connected: 'on',
grid_state: 'on', victron_acin1_available: '1',
night_grid_session_committed_prev: 'on',
soc_percent: '57', battery_current_a: '32',
pv_power_w: '1750', pv_power_10m_avg_w: '1700', pv_trend_w: '0',
mppt_operation_modes: 'voltage_current_limited,mppt_active,mppt_active,mppt_active,mppt_active,mppt_active,mppt_active',
house_ac_power_w: '1650', vebus_ac_out_l1_power_w: '1650',
evcs_ac_power_w: '0',
grid_setpoint_w: '2524',
dvcc_max_charge_current_a: '140',
balance_required_soc: '100', balance_energy_to_cover_kwh: '0.33',
balance_grid_energy_needed_kwh: '12.9',
balance_status: 'ok', balance_last_run: '08/08 12:50',
balance_ecs_nuit: 'on',
},
// Maison 1 650 + 140 A x 52,9 V (tension de reference) = 9 059 W ; sans le correctif : 2 087 W (descente).
expect: { gridSetpointW: 9059 },
},
{ {
id: 'consigne-bilan-plancher-nuage-exclut-la-batterie', id: 'consigne-bilan-plancher-nuage-exclut-la-batterie',
label: 'CONSIGNE 18/09 — midi, soleil bride, manque batterie, PAS de voiture : le terme batterie ne doit PAS remonter le plancher nuage', label: 'CONSIGNE 18/09 — midi, soleil bride, manque batterie, PAS de voiture : le terme batterie ne doit PAS remonter le plancher nuage',
@@ -2842,7 +2888,9 @@ export const scenarios = [
victron_evcs_strategy: 'force_grid_now', victron_evcs_strategy: 'force_grid_now',
evcs_vehicle_connected: 'off', evcs_device_connected: 'on', evcs_vehicle_connected: 'off', evcs_device_connected: 'on',
grid_state: 'on', victron_acin1_available: '1', grid_state: 'on', victron_acin1_available: '1',
soc_percent: '35', battery_current_a: '20', // 09/10 : batterie a sa limite (170 A sur 180) -> la descente est legitime ;
// a 20 A elle ne l'est plus (scenario consigne-hc-midi-chargeur-bride-batterie-loin-de-sa-limite).
soc_percent: '35', battery_current_a: '170',
pv_power_w: '7000', pv_power_10m_avg_w: '6500', pv_trend_w: '0', pv_power_w: '7000', pv_power_10m_avg_w: '6500', pv_trend_w: '0',
mppt_operation_modes: 'voltage_current_limited,voltage_current_limited,mppt_active,mppt_active,mppt_active,mppt_active,mppt_active', mppt_operation_modes: 'voltage_current_limited,voltage_current_limited,mppt_active,mppt_active,mppt_active,mppt_active,mppt_active',
house_ac_power_w: '900', vebus_ac_out_l1_power_w: '900', house_ac_power_w: '900', vebus_ac_out_l1_power_w: '900',

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env node
// 09/10/2026 : la recharge reseau HC (evcs_takeover_recover) gardait la TENSION
// du profil night_slow, 50,1 V. A SOC 58 la batterie en charge depasse 50,1 V :
// le chargeur se met en limitation de tension et le courant tombe a ~23 A, quel
// que soit le courant autorise (140 A). Releve du 09/10 14:05 : DVCC 140 A,
// consigne 8 kW, reseau plafonne a 3,2 kW, batterie 23 A. Le 07/10 a 14:20 le
// meme chemin donnait 99 A parce que le SOC etait a 34 %.
// Quand un courant de recharge est calcule, la tension devient celle de la
// charge solaire normale (pv_mid, 51,5 V, sous les 53,2 V du BMS). Rejouable.
import fs from 'fs';
const F = 'workflows/victron-auto-charge-manager-v1.2.json';
const wf = JSON.parse(fs.readFileSync(F, 'utf8'));
const node = wf.nodes.find((n) => n.name === 'Compute Charge Targets');
let c = node.parameters.jsCode;
if (c.includes('TENSION DE RECHARGE (09/10/2026)')) { console.log('deja applique'); process.exit(0); }
const a = ` targetCurrentA = Math.round(Math.max(10, Math.min(plafondA, Math.ceil(besoinA / 5) * 5)) * 10) / 10;`;
if (c.split(a).length !== 2) throw new Error('motif introuvable');
c = c.replace(a, a + `
// TENSION DE RECHARGE (09/10/2026) : 50,1 V (night_slow) bride le courant des que
// la batterie depasse ~50 % ; on charge a la tension solaire normale.
targetVoltageV = cfg.profiles.pv_mid.voltage_v;`);
node.parameters.jsCode = c;
fs.writeFileSync(F, JSON.stringify(wf, null, 2) + '\n');
console.log('patch applique');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long