API Solar — Backend für Dateningestion, Normalisierung und Aggregation von Photovoltaikdaten
Diese Backend-API verwaltet reale Daten einer Photovoltaikanlage in Produktion.
Ihre Funktion ist es, verstreute Informationen aus mehreren externen Quellen zu zentralisieren, heterogene Formate zu normalisieren und konsolidierte Energiedaten bereitzustellen, die von Frontend-Anwendungen konsumiert werden können.
Das System ist durch Authentifizierung, Rollen und Berechtigungen geschützt, beinhaltet Mechanismen für Datensicherungen und ist für den Betrieb mit großen Mengen realer Daten ausgelegt.
Das Problem
Die Daten einer Photovoltaikanlage sind nicht zentralisiert:
- Stromanbieter (Iberdrola)
- Netzbetreiber (REE)
- Wechselrichter der Anlage
Jede Quelle:
- liefert unterschiedliche CSV-Dateien,
- mit unterschiedlichen Strukturen, Feldern und Formaten,
- und ohne gemeinsames Datenmodell.
Außerdem:
- einige CSVs enthalten Messungen alle 5 Minuten, andere liefern stündliche Aggregationen,
- und das Frontend benötigt konsistente, vergleichbare Daten, unabhängig von der Quelle.
Die Lösung
Ich habe eine API entworfen, die als Integrations-, Validierungs- und Normalisierungsschicht für Energiedaten fungiert und das Frontend von der Komplexität und Heterogenität der Datenquellen isoliert.
Erweiterte CSV-Ingestion
- Unterstützt 4 verschiedene CSV-Formate von unterschiedlichen Anbietern.
- Identifiziert automatisch den Dateityp und die Struktur.
- Transformiert jede Quelle in ein vereinheitlichtes Datenmodell.
📊 Im realen Einsatz:
- Es wurden mehr als 1.000 CSV-Dateien verarbeitet
- Aus mehreren Quellen und Formaten
- Mit vollständigen, erfolgreichen Imports in die Datenbank.
Normalisierung und Aggregation
Die Daten werden immer als stündliche Daten gelesen, transformiert und persistiert, unabhängig von Granularität oder ursprünglicher CSV-Struktur.
Beim Laden:
- wird die erhaltene Datei analysiert,
- redundante Informationen des CSV-Anbieters gefiltert,
- und die stündliche Datenbasis konsolidiert, die in der Datenbank persistiert wird.
Diese Transformationslogik ist in der Datei-Upload-Schicht im Ordner uploads implementiert und nutzt die Python-Fähigkeiten zur Verarbeitung von Dateien und Daten.
Aus der persistierten Stundendatenbasis bietet die API verschiedene Ansichten je nach Abfrage:
- Tägliche Daten
Man fordert Jahr–Monat–Tag an und die API liefert 24 stündliche Werte.
- Monatliche Daten
Man fordert Jahr–Monat an und die API liefert 28, 29, 30 oder 31 tägliche Werte, je nach Monat und Jahr.
- Jährliche Daten
Man fordert Jahr an und die API liefert 12 monatliche Werte.
Die API und SQL-Views sind darauf vorbereitet, unterschiedlich auf dieselbe Abfrage zu reagieren, wie bei Monatsabfragen, wo die Anzahl der Ergebnisse dynamisch variiert.
Verwaltete Metriken
- Verbrauch der Anlage
- Photovoltaikproduktion
- Energiebilanz mit dem Netz:
- gekaufte Energie
- exportierte Energie
Die Architektur ist für eine Batterie vorbereitet, auch wenn diese Anlage keine hat:
- Energiebilanz mit Batterie:
- gespeicherte Energie
- verbrauchte Energie
Performance
- es werden SQL-Views verwendet, die häufige Aggregationen beschleunigen,
- konsolidierte Daten werden persistiert und vermeiden wiederholte Berechnungen,
- die Datenbank fungiert als einzige Quelle der Wahrheit auf Basis der Stundendaten.
Sicherheit, Rollen und Zugriffskontrolle
Die API ist vollständig geschützt:
- Authentifizierung über Login und JWT
- Rollen- und Berechtigungsverwaltung
Nur Benutzer mit Administratorrolle dürfen:
- die Datenbank verwalten
- Daten laden oder wiederherstellen
- sensible Operationen ausführen
Die Sicherheitslogik ist klar von der Geschäftslogik getrennt.
Backups und Datensicherung
Das System enthält explizite Mechanismen zum Schutz von Daten:
- Export der Datenbank in JSON-Dateien
- Import von JSON-Dateien für Wiederherstellung oder Migration
- Diese Dateien dienen als Sicherungs-Kopien der verarbeiteten Informationen
Das ermöglicht:
- historische Daten zu schützen,
- Migrationen zu erleichtern,
- und operative Risiken zu reduzieren.
Architektur und technischer Stack
- Sprache: Python
- Framework: Flask
- Datenbank: MySQL
- ORM: SQLAlchemy
- Migrationen: Alembic / Flask-Migrate
- Authentifizierung: Flask-JWT-Extended
- Testing: pytest, pytest-mock
Abhängigkeiten werden via requirements.txt verwaltet.
Betrieb und Deployment
- API deployed auf PythonAnywhere
- Script deploy.sh zur Automatisierung von Deployments nach dem Update des Repos
- System für reale Produktion ausgelegt, nicht als Demo
Was dieses Projekt zeigt
Dieses Projekt zeigt meine Fähigkeit,:
- Entwurf von Backend-APIs für reale Daten
- Integration heterogener externer Quellen
- Verarbeitung großer Informationsmengen
- Implementierung von Sicherheit, Rollen und Zugriffskontrolle
- Entwurf von Systemen, die wachsen und sich entwickeln
- Betrieb und Wartung von Software in Produktion
Projektbilder



