E-Auto-Lade-Erkennung im 31d-Diagramm

Markiert im 31d-Diagramm die Tage rot, an denen das E-Auto geladen wurde:
Leistung (Feld 'leistung', W) lag laenger als LADEN_MIN_HOURS (Default 2h)
ununterbrochen ueber LADEN_THRESHOLD_KW (Default 11 kW).

- Erkennung serverseitig per Flux stateDuration auf den Sekundendaten
  (24h Vorlauf fuer ueber Mitternacht laufende Ladungen an der Monatsgrenze)
- /api/laden?month=YYYY-MM, Ergebnis gecacht (abgeschlossene Monate dauerhaft,
  laufender Monat 5 min) -> ~15s nur beim ersten Aufruf
- Markierung wird asynchron nachgeladen, Balken erscheinen sofort
- Schwelle/Dauer per Env (LADEN_THRESHOLD_KW, LADEN_MIN_HOURS) einstellbar
- BarChart: optionales highlight-Set faerbt passende Balken

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-28 14:49:44 +02:00
parent 3649bf4e22
commit 46c8057155
6 changed files with 218 additions and 10 deletions
+20 -2
View File
@@ -13,12 +13,24 @@ interface BarChartProps {
// Optionale feste Achsengrenzen (z.B. komplettes Jahr -> immer 12 Monate sichtbar)
xMin?: number;
xMax?: number;
// Hervorzuhebende Balken (Zeitstempel-Set, z.B. E-Auto-Ladetage) + Farbe
highlight?: Set<number>;
highlightColor?: string;
}
const HOUR_MS = 60 * 60 * 1000;
const DAY_MS = 24 * HOUR_MS;
export default function BarChart({ title, data, every, color, xMin, xMax }: BarChartProps) {
export default function BarChart({
title,
data,
every,
color,
xMin,
xMax,
highlight,
highlightColor = '#c0392b',
}: BarChartProps) {
const isHourly = every === '1h';
const isMonthly = every === '1mo';
const tooltipDateFormat = isHourly ? '%d.%m.%Y %H:%M' : isMonthly ? '%B %Y' : '%d.%m.%Y';
@@ -76,7 +88,13 @@ export default function BarChart({ title, data, every, color, xMin, xMax }: BarC
{
type: 'column',
name: 'Verbrauch',
data,
// markierte Balken (z.B. Ladetage) bekommen eine eigene Farbe
data:
highlight && highlight.size
? data.map(([x, y]) =>
highlight.has(x) ? { x, y, color: highlightColor } : { x, y }
)
: data,
color,
},
],