diff --git a/Energy_Pie/module.html b/Energy_Pie/module.html index fbae9c1..09c4d11 100644 --- a/Energy_Pie/module.html +++ b/Energy_Pie/module.html @@ -33,13 +33,6 @@ gap:14px;"> -
-
-
@@ -116,69 +109,59 @@ 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); - const pad = n => String(n).padStart(2, '0'); - const fmt = d => `${pad(d.getDate())}.${pad(d.getMonth() + 1)}.${d.getFullYear()}`; - - if (data.range === 'day') { + if (data.range === 'day') elPeriod.textContent = `Zeitraum: ${fmt(s)}`; - } 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)}`; - } + 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 = ''; } - // Keine Daten vorhanden - if (data.hasData === false) { - elHint.innerHTML = ` - Letzter Zeitpunkt - (Keine Werte für diesen Zeitraum) - `; + // Keine Daten + 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: ${prod.toFixed(2)} kWh - Verbrauch: ${cons.toFixed(2)} kWh - Netzbezug: ${grid.toFixed(2)} kWh + Produktion: ${v.Produktion?.toFixed(2) || 0} kWh + Verbrauch: ${v.Hausverbrauch?.toFixed(2) || 0} kWh + Netzbezug: ${v.Netz?.toFixed(2) || 0} kWh `; - // Donut-Renderer - const donut = (title, percent, color) => { + const donut = (t, p, c) => { const r = 56; const C = 2 * Math.PI * r; - const p = Math.max(0, Math.min(100, percent)); - const dash = (p / 100) * C; + const dash = (Math.max(0, Math.min(100, p)) / 100) * C; return `
-
${title}
+
${t}
@@ -186,55 +169,37 @@ function render(data) { stroke="rgba(255,255,255,0.18)" stroke-width="18" fill="none" /> + + style="filter: drop-shadow(0 0 12px ${c});" />
- ${p.toFixed(1)}% + ${Number(p).toFixed(1)}%
`; }; - // Donuts einsetzen + const prod = v.Produktion || 0; + const cons = v.Hausverbrauch || 0; + const grid = v.Netz || 0; + const eigen = Math.max(cons - grid, 0); + 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);