Budget voiture de la nuit : annonce dans la prevision, cartes Bilan energetique (Production) et EVCS Master

This commit is contained in:
Tallagrand Thierry
2026-09-30 15:01:31 +02:00
parent e0d855f33f
commit ae380da696
5 changed files with 110 additions and 10 deletions

View File

@@ -652,13 +652,37 @@ export function previsionNuit(st, maintenant = new Date()) {
? ' Sous reserve : l historique de production de ces heures de fin de journee est incomplet (batterie souvent pleine a cette heure) ; la decision reelle est reprise ' + (hcDebut ? `a ${hcDebut}` : 'a l ouverture des heures creuses') + '.'
: '';
attributs.reserve_bilan = degrade ? 'forme de production minoree sur les heures de deficit' : null;
const voiture = attributs.voiture === 'aucune'
? 'Aucun vehicule branche.'
: attributs.voiture === 'branchee'
? 'Un vehicule est branche : sa charge s ajoute et sera decidee par le controleur.'
: 'Etat du vehicule inconnu.';
const hc = hcDebut ? `a ${hcDebut}` : 'a l ouverture des heures creuses';
const kwh = (x) => String(x).replace('.', ',');
// BUDGET VOITURE DE LA NUIT (30/09) : ce que la batterie peut donner sans EDF,
// et le reglage de la nuit (sans_edf par defaut, complete sur demande). Pendant
// la session, le budget FIGE par le controleur et ce qui a deja ete donne.
const modeNuit = txt('input_select.victron_evcs_night_charge_mode') === 'complete' ? 'complete' : 'sans_edf';
const fige = (txt('input_text.victron_evcs_night_budget') || '').match(/^\s*([\d.]+)\|([\d.]+)\s*$/);
const compteur = nombre(st, 'sensor.evcs_hq2239dnt7p_total_energy');
const budgetPublie = nombre(st, 'input_number.evcs_balance_night_vehicle_budget_kwh');
const budgetKwh = fige ? Number(fige[1]) : budgetPublie;
const dejaDonne = fige && compteur !== null ? Math.max(0, Math.round((compteur - Number(fige[2])) * 10) / 10) : null;
const b = budgetKwh !== null ? kwh(Math.round(budgetKwh * 10) / 10) : null;
const suite = modeNuit === 'complete'
? 'puis EDF en heures creuses pour le reste (charge complete demandee)'
: 'puis elle s arrete et attend le soleil (reglage « sans EDF »)';
const phraseBudget = b === null ? ''
: budgetKwh < 0.1
? (modeNuit === 'complete'
? 'La batterie ne peut rien donner a la voiture cette nuit : EDF la chargera en heures creuses (charge complete demandee).'
: 'La batterie ne peut rien donner a la voiture cette nuit sans EDF : elle attendra le soleil (reglage « sans EDF »).')
: `La voiture peut prendre environ ${b} kWh sur la batterie sans EDF, ${suite}.` +
(dejaDonne !== null ? ` Deja ${kwh(dejaDonne)} kWh donnes.` : '');
attributs.mode_charge_nuit = modeNuit;
attributs.budget_voiture_kwh = budgetKwh;
attributs.budget_voiture_fige = !!fige;
attributs.budget_deja_donne_kwh = dejaDonne;
const voiture = attributs.voiture === 'aucune'
? 'Aucun vehicule branche.' + (phraseBudget ? ` S il y en a un cette nuit : ${phraseBudget.charAt(0).toLowerCase()}${phraseBudget.slice(1)}` : '')
: attributs.voiture === 'branchee'
? (phraseBudget ? `Voiture branchee. ${phraseBudget}` : 'Un vehicule est branche : sa charge s ajoute et sera decidee par le controleur.')
: 'Etat du vehicule inconnu.';
const jusqua = hcFin ? `jusqu a ${hcFin}` : 'jusqu a la fin des heures creuses';
const plage = hcDebut && hcFin ? `de ${hcDebut} a ${hcFin}` : 'en heures creuses';
const detail = maisonHcKwh === null ? ''
@@ -693,7 +717,8 @@ export function previsionNuit(st, maintenant = new Date()) {
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.`;
`de la soiree, et la decision d EDF se prend ${hc}.${repere}${achatSi} Batterie a ${soc !== null ? Math.round(soc) : '?'} % maintenant.` +
(phraseBudget ? ` ${phraseBudget}` : '');
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,