Files
EVCS/tools/patch-20260809-p9-departure-cut.mjs
Tallagrand Thierry 0419c741de P9: charge réseau avant départ (hors HC) + sélecteur véhicule VW/JEEP
- helpers: input_select.victron_evcs_vehicle, departure_time_jeep (06:30),
  toggle allow_grid_departure_urgent (OFF) — package victron_evcs_vehicles.yaml
- INPUT_PARSE: departureTimeMin par véhicule sélectionné
- WINDOWS: fenêtre départ ≤120min hors HC → grid_hc_allowed (solar_only prioritaire),
  état collant departure_done_idle à la fin de charge
- BCL: gridAllowedBySoc += departureUrgentActive
- DECISION: branche collante departure_done_idle au-dessus des gardes
- HA_SERVICE_CALLS: takeover helper tenu pendant P9 (ACM + hystérésis)
- hystérésis: cut immédiat étendu à departure_done_idle (patch rejouable)
- golden 29→33, HANDOFF §21
2026-08-09 08:27:24 +02:00

43 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
// Patch 09/08/2026 — P9 : étend la coupure immédiate (bypass min_on) à l'état
// collant 'departure_done_idle' (charge terminée pendant la fenêtre départ,
// jour). Même sûreté que night_recovery_done_idle : état collant, le takeover
// ne revient pas. Prérequis : patch-20260809-e2-recovery-done-cut.mjs.
// Rejouable.
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
const FILE = path.join(ROOT, 'workflows/victron-grid-hysteresis-v1.json');
const wf = JSON.parse(fs.readFileSync(FILE, 'utf8'));
const node = wf.nodes.find(n => n.name === 'Compute Grid Hysteresis');
if (!node) throw new Error('Node "Compute Grid Hysteresis" introuvable');
let code = node.parameters.jsCode;
if (code.includes("departure_done_idle")) {
console.log('Déjà appliqué — rien à faire.');
process.exit(0);
}
const anchor = ` evcsSurplusState === 'night_recovery_done_idle' &&
soc >= gridSocOff
) {`;
const insertion = ` (
evcsSurplusState === 'night_recovery_done_idle' ||
evcsSurplusState === 'departure_done_idle'
) &&
soc >= gridSocOff
) {`;
if (!code.includes(anchor)) throw new Error('Ancre E2 introuvable — appliquer d abord patch-20260809-e2-recovery-done-cut.mjs');
code = code.replace(anchor, insertion);
node.parameters.jsCode = code;
fs.writeFileSync(FILE, JSON.stringify(wf, null, 2) + '\n');
console.log('Patch appliqué →', FILE, `(jsCode ${code.length} chars)`);