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
This commit is contained in:
42
tools/patch-20260809-p9-departure-cut.mjs
Normal file
42
tools/patch-20260809-p9-departure-cut.mjs
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/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)`);
|
||||
Reference in New Issue
Block a user