Le nombre de modules se lit, il ne se code plus
La courbe energie/SOC a ete mesuree sur sept modules. Retirer un module divise la capacite sans changer la forme de la courbe : les pentes sont donc mises a l'echelle du nombre reellement en service, lu dans input_number.evcs_balance_modules_en_service. Le controleur EVCS lit le meme helper pour sa capacite utile - les deux decrivent forcement le meme parc. Helper absent, illisible ou hors bornes => sept, la valeur de la mesure. Les 44 scenarios du bilan et les 80 golden passent donc sans qu'un seul attendu ait ete touche : la bascule ne change rien tant que personne ne l'ecrit. Deux scenarios couvrent la bascule elle-meme, l'un avec quatre modules (SOC exige 30,5 -> 35,2 %), l'autre avec une valeur aberrante qui doit retomber sur sept. Preuve par mutation : ignorer l'echelle fait tomber le premier et lui seul. Le genou a 33 % est conserve par PRUDENCE et non par mesure : l'hypothese est qu'il vient des cellules faibles du pack retire, donc qu'il disparait avec lui. Le garder revient a sous-estimer la reserve, c'est-a-dire a se tromper du bon cote. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -161,12 +161,34 @@ function buildSlots(consumption) {
|
||||
// ⚠️ A RE-MESURER apres toute evolution du parc (extension prevue cet hiver) :
|
||||
// `node tools/mesure-courbe-batterie.mjs 8`, puis mettre a jour ces trois
|
||||
// nombres. Ce ne sont pas des reglages, ce sont des resultats de mesure.
|
||||
//
|
||||
// ⚠️ CES PENTES ONT ETE MESUREES SUR SEPT MODULES. Retirer ou ajouter un module
|
||||
// divise ou multiplie la capacite sans changer la FORME de la courbe : on les
|
||||
// exprime donc par module, et on les multiplie par le nombre reellement en
|
||||
// service. Ce nombre se lit dans un helper — `input_number
|
||||
// .evcs_balance_modules_en_service` — et non dans le code : le parc a change
|
||||
// deux fois en une semaine et changera encore cet hiver. Helper absent ou
|
||||
// illisible => 7, la valeur sur laquelle la mesure a ete faite, donc aucun
|
||||
// changement de comportement tant que personne ne l'ecrit.
|
||||
const MODULES_MESURE = 7;
|
||||
const modulesEnService = (() => {
|
||||
const n = num(input.modules_en_service, MODULES_MESURE);
|
||||
return Number.isFinite(n) && n >= 1 && n <= 16 ? n : MODULES_MESURE;
|
||||
})();
|
||||
const echelleParc = modulesEnService / MODULES_MESURE;
|
||||
|
||||
const BATTERY_CURVE = {
|
||||
kneePct: 33,
|
||||
kwhPerPointAbove: 0.169,
|
||||
kwhPerPointBelow: 0.097,
|
||||
kwhPerPointAbove: 0.169 * echelleParc,
|
||||
kwhPerPointBelow: 0.097 * echelleParc,
|
||||
};
|
||||
|
||||
// ⚠️ LE GENOU EST CONSERVE PAR PRUDENCE, PAS PAR MESURE. L'hypothese la mieux
|
||||
// etayee est qu'il vient des cellules faibles du pack ancien, donc qu'il
|
||||
// disparait avec lui — auquel cas la pente reste plate et la reserve reelle est
|
||||
// MEILLEURE qu'annoncee ici. Le garder revient a se tromper du bon cote.
|
||||
// A trancher en remesurant : `node tools/mesure-courbe-batterie.mjs 8`.
|
||||
|
||||
// Energie que la batterie peut delivrer en descendant de socHi a socLo.
|
||||
function energyBetweenSoc(socLo, socHi) {
|
||||
if (!Number.isFinite(socLo) || !Number.isFinite(socHi) || socHi <= socLo) return 0;
|
||||
|
||||
Reference in New Issue
Block a user