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:
@@ -172,10 +172,12 @@ function parseChargingTimeToSec(s) {
|
||||
return matched ? sec : null;
|
||||
}
|
||||
|
||||
// Advisor IA : input_text.evcs_advisor_last_run au format "DD/MM HH:mm"
|
||||
// Horodatage "DD/MM HH:mm" publie par le bilan energetique
|
||||
// (input_text.evcs_balance_last_run). Le conseiller employait le meme format ;
|
||||
// son cablage a ete retire le 13/09/2026, la fonction sert desormais au bilan.
|
||||
// (pas d'année). On suppose l'année courante ; si le résultat est dans le
|
||||
// futur (> 1 jour), c'est un passage d'année → on retire un an.
|
||||
function parseAdvisorRunToMs(s) {
|
||||
function parseRunStampToMs(s) {
|
||||
const m = (s ?? '').toString().trim().match(/^(\d{2})\/(\d{2}) (\d{2}):(\d{2})$/);
|
||||
if (!m) return null;
|
||||
|
||||
@@ -464,17 +466,13 @@ const params = {
|
||||
// Advisor IA — premier câblage réel (09/08/2026, HANDOFF §20) :
|
||||
// cible SOC matin recommandée, appliquée UNIQUEMENT si le toggle est ON.
|
||||
// Garde-fous consommés dans WINDOWS_SOURCEV2 (statut ok + fraîcheur + bornes).
|
||||
advisorApplyNightTarget: low(input.advisor_apply_night_target || 'off') === 'on',
|
||||
advisorNightTargetSocPct: num(input.advisor_night_target_soc, NaN),
|
||||
advisorStatusOk: cleanText(input.advisor_status).toLowerCase() === 'ok',
|
||||
advisorLastRunMs: parseAdvisorRunToMs(cleanText(input.advisor_last_run)),
|
||||
|
||||
// BILAN ENERGETIQUE (03/09/2026). Meme format d'horodatage que l'advisor
|
||||
// ("DD/MM HH:mm"), d'ou la reutilisation du parseur.
|
||||
balanceRequiredSocPct: num(input.balance_required_soc, NaN),
|
||||
balanceEnergyToCoverKwh: num(input.balance_energy_to_cover_kwh, NaN),
|
||||
balanceStatusOk: cleanText(input.balance_status).toLowerCase() === 'ok',
|
||||
balanceLastRunMs: parseAdvisorRunToMs(cleanText(input.balance_last_run)),
|
||||
balanceLastRunMs: parseRunStampToMs(cleanText(input.balance_last_run)),
|
||||
|
||||
// Duree de la fenetre d'etablissement. Valeur mesuree le 31/08/2026 : le
|
||||
// transitoire de fermeture dure ~150 s (import 1985 -> 25 W et 2600 -> 52 W,
|
||||
|
||||
Reference in New Issue
Block a user