La fenetre de midi est aussi une fenetre d heures creuses
Signale par le proprietaire avant le PUT : « il faut ajouter la periode HC 12h24 jusqu a 14h24 ». Il avait raison, et le trou etait plus profond qu une borne manquante — l engagement de session etait gate sur `night_hc` SEUL, parce que §40 ne traitait que la nuit. Consequence : la charge HC manuelle qu on venait d ecrire ne pouvait RIEN faire a midi. Le plancher relevait bien la cible du bilan, mais aucune session ne s engageait, donc pas de takeover, pas de contacteur, pas de consigne. Le reglage aurait releve le plancher de demarrage du soir — donc bloque la charge du vehicule — sans jamais charger la batterie. Le pire des deux mondes. ⚠️ ET LE CRITERE N EST PAS LE MEME AUX DEUX FENETRES. La nuit, on compare le SOC a `batteryMorningTargetPct`, qui contient le palier de prevision (35/55/85). A midi ce palier n a aucun sens : il vaut 35 par beau temps, donc un SOC de 30 % EN PLEIN SOLEIL engagerait une session reseau — la substitution du solaire par le reseau qu on a mis des semaines a eteindre. A midi le critere honnete est le SOC requis du bilan lui-meme, qui s auto-regule : le croisement PV etant passe, l energie a couvrir vaut zero et le requis retombe au plancher dur. Releve du 17/09 a 13:51, plein soleil : required_soc = 22,0 pour energy_to_cover = 0,0. Il ne remonte qu un jour sombre — ou quand le proprietaire pose un plancher manuel, ce qui est exactement le cas d usage. Golden 106 -> 108. Les deux scenarios sont une paire : meme heure, meme profil, seul le ciel change. Sombre avec un bilan qui reclame 85 % -> la session s engage ; ensoleille avec un bilan a 22 % et un SOC de 30 % SOUS le palier du matin -> aucun engagement. Mutations : retour au gate night_hc seul -> le scenario sombre ; critere de la nuit applique a midi -> le contrefactuel ensoleille. Chacune tombe sur un jeu different. Hysteresis 24, ACM 20, bilan 50 inchanges. ⚠️ AUCUN PUT. Il en faut desormais DEUX — le bilan et le controleur — et ils attendent tous les deux sa validation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -705,9 +705,40 @@ const nightGridSessionUncovered =
|
||||
// sous le seuil OFF de l'hysteresis (30), donc le contacteur reste ferme et
|
||||
// la maison passe au PLEIN TARIF jusqu'au croisement PV — le 1,49 kWh deja
|
||||
// consigne le 03/09.
|
||||
// ⚠️ LA FENETRE DE MIDI EST AUSSI UNE FENETRE D'HEURES CREUSES (18/09/2026).
|
||||
// L'engagement de session etait gate sur `night_hc` seul, parce que §40 traitait
|
||||
// la nuit. Consequence mesuree : la charge HC manuelle demandee par le
|
||||
// proprietaire ne pouvait RIEN faire a midi — le plancher relevait bien la cible
|
||||
// du bilan, mais aucune session ne s'engageait, donc le contacteur ne se fermait
|
||||
// pas et la consigne restait au repos. Le reglage aurait releve le plancher du
|
||||
// soir (donc bloque la voiture) sans jamais charger la batterie.
|
||||
//
|
||||
// ⚠️ ET LE CRITERE N'EST PAS LE MEME AUX DEUX FENETRES. La nuit, on compare le
|
||||
// SOC a `batteryMorningTargetPct`, qui contient le palier de prevision
|
||||
// (35/55/85). A midi ce palier n'a aucun sens : il vaut 35 par beau temps, donc
|
||||
// un SOC de 30 % en plein soleil engagerait une session reseau — c'est-a-dire la
|
||||
// substitution du solaire par le reseau qu'on a mis des semaines a eteindre.
|
||||
//
|
||||
// A midi le critere honnete est le SOC requis du bilan lui-meme, qui
|
||||
// s'auto-regule : le croisement PV etant passe, `energyToCoverKwh` vaut zero et
|
||||
// `required_soc` retombe au plancher dur. Releve du 17/09 a 13:51, plein soleil :
|
||||
// `required_soc` = 22,0 pour `energy_to_cover` = 0,0. Il ne remonte qu'un jour
|
||||
// sombre — ou quand le proprietaire pose un plancher manuel, ce qui est
|
||||
// exactement le cas d'usage.
|
||||
const middayGridSessionUncovered =
|
||||
balanceMorningTargetApplied &&
|
||||
Number.isFinite(params.balanceRequiredSocPct) &&
|
||||
parsed.soc < params.balanceRequiredSocPct;
|
||||
|
||||
const gridSessionInHcWindow =
|
||||
profile === 'night_hc' || profile === 'midday_hc_or_solar';
|
||||
|
||||
const gridSessionUncovered =
|
||||
profile === 'night_hc' ? nightGridSessionUncovered : middayGridSessionUncovered;
|
||||
|
||||
const nightGridSessionCommitted =
|
||||
profile === 'night_hc' &&
|
||||
(nightGridSessionUncovered || nightGridSessionCommittedPrev);
|
||||
gridSessionInHcWindow &&
|
||||
(gridSessionUncovered || nightGridSessionCommittedPrev);
|
||||
|
||||
const nightGridTakeoverNeeded =
|
||||
nightGridSessionCommitted ||
|
||||
|
||||
Reference in New Issue
Block a user