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}
- ${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);