diff --git a/Energy_Pie/module.html b/Energy_Pie/module.html index 09c4d11..fbae9c1 100644 --- a/Energy_Pie/module.html +++ b/Energy_Pie/module.html @@ -33,6 +33,13 @@ gap:14px;"> +
+
+
@@ -109,59 +116,69 @@ return Math.ceil((((d-s)/86400000)+1)/7)+" "+y; } -function render(data){ - if(!data) return; +function render(data) { + if (!data) return; + // UI-Status elRange.value = data.range || 'day'; elDate.value = data.date || ''; - elDate.disabled = (data.range === 'total'); // Zeitraum-Anzeige if (data.range === 'total') { - // ✅ Wunsch: bei Gesamt nix anzeigen elPeriod.textContent = ''; } else if (data.tStart && data.tEnd) { const s = new Date(data.tStart * 1000); const e = new Date(data.tEnd * 1000 - 1000); - if (data.range === 'day') + const pad = n => String(n).padStart(2, '0'); + const fmt = d => `${pad(d.getDate())}.${pad(d.getMonth() + 1)}.${d.getFullYear()}`; + + if (data.range === 'day') { elPeriod.textContent = `Zeitraum: ${fmt(s)}`; - else if (data.range === 'week') - elPeriod.textContent = `Zeitraum: Woche ${isoWeek(s)}`; - else if (data.range === 'month') - elPeriod.textContent = `Zeitraum: ${monthName(s.getMonth())} ${s.getFullYear()}`; - else if (data.range === 'year') - elPeriod.textContent = `Zeitraum: ${s.getFullYear()}`; - else - elPeriod.textContent = ''; // fallback: lieber leer als falsch - } else { - elPeriod.textContent = ''; + } else if (data.range === 'week') { + elPeriod.textContent = `Zeitraum: ${fmt(s)} – ${fmt(e)}`; + } else if (data.range === 'month') { + elPeriod.textContent = `Zeitraum: ${fmt(s)} – ${fmt(e)}`; + } else if (data.range === 'year') { + elPeriod.textContent = `Zeitraum: ${fmt(s)} – ${fmt(e)}`; + } } - // Keine Daten - if(data.hasData === false){ - elHint.innerHTML = `Letzter Zeitpunkt (Keine Werte für diesen Zeitraum)`; + // Keine Daten vorhanden + if (data.hasData === false) { + elHint.innerHTML = ` + Letzter Zeitpunkt + (Keine Werte für diesen Zeitraum) + `; elGrid.innerHTML = ''; + elExplain.innerHTML = ''; return; } // Werte const v = data.values || {}; + const prod = v.Produktion || 0; + const cons = v.Hausverbrauch || 0; + const grid = v.Netz || 0; + const eigen = Math.max(cons - grid, 0); + elHint.innerHTML = ` - Produktion: ${v.Produktion?.toFixed(2) || 0} kWh - Verbrauch: ${v.Hausverbrauch?.toFixed(2) || 0} kWh - Netzbezug: ${v.Netz?.toFixed(2) || 0} kWh + Produktion: ${prod.toFixed(2)} kWh + Verbrauch: ${cons.toFixed(2)} kWh + Netzbezug: ${grid.toFixed(2)} kWh `; - const donut = (t, p, c) => { + // Donut-Renderer + const donut = (title, percent, color) => { const r = 56; const C = 2 * Math.PI * r; - const dash = (Math.max(0, Math.min(100, p)) / 100) * C; + const p = Math.max(0, Math.min(100, percent)); + const dash = (p / 100) * C; return `
-
${t}
+
${title}
@@ -169,37 +186,55 @@ function render(data){ stroke="rgba(255,255,255,0.18)" stroke-width="18" fill="none" /> - + style="filter: drop-shadow(0 0 12px ${color});" />
- ${Number(p).toFixed(1)}% + ${p.toFixed(1)}%
`; }; - const prod = v.Produktion || 0; - const cons = v.Hausverbrauch || 0; - const grid = v.Netz || 0; - const eigen = Math.max(cons - grid, 0); - + // Donuts einsetzen elGrid.innerHTML = donut('Eigenverbrauchsquote', prod ? (eigen / prod * 100) : 0, '#63B3FF') + donut('Autarkiegrad', cons ? (eigen / cons * 100) : 0, '#A855F7'); + + // Erklärtexte unter den Kreisen + elExplain.innerHTML = ` +
+ Eigenverbrauchsquote: + Anteil des selbst erzeugten Stroms, der direkt im eigenen Haushalt verbraucht wird. +
+
+ Autarkiegrad: + Anteil des gesamten Stromverbrauchs, der durch eigene Stromerzeugung gedeckt wird. +
+ `; } +document.getElementById('explain').innerHTML = ` +
+ Eigenverbrauchsquote: + Anteil des selbst erzeugten Stroms, der direkt im eigenen Haushalt verbraucht wird. +
+
+ Autarkiegrad: + Anteil des gesamten Stromverbrauchs, der durch eigene Stromerzeugung gedeckt wird. +
+`; + window.handleMessage = d=>{ try{if(typeof d==='string')d=JSON.parse(d)}catch{} render(d);