// Energie du chauffe-eau sur 24 h (07/10/2026), pour la regle « jour faible : // eau chaude en HC de nuit » du workflow Water Heater Advisor ECS 6 Nodes : // moins de 1,5 kWh en 24 h -> il chauffe quand meme (securite eau chaude). // Somme des HAUSSES du compteur cumule : une remise a zero ou une lecture // indisponible ne cree ni energie negative ni saut. export const COMPTEUR_CHAUFFE_EAU = 'sensor.tt_chauffe_eau_pleumeur_energie_totale'; // Energie depuis `depuisMs` (meme regle : somme des hausses ; le point juste // avant la borne sert de reference). export function energieDepuis(serie, depuisMs) { const pts = (serie || []).map((e) => [Date.parse(e.last_changed), Number.parseFloat(e.state)]) .filter(([t, v]) => Number.isFinite(t) && Number.isFinite(v)); if (!pts.length) return null; let ref = null; const apres = []; for (const p of pts) { if (p[0] <= depuisMs) ref = p; else apres.push(p); } const vals = (ref ? [ref, ...apres] : apres).map((p) => p[1]); let kwh = 0; for (let i = 1; i < vals.length; i++) if (vals[i] > vals[i - 1]) kwh += vals[i] - vals[i - 1]; return Math.round(kwh * 100) / 100; } export function energieSur24h(serie) { const vals = (serie || []).map((e) => Number.parseFloat(e.state)).filter(Number.isFinite); if (!vals.length) return null; // compteur illisible sur 24 h : on ne dit rien let kwh = 0; for (let i = 1; i < vals.length; i++) if (vals[i] > vals[i - 1]) kwh += vals[i] - vals[i - 1]; return Math.round(kwh * 100) / 100; }