Statistiken & Analysen
Das SolarLog Dashboard bietet umfangreiche Statistik- und Analysefunktionen, um die Leistung und Rentabilität Ihrer Photovoltaik-Anlagen zu überwachen und zu vergleichen.
Übersicht
Die Statistik-Seite ermöglicht detaillierte Vergleiche und Analysen:
- Hersteller-Vergleich: Vergleichen Sie die Performance verschiedener Wechselrichter-Hersteller
- Modell-Vergleich: Analysieren Sie unterschiedliche Modelle hinsichtlich Energie und Leistung
- Jahres-Vergleich: Vergleichen Sie Anlagen nach Installationsjahr
- Rentabilitäts-Analyse: Berechnen Sie den Return on Investment (ROI)
Filterfunktionen
Verfügbare Filter
Die Statistik-Seite bietet folgende Filtermöglichkeiten:
- Hersteller
- Filtern Sie nach spezifischen Wechselrichter-Herstellern
-
Beispiele: SMA, Kostal, Delta, DEMO
-
Modell
- Wählen Sie spezifische Modellreihen
-
Beispiele: Tripower, Plenticore, Solivia, Virtual 60kW
-
Standort
- Geografische Filterung (in Entwicklung)
-
Optionen: Unterfranken, Bayern, Deutschland
-
Installationsjahr
- Vergleichen Sie Anlagen nach Baujahr
-
Nützlich für Technologie-Vergleiche
-
Wechselrichter
- Filtern Sie nach einzelnen Anlagen
- Detailanalyse spezifischer Systeme
Filter anwenden
// Beispiel: Alle SMA-Wechselrichter aus 2022
Filter:
- Hersteller: SMA
- Modell: Alle
- Installationsjahr: 2022
Statistik-Ansichten
1. Hersteller-Vergleich
Energie-Produktion nach Hersteller - Balkendiagramm zeigt Gesamtenergie pro Hersteller - Pie-Chart zeigt Verteilung der Anlagen - Übersichtstabelle mit Durchschnittswerten
Metriken: - Anzahl der Anlagen - Gesamtenergie (kWh) - Durchschnitt pro Anlage (kWh)
Verwendung:
Navigation: Dashboard → Statistiken → Tab "Hersteller-Vergleich"
Interpretation:
- Höhere Balken = Bessere Gesamtproduktion
- Vergleichen Sie Ø pro Anlage für faire Bewertung
2. Modell-Vergleich
Energie & Leistung nach Modell - Dual-Achsen-Diagramm: Energie (links) und Leistung (rechts) - Detailkarten für jedes Modell
Metriken: - Energie heute (kWh) - Durchschnittliche Leistung (kW) - Anzahl Anlagen pro Modell
Verwendung:
Navigation: Dashboard → Statistiken → Tab "Modell-Vergleich"
Interpretation:
- Grüne Balken = Energieproduktion
- Blaue Balken = Aktuelle Leistung
- Vergleichen Sie Effizienz verschiedener Modelle
3. Jahres-Vergleich
Installationsjahr-Analyse - Liniendiagramm zeigt Energie-Trends - ROI-Berechnung pro Installationsjahr
Metriken: - Anzahl Anlagen pro Jahr - Gesamtenergie (kWh) - Geschätzter Umsatz (€)
Verwendung:
Navigation: Dashboard → Statistiken → Tab "Jahres-Vergleich"
Beispiel-Interpretation:
- 2022: 1 Anlage, 180 MWh, 21.600€ Umsatz
- 2023: 2 Anlagen, 350 MWh, 42.000€ Umsatz
4. Rentabilitäts-Analyse
ROI-Berechnung - Balkendiagramm zeigt Gesamtumsatz pro Anlage - Detailkarten mit Rentabilitätskennzahlen
Berechnungsgrundlage:
# Annahme: Einspeisevergütung 0,12€/kWh
Umsatz = Gesamtenergie (kWh) × 0,12€
# Pro Jahr:
Jahresumsatz = Gesamtumsatz / Betriebsjahre
# Energieproduktion:
kWh_pro_Jahr = Gesamtenergie / Betriebsjahre
Metriken: - Betriebsjahre (seit Installation) - Gesamtumsatz (€) - kWh/Jahr - Umsatz/Jahr (€)
Beispiel:
DEMO - Ralf Braun Lager GmbH & Co. KG
- Betriebsjahre: 3,4 Jahre
- Gesamtenergie: 204.000 kWh
- Gesamtumsatz: 24.480€
- kWh/Jahr: 60.000
- Umsatz/Jahr: 7.200€
ROI-Analyse:
- Bei Anschaffungskosten von 60.000€
- Amortisation nach ~8,3 Jahren
- Jährliche Rendite: ~12%
API-Endpunkte
Statistik-Daten abrufen
# Alle Inverter
GET /api/v1/inverters
Response: [
{
"id": 1,
"name": "DEMO - Ralf Braun",
"manufacturer": "DEMO",
"model": "Virtual 60kW System",
"created_at": "2022-06-15T00:00:00Z"
}
]
# Produktions-Statistiken
GET /api/v1/production/stats/{inverter_id}
Response: {
"total_energy_today": 45000, # Wh
"total_energy": 204000000, # Wh
"current_power": 27000, # W
"peak_power_today": 58000, # W
"operating_hours": 29760 # Stunden
}
# Produktions-Historie
GET /api/v1/production/history/{inverter_id}?hours=24
Response: {
"total": 288,
"data": [
{
"timestamp": "2025-10-23T10:00:00Z",
"current_power": 20528.69,
"total_energy": 179761.94
}
]
}
Frontend-Implementierung
Komponenten-Struktur
src/components/
├── Statistics.tsx # Haupt-Statistik-Komponente
├── PowerChart.tsx # 24h Leistungs-Chart
├── Dashboard.tsx # Dashboard mit Übersicht
└── AppBar.tsx # Navigation (inkl. Statistik-Link)
Statistics.tsx - Hauptkomponente
// Filter-State
const [filters, setFilters] = useState<FilterState>({
manufacturer: 'all',
model: 'all',
location: 'all',
year: 'all',
inverterId: 'all',
});
// Tab-Navigation
const [tabValue, setTabValue] = useState(0);
// 0 = Hersteller
// 1 = Modell
// 2 = Jahr
// 3 = Rentabilität
// Daten-Fetching
useEffect(() => {
// Inverter laden
const response = await inverterApi.getAll();
setInverters(response.data);
// Stats für jeden Inverter
const stats = await Promise.all(
inverters.map(inv => productionApi.getStats(inv.id))
);
}, [filters]);
Chart-Konfiguration
// Hersteller-Vergleich (Bar Chart)
<BarChart data={manufacturerData}>
<XAxis dataKey="name" />
<YAxis label="Energie (kWh)" />
<Bar dataKey="energy" fill="#2e7d32" />
</BarChart>
// Modell-Vergleich (Dual-Axis)
<BarChart data={modelData}>
<YAxis yAxisId="left" label="Energie" />
<YAxis yAxisId="right" orientation="right" label="Leistung" />
<Bar yAxisId="left" dataKey="energy" fill="#2e7d32" />
<Bar yAxisId="right" dataKey="avgPower" fill="#1976d2" />
</BarChart>
// Jahres-Vergleich (Line Chart)
<LineChart data={yearData}>
<Line type="monotone" dataKey="energy" stroke="#2e7d32" />
</LineChart>
Datenquellen
Demo-Daten
Die Demo-Anlage generiert realistische Daten:
# backend/app/services/inverters/demo.py
class DemoInverter:
def __init__(self):
self.config = {
"name": "DEMO - Ralf Braun Lager GmbH & Co. KG",
"rated_power": 60000, # 60 kW
"location": "Unterfranken",
"installation_date": "2022-06-15"
}
def read_current_power(self) -> float:
# Seasonal solar simulation
solar_factor = self._get_solar_position_factor()
weather_factor = self._add_realistic_variation()
return self.rated_power * solar_factor * weather_factor
Historische Daten
Generierung mit Script:
# 365 Tage historische Daten
docker compose exec backend python scripts/generate_demo_history.py --days 365
# Mit Löschung bestehender Daten
docker compose exec backend python scripts/generate_demo_history.py --days 365 --clear
# Nur letzte 30 Tage
docker compose exec backend python scripts/generate_demo_history.py --days 30
Verwendungsszenarien
Szenario 1: Hersteller-Vergleich
Ziel: Welcher Hersteller ist am effizientesten?
Vorgehen: 1. Navigation: Dashboard → Statistiken → Hersteller-Vergleich 2. Filter: Alle Hersteller 3. Vergleich: Ø Energie pro Anlage 4. Interpretation: Höherer Durchschnitt = Bessere Effizienz
Beispiel-Ergebnis:
Szenario 2: Modell-Evaluation
Ziel: Welches Modell für Neuinstallation wählen?
Vorgehen: 1. Navigation: Dashboard → Statistiken → Modell-Vergleich 2. Filter: Hersteller = SMA 3. Vergleich: Energie + aktuelle Leistung 4. Interpretation: Beste Balance zwischen Energie und Leistung
Beispiel-Ergebnis:
Szenario 3: ROI-Analyse
Ziel: Lohnt sich eine Neuinstallation?
Vorgehen: 1. Navigation: Dashboard → Statistiken → Rentabilität 2. Filter: Installationsjahr = 2022 3. Analyse: Umsatz/Jahr 4. Berechnung: Amortisation = Kosten / Umsatz_pro_Jahr
Beispiel-Berechnung:
Anlage 2022:
- Anschaffung: 60.000€
- Umsatz/Jahr: 7.200€
- Amortisation: 60.000€ / 7.200€ = 8,3 Jahre
- Lebensdauer: 25 Jahre
- Gewinn nach Amortisation: 16,7 Jahre × 7.200€ = 120.240€
- Gesamtrendite: 200% über Lebensdauer
Best Practices
1. Filter-Kombination
Effizient:
✅ Hersteller + Jahr (z.B. "SMA 2022")
✅ Modell + Standort (z.B. "Tripower Unterfranken")
Ineffizient:
❌ Zu viele Filter gleichzeitig (leere Ergebnisse)
❌ Einzelner Inverter + Hersteller (redundant)
2. Dateninterpretation
Korrekt:
✅ Vergleich Ø pro Anlage (bei unterschiedlicher Anzahl)
✅ Normalisierung auf Betriebsjahre
✅ Berücksichtigung von Standort/Wetter
Falsch:
❌ Absolute Zahlen ohne Kontext
❌ Vergleich unterschiedlicher Zeiträume
❌ Ignorieren von Außenfaktoren
3. Performance-Optimierung
Empfohlen:
✅ Filter setzen vor Laden
✅ Pagination bei vielen Anlagen (zukünftig)
✅ Cache für häufige Abfragen
Vermeiden:
❌ Alle Daten ohne Filter laden
❌ Zu viele API-Calls parallel
❌ Unnötige Re-Renders
Troubleshooting
Keine Statistik-Daten
Problem: "Keine Daten für die ausgewählten Filter verfügbar"
Lösung:
# 1. Prüfen: Sind Inverter vorhanden?
curl -s https://solarlog-api.karma.organic/api/v1/inverters | jq '.[] | {id, name}'
# 2. Prüfen: Gibt es Produktionsdaten?
curl -s "https://solarlog-api.karma.organic/api/v1/production/data?inverter_id=1&limit=1" | jq '.total'
# 3. Historische Daten generieren
docker compose exec backend python scripts/generate_demo_history.py --days 30
Chart zeigt NaN
Problem: Power-Werte werden als "NaN" angezeigt
Lösung:
// PowerChart.tsx bereits gefixt
const power = (item.current_power || 0) / 1000;
return {
power: isNaN(power) ? 0 : power, // NaN-Guard
};
Filter funktionieren nicht
Problem: Filter-Änderung zeigt keine Wirkung
Lösung:
// useEffect dependency prüfen
useEffect(() => {
fetchStats();
}, [inverters, filters]); // ✅ filters als Dependency!
Zukünftige Erweiterungen
Geplante Features
- Export-Funktion
- CSV/Excel-Export
- PDF-Berichte
-
E-Mail-Versand
-
Erweiterte Filter
- Datums-Range-Picker
- Multi-Select für Hersteller/Modelle
-
Gespeicherte Filter-Presets
-
Zusätzliche Charts
- Wetter-Korrelation
- Degradation-Analyse
-
Prognose-Modelle
-
KPI-Dashboard
- Custom Metrics
- Alerts & Benachrichtigungen
- Benchmark-Vergleiche
API-Erweiterungen
# Zukünftige Endpunkte
GET /api/v1/production/compare
?inverter_ids=1,2,3
&start_date=2025-01-01
&end_date=2025-12-31
GET /api/v1/statistics/aggregated
?group_by=manufacturer
&metrics=energy,power,roi
GET /api/v1/export/csv
?inverter_id=1
&format=csv
&columns=timestamp,power,energy
Zusammenfassung
Die Statistik-Funktion bietet:
✅ 5 Filter-Optionen (Hersteller, Modell, Standort, Jahr, Inverter) ✅ 4 Analyse-Ansichten (Hersteller, Modell, Jahr, ROI) ✅ 3 Chart-Typen (Bar, Line, Pie) ✅ ROI-Berechnung (mit 0,12€/kWh Basis) ✅ Responsive Design (funktioniert auf Mobile & Desktop)
Perfekt für: - Anlagenvergleiche - Investitionsentscheidungen - Performance-Monitoring - Rentabilitäts-Analysen