Prevision de nuit : mode jour (plus de fausse reponse sur la nuit ecoulee)

Le jour, sans rien a couvrir avant le retour du solaire, le texte parlait de
la nuit ecoulee (« 0 kWh jusqu au retour du solaire vers 10 h, la batterie
suffit »). Etat `jour` : la prevision se fait le soir, avec un repere
provisoire (prochaine traversee prudente) et l'achat si EDF s'engage.
Diagnostics 87/87.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uJ47NxgfpGnuuMr3f2n7Z
This commit is contained in:
Tallagrand Thierry
2026-09-29 10:53:39 +02:00
parent 24ccecbc02
commit c2f9e83a39
3 changed files with 63 additions and 2 deletions

View File

@@ -658,6 +658,31 @@ export function previsionNuit(st, maintenant = new Date()) {
`Le systeme refait le calcul ${hc} : si la soiree a consomme davantage, il prendra EDF en heures creuses` +
`${maisonHcKwh !== null ? `, et la maison y achetera alors environ ${kwh(Math.round(maisonHcKwh * 10) / 10)} kWh` : ''}.`,
}[verdict];
// LE JOUR (29/09, remarque de SPARK) : plus rien a couvrir avant le retour
// du solaire = le solaire couvre deja la maison. Le texte « la maison doit
// couvrir 0 kWh jusqu au retour du solaire vers 10 h » parlait alors de la
// nuit ECOULEE, et une question « et cette nuit ? » posee a midi recevait
// une reponse fausse. La vraie prevision se fait le soir, sur la soiree
// reelle (facteur de nuit) et la decision de 01:24. Le jour, on le dit, avec
// un repere provisoire : la prochaine traversee du bilan (profil PRUDENT).
if (aCouvrir <= 0 && !session) {
const fen = txt('input_text.evcs_balance_next_deficit_window');
const m = fen ? fen.match(/^(\d{2}) h → (\d{2}) h/) : null;
const ndSoc = nombre(st, 'input_number.evcs_balance_next_deficit_required_soc');
const ndKwh = nombre(st, 'input_number.evcs_balance_next_deficit_kwh');
const repere = m && ndSoc !== null && ndKwh !== null
? ` Repere provisoire, profil prudent : pour passer de ${m[1]} h a ${m[2]} h sans EDF (environ ${kwh(ndKwh)} kWh), ` +
`il faudrait la batterie a ${kwh(Math.round(ndSoc))} % a ${m[1]} h.`
: '';
const achatSi = maisonHcKwh !== null
? ` Si EDF s engage ${hc}, la maison y achetera environ ${kwh(Math.round(maisonHcKwh * 10) / 10)} kWh ${jusqua}.` : '';
const texteJour = `Il est trop tot pour la prevision de la nuit : elle se calcule le soir, sur la consommation reelle ` +
`de la soiree, et la decision d EDF se prend ${hc}.${repere}${achatSi} Batterie a ${soc !== null ? Math.round(soc) : '?'} % maintenant.`;
return { etat: 'jour', attributs: { ...attributs, verdict: 'jour', statut: 'jour',
prochaine_traversee: m ? `${m[1]} h -> ${m[2]} h` : null,
prochaine_traversee_soc_requis_pct: m ? ndSoc : null, prochaine_traversee_kwh: m ? ndKwh : null,
explication: texteJour, texte_rapport: texteJour } };
}
const texte = `La maison doit couvrir environ ${aCouvrir} kWh jusqu au retour du solaire vers ${retour}. ` +
`${edf} Batterie a ${soc !== null ? Math.round(soc) : '?'} %. ${voiture}`;
const etat = verdict === 'edf_engage' || verdict === 'reseau_necessaire' ? (importPrevu ?? manqueKwh) : 0;