# Historical Weather - Energy Price Forecasting System Een machine learning systeem dat energieprijzen voorspelt op basis van weersverwachtingen voor Amersfoort, Nederland. ## Overzicht Dit project combineert historische weerdata met elektriciteitsprijzen om een XGBoost machine learning model te trainen dat toekomstige energieprijzen kan voorspellen. Het systeem genereert automatisch 72-uurs voorspellingen met visualisaties en verstuurt deze via email. ## Belangrijkste Kenmerken - **Automatische weerdata verzameling** via Open-Meteo API - **Machine learning voorspellingen** met XGBoost - **72-uurs prijsvoorspellingen** met uurlijkse granulariteit - **Geautomatiseerde email notificaties** met grafieken - **Dual-axis visualisaties** die prijzen en weersdata combineren - **Cross-platform support** (Windows en Linux/Synology NAS) ## Projectstructuur ### Hoofdscripts | Bestand | Functie | |---------|---------| | `price_forecast.py` | Hoofd voorspellingsscript - genereert prijsvoorspellingen met grafieken en verstuurt emails | | `voorspel_advanced.py` | Geavanceerde Windows versie met dual Y-axis grafieken (prijs + weerdata) | | `voorspel_advanced_linux.py` | Linux-specifieke geavanceerde voorspellingsscript | | `update_weather.py` | Incrementele weerdata updater - haalt recente weerdata op en slaat op in MySQL | | `jaar_weerdata.py` | Historische weerdata downloader - haalt volledige jaren weerdata op van Open-Meteo | | `train_model1.5.py` | Windows ML model trainer - traint XGBoost model met 2024-2025 data | | `train_model_linux.py` | Linux ML model trainer - identiek aan Windows versie | ### Data Bestanden - `training_set_2024_2025.csv` - Training dataset met weer- en prijsdata - `price_forecast_model_v1_5.json` - Getraind XGBoost model (10 MB) - `*_uurlijks.csv` - Uurlijkse weerdata voor Amersfoort (2024-2025) - `*_dagelijks.csv` - Dagelijkse weerdata voor Amersfoort (2024-2025) ## Technologieën ### Python Libraries - **XGBoost** - Machine learning (gradient boosting voor regressie) - **Pandas** - Data manipulatie en analyse - **NumPy** - Numerieke berekeningen - **Scikit-learn** - Model evaluatie metrics - **Matplotlib** - Data visualisatie en grafiek generatie - **MySQL Connector** - Database connectiviteit - **Requests** - HTTP API calls - **SQLite3** - Lokale database opslag - **Python Holidays** - Feestdagen detectie (Nederland) - **SMTP** - Email notificaties ### Externe APIs - **Open-Meteo API** - Gratis weerdata (archief en voorspellingen) ### Databases - **MySQL** - Opslag voor weerdata (`amersfoort_weer_uurlijks`) en energieprijzen (`dynamic_price_data`) - **SQLite** - Lokale weerdata opslag ## Installatie ### Vereisten ```bash pip install xgboost pandas numpy scikit-learn matplotlib mysql-connector-python requests holidays ``` ### Database Configuratie Het project gebruikt MySQL voor data opslag. Configureer de volgende databases: - `energy_prices` - Voor prijsdata - `alfen` - Voor weerdata Database credentials zijn embedded in de Python scripts (pas deze aan naar jouw configuratie). ## Gebruik ### 1. Historische Weerdata Verzamelen Download historische weerdata vanaf 1940 tot heden: ```bash python jaar_weerdata.py ``` Dit script: - Haalt data op van Open-Meteo Archive API - Slaat uurlijkse en dagelijkse data op in SQLite - Locatie: Amersfoort (52.15°N, 5.39°E) ### 2. Dagelijkse Weerdata Update Update de weerdata incrementeel: ```bash python update_weather.py ``` Dit script: - Haalt recente weerdata op via Open-Meteo Forecast API - Gebruikt upsert logica voor MySQL updates - Voorkomt duplicaten ### 3. Model Trainen Train het XGBoost model met historische data: ```bash # Windows python train_model1.5.py # Linux python train_model_linux.py ``` Het model gebruikt de volgende features: - **Weerdata**: temperatuur, luchtvochtigheid, druk, wind, bewolking, zonnestraling, neerslag - **Tijd-gerelateerd**: uur van de dag, dag van de week, maand, dag van het jaar - **Feestdagen indicator** - **Lag features**: prijzen van 1 uur en 24 uur geleden - **Rolling averages**: 3-uurs temperatuur gemiddelde, 6-uurs prijs gemiddelde - **One-hot encoded**: dag/uur features (31 features totaal) Model parameters: - 1000 estimators - Learning rate: 0.01 - Early stopping enabled ### 4. Prijsvoorspellingen Genereren Genereer 72-uurs prijsvoorspellingen: ```bash # Basis versie python price_forecast.py # Geavanceerde versie (Windows) python voorspel_advanced.py # Geavanceerde versie (Linux) python voorspel_advanced_linux.py ``` Het voorspellingsscript: - Haalt laatste 30 uur werkelijke prijzen op uit MySQL - Haalt toekomstige 72 uur weersverwachtingen op - Genereert prijsvoorspellingen met het getrainde model - Creëert dual-axis grafieken met: - **Linkse Y-as**: Voorspelde prijzen (blauw) + Werkelijke prijzen (oranje) - **Rechtse Y-as**: Temperatuur (rood) en Windsnelheid (groen) - Verstuurt email met PNG grafiek en statistieken - Toont laagste/hoogste voorspelde prijzen met tijdstippen ## Output Voorbeeld Het systeem genereert visualisaties die het volgende tonen: - Historische prijzen (oranje lijn) - Voorspelde prijzen voor 72 uur (blauwe lijn) - Temperatuur verloop (rode lijn, rechtse as) - Windsnelheid (groene lijn, rechtse as) - Statistieken over laagste en hoogste prijzen ## Email Notificaties Automatische emails worden verstuurd met: - PNG grafiek van voorspellingen - Laagste voorspelde prijs en tijdstip - Hoogste voorspelde prijs en tijdstip - Formatted data tabel SMTP configuratie: - Server: 192.168.178.201:587 - Sender: sftpuser@markkors.nl ## Data Flow ``` Open-Meteo API ↓ MySQL Database (weer + prijzen) ↓ Training Data CSV ↓ XGBoost Model Training ↓ Trained Model JSON ↓ Forecasting Script (72-uur voorspellingen) ↓ Email met PNG Grafieken ``` ## Projectcontext - **Taal**: Nederlands (code comments en variabele namen) - **Locatie**: Amersfoort, Nederland - **Tijdzone**: Europe/Amsterdam (UTC) - **Integratie**: Onderdeel van een energiemanagementsysteem (Alfen hardware/software) - **Deployment**: Multi-platform (Windows en Linux/Synology NAS) ## Recente Ontwikkelingen Volgens git history: - Basis forecasting functionaliteit - Grafieken en email functionaliteit toegevoegd - Linux (Synology NAS) deployment geoptimaliseerd - Zonnestraling feature toegevoegd - Werkelijke prijzen in voorspellingen geïntegreerd - Model versie 1.5 met verbeterde features ## Licentie Dit is een persoonlijk project voor energiemanagement en -optimalisatie. ## Contact Mark Kors - sftpuser@markkors.nl