Le conseiller ne fixe plus la cible du matin

Le premier cablage reel (§20, 09/08) faisait suivre a la cible SOC du matin
`input_number.evcs_advisor_night_target_soc`, derriere quatre gardes :
toggle, statut ok, fraicheur de 120 minutes, bornage [22, 90].

Depuis que le conseiller est devenu observateur le 12/09, il n emet plus de
cible et ce helper est fige a 55 %. Les quatre gardes continuaient pourtant
de passer toutes les quatre, parce que la garde de fraicheur date le RUN et
non la VALEUR : le conseiller tourne toujours, donc son horodatage est
frais. Activer le toggle aurait applique un chiffre perime sans qu aucune
garde ne s y oppose.

Retire : les quatre parametres d INPUT_PARSE, le bloc de WINDOWS_SOURCEV2,
le passe-plat de BATTERY_CLOUD_LOCKS, la trace (ADVISOR) de DECISION et les
quatre champs du gabarit de snapshot. Le cablage du BILAN (§39) est intact.
`parseAdvisorRunToMs` devient `parseRunStampToMs` : le bilan publie le meme
format et reste son seul appelant.

Golden 98 → 96. Les trois scenarios du cablage sont remplaces par un seul,
`advisor-cible-ignoree`, qui pinne l ABSENCE de cablage : toutes les
conditions de l ancienne regle reunies, et la cible doit rester celle des
regles de prevision. Mutation : cablage restaure → il tombe, avec
« target=22% (ADVISOR) » dans la raison ; retire → 96/96.

Gabarit re-rendu contre Home Assistant : 196 champs, JSON valide, aucun
null. Pousse en production, cycle suivant en succes.

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-13 12:14:38 +02:00
parent 4a9ad0bc65
commit 4fb401be96
8 changed files with 55 additions and 103 deletions

View File

@@ -268,31 +268,18 @@ const batteryMorningTargetRulePct =
: params.evcsNightTargetWeakForecastPct;
// =====================================================
// ADVISOR IA — PREMIER CÂBLAGE RÉEL (09/08/2026, HANDOFF §20)
// La cible SOC matin suit la recommandation de l'advisor UNIQUEMENT si :
// - toggle input_boolean.evcs_advisor_apply_night_target ON (rollback 1 clic)
// - dernier run advisor en statut 'ok'
// - recommandation fraîche (≤ 120 min, l'advisor tourne toutes les 15 min)
// - valeur bornée [max(22, hard floor), 90]
// Sinon : règles forecast historiques (comportement inchangé).
// LE CONSEILLER NE FIXE PLUS LA CIBLE (retire le 13/09/2026)
// =====================================================
const ADVISOR_TARGET_MAX_AGE_MIN = 120;
const advisorTargetAgeMin = minutesSince(params.advisorLastRunMs, nowMs);
const advisorNightTargetApplied =
params.advisorApplyNightTarget &&
params.advisorStatusOk &&
Number.isFinite(params.advisorNightTargetSocPct) &&
advisorTargetAgeMin !== null &&
advisorTargetAgeMin <= ADVISOR_TARGET_MAX_AGE_MIN;
const batteryMorningTargetBasePct =
advisorNightTargetApplied
? clamp(
params.advisorNightTargetSocPct,
Math.max(22, batteryHardFloorPct),
90
)
: batteryMorningTargetRulePct;
// Le premier cablage reel (09/08/2026, HANDOFF §20) faisait suivre a la cible
// du matin `input_number.evcs_advisor_night_target_soc`, derriere un toggle,
// un statut `ok`, une fraicheur de 120 min et un bornage.
// Le 12/09 le conseiller est devenu OBSERVATEUR : il n'emet plus de cible, et
// ce helper est fige depuis. Les quatre gardes continuaient pourtant de passer
// toutes les quatre — la garde de fraicheur date le RUN, pas la VALEUR, et le
// conseiller tourne toujours. Activer le toggle aurait donc applique un chiffre
// perime sans qu'aucune garde ne s'y oppose. Un cablage qui ne peut plus que se
// tromper se retire ; le scenario `advisor-cible-ignoree` le verifie.
const batteryMorningTargetBasePct = batteryMorningTargetRulePct;
// =====================================================
// CIBLE DU MATIN : UNE ENERGIE A COUVRIR, PAS UN PALIER (03/09/2026)
@@ -1059,7 +1046,6 @@ return [{
balanceTargetAgeMin:
balanceTargetAgeMin === null ? null : Math.round(balanceTargetAgeMin * 10) / 10,
batteryMorningTargetRulePct,
advisorNightTargetApplied,
maxBatteryDischargePoints,
gridTakeoverTriggerPct,