HA Bilan energetique : nuage soiree/nuit (ApexCharts), points publies dans sensor.evcs_nuit_maison_prevue_kwh

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 00:00:09 +02:00
parent 7f3eda421f
commit 71a71e40d7
2 changed files with 84 additions and 5 deletions

View File

@@ -2015,19 +2015,23 @@ async function publierNuitMaison(client) {
if (DRY || !client) return 0;
const maintenant = new Date();
const cadre = nuitMaisonPrevue([], NaN, maintenant);
let res = cadre;
// Les nuits closes sont lues A CHAQUE fois, meme le jour : elles alimentent
// aussi le nuage du tableau HA (attribut `nuage`, [soiree, nuit, voiture 0/1]).
const nuits = (await client.query(NUITS_SQL +
'\nSELECT soiree_kwh AS soiree, maison_nuit_kwh AS nuit, voiture_kwh AS voiture FROM nuits ORDER BY j')).rows;
let soiree = NaN;
if (cadre.etat !== 'hors_fenetre') {
const nuits = (await client.query(NUITS_SQL + '\nSELECT soiree_kwh AS soiree, maison_nuit_kwh AS nuit FROM nuits')).rows;
const debut = cadre.attributs.debut_ms;
const soir = (await client.query(SOIREE_SQL, [debut - 3.5 * 3600000, debut])).rows[0];
// Une soiree sans mesure (service arrete) ne vaut pas zero kWh.
const soiree = soir && Number(soir.points) > 0 ? Number(soir.kwh) : NaN;
res = nuitMaisonPrevue(nuits, soiree, maintenant);
soiree = soir && Number(soir.points) > 0 ? Number(soir.kwh) : NaN;
}
const res = nuitMaisonPrevue(nuits, soiree, maintenant);
const nuage = nuits.map((n) => [Number(n.soiree), Number(n.nuit), Number(n.voiture) >= 0.5 ? 1 : 0]);
await publierCapteur('sensor.evcs_nuit_maison_prevue_kwh', res.etat, {
friendly_name: 'EVCS — nuit de la maison prevue par la soiree', icon: 'mdi:chart-scatter-plot',
unit_of_measurement: typeof res.etat === 'number' ? 'kWh' : undefined, ...res.attributs,
calcule_a: maintenant.toISOString(),
nuage, calcule_a: maintenant.toISOString(),
});
return 1;
}