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 ||
|
||||
|
||||
@@ -2433,6 +2433,58 @@ export const scenarios = [
|
||||
gridSetpointW: 5437,
|
||||
},
|
||||
},
|
||||
{
|
||||
// ======== LA FENETRE DE MIDI EST UNE FENETRE D'HEURES CREUSES (18/09) ========
|
||||
// L'engagement de session etait gate sur `night_hc` seul : 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 pas de contacteur, pas de consigne, et un plancher du
|
||||
// soir releve pour rien.
|
||||
id: 'hc-midi-bilan-reclame-engage-la-session',
|
||||
label: 'MIDI 18/09 — journee sombre, le bilan reclame 85 % pour un SOC de 40 : la session HC de midi doit s engager',
|
||||
time: MIDDAY,
|
||||
overrides: {
|
||||
evcs_vehicle_connected: 'off', evcs_device_connected: 'on',
|
||||
soc_percent: '40', battery_current_a: '-8',
|
||||
pv_power_w: '200', pv_power_10m_avg_w: '200', pv_trend_w: '0',
|
||||
house_ac_power_w: '900', vebus_ac_out_l1_power_w: '900',
|
||||
evcs_ac_power_w: '0',
|
||||
balance_required_soc: '85', balance_energy_to_cover_kwh: '7.6',
|
||||
balance_grid_energy_needed_kwh: '7.605',
|
||||
balance_status: 'ok', balance_last_run: '08/08 12:50',
|
||||
},
|
||||
expect: {
|
||||
profile: 'midday_hc_or_solar',
|
||||
sessionCommittedService: 'turn_on',
|
||||
takeoverNeeded: true,
|
||||
takeoverHelperService: 'turn_on',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'hc-midi-soleil-aucun-engagement',
|
||||
label: 'CONTREFACTUEL — meme midi en plein soleil : le bilan ne reclame rien (22 %), aucune session malgre un SOC sous le palier du matin',
|
||||
time: MIDDAY,
|
||||
overrides: {
|
||||
evcs_vehicle_connected: 'off', evcs_device_connected: 'on',
|
||||
soc_percent: '30', battery_current_a: '60',
|
||||
pv_power_w: '7000', pv_power_10m_avg_w: '6800', pv_trend_w: '0',
|
||||
house_ac_power_w: '900', vebus_ac_out_l1_power_w: '900',
|
||||
evcs_ac_power_w: '0',
|
||||
// Le croisement PV est passe : le bilan retombe au plancher dur.
|
||||
balance_required_soc: '22', balance_energy_to_cover_kwh: '0',
|
||||
balance_grid_energy_needed_kwh: '0',
|
||||
balance_status: 'ok', balance_last_run: '08/08 12:50',
|
||||
},
|
||||
expect: {
|
||||
profile: 'midday_hc_or_solar',
|
||||
// ⚠️ LE SCENARIO QUI JUSTIFIE LE CHOIX DU CRITERE. A midi on compare le SOC
|
||||
// au SOC REQUIS du bilan (22), et non a `batteryMorningTargetPct` qui
|
||||
// contient le palier de prevision — celui-ci vaudrait 35 par beau temps,
|
||||
// donc ce SOC de 30 % engagerait une session reseau EN PLEIN SOLEIL,
|
||||
// c'est-a-dire la substitution qu'on a mis des semaines a eteindre.
|
||||
takeoverNeeded: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'consigne-bilan-plancher-nuage-exclut-la-batterie',
|
||||
label: 'CONSIGNE 18/09 — midi, soleil bride, manque batterie, PAS de voiture : le terme batterie ne doit PAS remonter le plancher nuage',
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user