Overzicht van alle databronnen en API's die in dit dashboard worden gebruikt
| Organisatie | NED.nl — Nationaal Energiedashboard (beheerd door Gasunie / TenneT) |
| API URL | https://api.ned.nl/v1 |
| Authenticatie | X-AUTH-TOKEN header (API key vereist) |
| Data formaat | JSON (REST API) |
| Caching | Historische data wordt lokaal opgeslagen in MySQL. Laatste 2 dagen worden altijd ververst voor correcties. |
| Pagina | Data | API Parameters |
|---|---|---|
| Gas | Gasvoorraad (opslag) | activity=7, type=28 (GasMix Storage) |
| Gasverbruik | activity=2, type=23 (NaturalGas Consuming) & activity=2, type=28 (GasMix Consuming) |
|
| Gasproductie | activity=1, type=28 (GasMix Producing) |
|
| Biomethaan (groengas) | activity=1, type=24 (Biomethane Producing) & activity=2, type=24 (Consuming) |
|
| Elektriciteit | Totale productie | activity=1, type=27 (ElectricityMix Producing) |
| Productie per bron | activity=1 met type: 1 (Wind onshore), 17 (Wind offshore), 2 (Zon), 18 (Aardgas), 19 (Kolen), 20 (Kernenergie), 21 (Afval), 25 (Biomassa), 26 (Overig) |
|
| Import | activity=3, type=27 (ElectricityMix Importing) |
|
| Export | activity=4, type=27 (ElectricityMix Exporting) |
|
| Voorspellingen | Wind voorspelling | activity=1, type=1 (Wind onshore) & type=17 (Wind offshore), classification=1 (Forecast) |
| Zon voorspelling | activity=1, type=2 (Solar), classification=1 (Forecast) |
|
| Alle bronnen voorspelling | Alle productie-types met classification=1 (Forecast), granularity=6 (Day) |
Het Nationaal Energiedashboard (NED) is een initiatief van de Nederlandse overheid en biedt realtime inzicht in de energiehuishouding van Nederland. Data wordt verzameld van netbeheerders (TenneT, Gasunie), producenten en marktpartijen.
De data omvat gas (opslag, productie, verbruik), elektriciteit (productie per bron, import, export) en voorspellingen voor hernieuwbare energie.
Bezoek NED.nl| Organisatie | XADI (aggregator), oorspronkelijke bron: ENTSO-E Transparency Platform / EPEX Spot |
| API URL | https://dap.xadi.eu/api/nl |
| Authenticatie | Geen (publieke API) |
| Rate limit | 100 requests/minuut per IP |
| Data formaat | JSON (REST API) |
| Caching | Alle opgehaalde uurprijzen worden lokaal opgeslagen in MySQL voor historisch overzicht. Prijzen van vandaag worden elke keer ververst. |
| Endpoint | Beschrijving | Parameters |
|---|---|---|
/api/nl/today |
Uurprijzen van vandaag (24 uur) | autoVat=true (21% BTW) |
/api/nl/next24h |
Uurprijzen volgende 24 uur (incl. morgen) | autoVat=true (21% BTW) |
De stroomprijzen zijn day-ahead prijzen van de EPEX Spot energiebeurs. Dit zijn de groothandelsprijzen waartegen energieleveranciers stroom inkopen. Ze worden dagelijks rond 13:00 CET gepubliceerd voor de volgende dag.
De oorspronkelijke bron is het ENTSO-E Transparency Platform (European Network of Transmission System Operators for Electricity). XADI aggregeert deze data in een eenvoudige REST API.
| Apparaat | HomeWizard P1 Meter (HWE-P1) |
| Lokaal IP | 192.168.178.243 |
| API endpoint | /api/v1/data |
| Protocol | HTTP GET — JSON response (geen authenticatie) |
| Slimme meter | Kaifa AIFA-METER (DSMR 5.0) |
| Sync frequentie | Elke 15 minuten (96 metingen/dag) |
| Veld | Beschrijving | Eenheid |
|---|---|---|
total_power_import_kwh | Totaal stroom import (T1 + T2) | kWh |
total_power_import_t1/t2_kwh | Import per tarief (dal / normaal) | kWh |
total_power_export_kwh | Totaal teruglevering | kWh |
active_power_w | Huidig vermogen op moment van meting | W |
active_voltage_l1_v | Spanning op L1 | V |
total_gas_m3 | Totaal gasverbruik | m³ |
| API (forecast) | https://api.open-meteo.com/v1/forecast |
| API (archief) | https://archive-api.open-meteo.com/v1/archive |
| Parameters | sunrise, sunset, daylight_duration, sunshine_duration |
| Locatie | Alkmaar (52.6324°N, 4.7534°E) |
| Tijdzone | Europe/Amsterdam |
| Authenticatie | Geen (gratis API, geen key vereist) |
| Sync frequentie | Dagelijks om 06:00 UTC |
| Historisch bereik | Backfill vanaf 1 januari 2024 |
| Protocol | MQTT (Mosquitto broker) |
| Broker IP | 192.168.178.222 |
| Broker poort | 1883 |
| MQTT topic | zigbee2mqtt/Woonkamer |
| Bridge | Zigbee2MQTT v2.8.0-dev |
| Coördinator | EmberZNet 7.4.5 [GA] |
| Sensor model | Tuya IH-K009 (temperatuur & luchtvochtigheid) |
| Sensor naam | Woonkamer |
| Publicatie | Bij temperatuurverandering (event-driven, niet periodiek) |
| Opslag | Persistent MQTT subscriber (Docker service), opgeslagen bij elk nieuw bericht |
| Velden | temperature, humidity, battery, voltage, linkquality |
| Organisatie | EEX — European Energy Exchange (onderdeel van Deutsche Börse) |
| Data URL | TTF_NGP_60_Days.csv |
| Authenticatie | Geen (publiek beschikbare CSV download) |
| Data formaat | CSV (puntkomma-gescheiden) |
| Index | TTF Neutral Gas Price (NGP) — dagelijkse referentieprijs voor aardgas |
| Eenheid | EUR/MWh (ook omgerekend naar €/m³ en ct/kWh) |
| Bereik | Laatste 60 dagen |
| Caching | Dagprijzen worden lokaal opgeslagen in MySQL. Bestaande prijzen worden bijgewerkt bij wijzigingen. |
| Veld | Beschrijving | Eenheid |
|---|---|---|
Delivery date |
Leveringsdatum | YYYY-MM-DD |
Index Value |
Gemiddelde gasprijs (TTF NGP) | €/MWh |
Index Volume |
Totaal handelsvolume | MWh |
Number of trades |
Aantal transacties | stuks |
| Conversie | Formule |
|---|---|
€/MWh → €/m³ |
€/MWh × 0,009769 (1 m³ H-gas ≈ 9,769 kWh) |
€/MWh → ct/kWh |
€/MWh ÷ 10 |
De TTF (Title Transfer Facility) is het belangrijkste Europese handelspunt voor aardgas, gevestigd in Nederland. De TTF-prijs geldt als referentie voor de Europese gasmarkt.
De NGP (Neutral Gas Price) is een gewogen gemiddelde van alle transacties op een handelsdag. Dit is de commodityprijs — eindgebruikers betalen daarbovenop energiebelasting, netbeheerkosten en leveranciersmarge.
| Organisatie | Koninklijk Nederlands Meteorologisch Instituut (KNMI) |
| API URL | https://www.daggegevens.knmi.nl/klimatologie/daggegevens |
| Authenticatie | Geen (publiek, open data — CC BY 4.0 licentie) |
| HTTP methode | POST met form data |
| Data formaat | JSON (ook CSV beschikbaar) |
| Meetstations | 38 KNMI-stations door heel Nederland — selecteerbaar via dropdown. Standaard: Berkhout (249, dichtst bij Alkmaar) |
| Vertraging | ~2 dagen (data wordt achteraf gevalideerd) |
| Caching | Alle dagtemperaturen en berekende graaddagen worden lokaal opgeslagen per station. Laatste 3 dagen worden ververst voor correcties. |
| Variabele | Beschrijving | Eenheid |
|---|---|---|
TG |
Etmaalgemiddelde temperatuur | 0.1 °C |
TN |
Minimumtemperatuur | 0.1 °C |
TX |
Maximumtemperatuur | 0.1 °C |
| Formule | Beschrijving |
|---|---|
max(0, 18 - TG) |
Graaddagen per dag — verschil tussen stookgrens (18°C) en gemiddelde temperatuur |
GD × seizoensfactor |
Gewogen graaddagen — nov-feb: ×1,1 | mrt+okt: ×1,0 | apr-sep: ×0,8 |
Graaddagen zijn een maat voor de verwarmingsbehoefte. Hoe kouder het is, hoe meer graaddagen en hoe meer gas er wordt verstookt. De stookgrens is 18°C — daarboven wordt aangenomen dat er niet gestookt hoeft te worden.
Gewogen graaddagen houden rekening met seizoenseffecten: in de winter (nov-feb) is de verwarmingsbehoefte per graaddag hoger door kortere dagen en lagere zonnestraling, vandaar factor 1,1.
Er zijn 38 KNMI-stations beschikbaar. Standaard is Berkhout (station 249) geselecteerd, het station dichtst bij Alkmaar. Via het dropdown menu kan elk ander station worden gekozen.
KNMI Daggegevens| Organisatie | Open-Meteo — open-source weerdata aggregator |
| API URL | https://api.open-meteo.com/v1/forecast |
| Parameters | hourly=temperature_2m,apparent_temperature,windspeed_10m,windgusts_10m,shortwave_radiation |
| Frequentie | Elke 2 uur bijgewerkt via cron |
| Licentie | Gratis, geen API-key nodig, CC BY 4.0 |
| Verrijking |
Per uur wordt berekend: • Effectieve temperatuur (wind-gecorrigeerd voor warmtepomp) • COP op basis van warmtepomp EN14825 curve • Kosten per kWh warmte (airco vs gas) • Advies: goedkoopste verwarmingsmethode per uur |
Door per uur de temperatuur, windsnelheid en zonnestraling te combineren met de actuele stroomprijzen en gasprijs, kan het systeem een optimaal verwarmingsschema berekenen.
Wind-correctie: Sterke wind (>10 km/h) verlaagt de effectieve temperatuur voor de warmtepomp outdoor unit, waardoor de COP daalt.
Zonnestraling: Directe zonnestraling door ramen levert gratis warmte (solar gain) op, waardoor verwarming mogelijk uitgesteld kan worden.
| Organisatie | Open-Meteo — open-source weerdata aggregator |
| API URL | https://api.open-meteo.com/v1/forecast |
| Authenticatie | Geen (gratis, open API — geen API key vereist) |
| Licentie | CC BY 4.0 (niet-commercieel gebruik) |
| Data formaat | JSON (REST API, GET request) |
| Resolutie | 1-11 km, uurlijks bijgewerkt |
| Locatie | Gebruikt coördinaten van het geselecteerde KNMI-station (lat/lon) |
| Caching | Geen — data wordt realtime opgehaald bij elk pageview |
| Parameter | Beschrijving | Scope |
|---|---|---|
current=temperature_2m |
Huidige temperatuur op 2 meter hoogte | Realtime |
current=apparent_temperature |
Gevoelstemperatuur (windchill/heat index) | Realtime |
daily=temperature_2m_mean |
Verwachte daggemiddelde temperatuur | Vandaag + morgen |
daily=temperature_2m_min |
Verwachte minimumtemperatuur | Vandaag + morgen |
daily=temperature_2m_max |
Verwachte maximumtemperatuur | Vandaag + morgen |
De graaddagen worden berekend op basis van de verwachte daggemiddelde temperatuur van Open-Meteo, met dezelfde formule als de historische KNMI-data:
max(0, 18 - daggemiddelde). Dit geeft een actueel beeld van vandaag en morgen, terwijl KNMI ~2 dagen vertraging heeft.
Open-Meteo combineert weermodellen van nationale weerservices (waaronder KNMI, DWD, NOAA) in één gratis API. De voorspellingen worden elk uur bijgewerkt.
In dit dashboard wordt Open-Meteo gebruikt om actuele graaddagen te tonen voor vandaag en morgen. De coördinaten worden automatisch gekoppeld aan het geselecteerde KNMI-station.
Dit vult het gat van de KNMI-vertraging op: KNMI levert gevalideerde historische data (~2 dagen oud), Open-Meteo levert de actuele voorspelling.
Open-Meteo| Framework | Symfony 7 (PHP) |
| Database | MySQL 8 (Doctrine ORM) |
| HTTP Client | Symfony HttpClient |
| Containers | Docker Compose (PHP-FPM, Nginx, MySQL, Cron) |
| Cron jobs | Docker cron container met Symfony Console commands |
| UI Framework | AdminLTE 3 + Bootstrap 5 |
| Grafieken | ApexCharts 3.44 |
| Iconen | Font Awesome 6 |
| Lettertype | Inter (Google Fonts) |
| Tabel | Inhoud | Bron | Update strategie |
|---|---|---|---|
gas_utilization |
Gas & elektriciteit data (voorraad, productie, verbruik, import, export) | NED.nl API | Historisch bewaard, laatste 2 dagen worden ververst |
electricity_price |
Uurlijkse stroomprijzen (excl/incl BTW, EUR/MWh) | XADI / ENTSO-E | Historisch bewaard, vandaag wordt altijd ververst |
degree_days |
Dagtemperaturen en graaddagen (gem/min/max °C, GD, gewogen GD) | KNMI | Historisch bewaard, laatste 3 dagen worden ververst |
gas_price |
TTF dagprijzen (€/MWh, volume, aantal trades) | EEX | Historisch bewaard, bestaande prijzen worden bijgewerkt |
energy_reading |
Periodieke meterstanden en vermogensmetingen (stroom, gas, spanning) | HomeWizard P1 | Elke 15 min opgeslagen, historisch bewaard |
daylight_reading |
Dagelijkse zonsopgang, zonsondergang, daglicht- & zonneschijnduur | Open-Meteo | Dagelijks bijgewerkt, historisch vanaf 2024-01-01 |
temperature_reading |
Binnentemperatuur & luchtvochtigheid (Woonkamer) | Zigbee2MQTT (MQTT) | Bij elke verandering opgeslagen, historisch bewaard |
heat_pump |
Warmtepompspecificaties (COP, SCOP, capaciteit, afmetingen) | Handmatig | Eenmalig opgeslagen, permanent |
heat_pump_performance |
COP/capaciteit per buitentemperatuur (EN14825 meetpunten) | Eurovent | Eenmalig opgeslagen, permanent |
hourly_weather_forecast |
48-uur voorspelling: temperatuur, wind, zon, COP per uur & advies | Open-Meteo + berekend | Elke 2 uur bijgewerkt, ouder dan 30 dagen opgeschoond |
daily_energy_summary |
Dagelijks snapshot: verbruik (kWh, m³), prijzen, kosten, weer, COP, graaddagen | Lokale aggregatie | Dagelijks om 23:30 UTC — bouwt dataset op voor kostenvoorspelling |
cron_job_log |
Uitvoeringslog van cronjobs (start, eind, status, duur, fouten) | Intern | Elke cronjob executie wordt gelogd |
| Job | Symfony command | Schema | Beschrijving |
|---|---|---|---|
| NED.nl Gas | app:sync:ned-gas |
0 */6 * * * |
Gasvoorraad, verbruik, productie & biomethaan |
| NED.nl Elektriciteit | app:sync:ned-electricity |
15 */6 * * * |
Productie per bron, import & export |
| Stroomprijzen | app:sync:electricity-prices |
0 */2 * * * |
Day-ahead EPEX Spot uurprijzen |
| KNMI Graaddagen | app:sync:knmi |
0 8 * * * |
Temperatuur & graaddagen voor alle actieve stations |
| Uurlijkse weersverwachting | app:sync:hourly-forecast |
30 */2 * * * |
48-uur temperatuur, wind & zon + COP berekening per uur |
| Dagelijkse samenvatting | app:sync:daily-summary |
30 23 * * * |
Dagelijks energiesnapshot — basis voor kostenvoorspelling |
| TTF Gasprijs | app:sync:gas-prices |
0 7 * * * |
TTF Neutral Gas Price — dagprijs van EEX |
| HomeWizard P1 | app:sync:homewizard |
*/15 * * * * |
Slimme meter — elektriciteit & gasverbruik (elke 15 min) |
| Daglicht | app:sync:daylight |
0 6 * * * |
Zonsopgang, zonsondergang, daglicht & zonneschijn (dagelijks om 06:00 UTC) |
| MQTT Temperatuur | app:mqtt:subscribe |
Docker service (continu) | Persistent MQTT subscriber — slaat temperatuurmetingen woonkamer op bij elke verandering |
| Alles | app:sync:all |
Handmatig | Draait alle bovenstaande sync commands achter elkaar |
Het verwarmingsadvies op het dashboard berekent of het goedkoper is om gas te stoken of de warmtepomp (airco) te gebruiken. De berekening gebruikt real-time beursprijzen (EPEX/TTF) aangevuld met de officiële energiebelasting en BTW.
| Bron | Belastingdienst / Rijksoverheid |
| Peildatum | 1 januari 2026 |
| Elektriciteit (0-10.000 kWh) | € 0,09161/kWh (excl. BTW) |
| Aardgas (0-170.000 Nm³) | € 0,60066/m³ (excl. BTW) |
| BTW | 21% |
| Belastingvermindering | € 628,96/jaar (niet meegenomen in marginale kosten) |
De volgende parameters zijn instelbaar via .env in de Symfony-applicatie:
| Parameter | Standaard | Beschrijving |
|---|---|---|
ENERGY_TAX_ELECTRICITY |
0.09161 | Energiebelasting stroom (€/kWh excl. BTW) |
ENERGY_TAX_GAS |
0.60066 | Energiebelasting gas (€/m³ excl. BTW) |
SUPPLIER_MARKUP_ELECTRICITY |
0.025 | Leveranciersopslag stroom (€/kWh excl. BTW) |
SUPPLIER_MARKUP_GAS |
0.065 | Leveranciersopslag gas (€/m³ excl. BTW) |
VAT_PERCENTAGE |
21 | BTW percentage |
BOILER_EFFICIENCY |
0.90 | Ketelrendement HR-ketel (90%) |
Stroom all-in = (EPEX_spot + Energiebelasting + Leveranciersopslag) × (1 + BTW/100)
Gas all-in/m³ = (TTF_spot/m³ + Energiebelasting + Leveranciersopslag) × (1 + BTW/100)
Warmtekosten gas = Gas_all_in/m³ ÷ (9,769 kWh/m³ × Ketelrendement)
Warmtekosten airco = Stroom_all_in ÷ COP_bij_buitentemp
COP: lineair geïnterpoleerd uit warmtepomp performance-curve (EN14825)
Onder 0°C: 10% defrost-correctie
Onder −6°C: airco kan niet verwarmen → advies = gas
.env naar je eigen contractvoorwaarden.
De energiebelasting wijzigt jaarlijks per 1 januari.
Dit dashboard biedt twee methoden om alle energiedata beschikbaar te stellen aan AI assistenten (ChatGPT, Claude, Cursor, etc.): een MCP server (Model Context Protocol) en REST API endpoints.
| Protocol | MCP v2024-11-05 (JSON-RPC 2.0 over stdio) |
| Server naam | energie-dashboard-mcp |
| Versie | 1.0.0 |
| Command | php bin/console app:mcp:serve |
| Transport | stdio (stdin/stdout) |
| Capabilities | Tools + Resources |
{
"mcpServers": {
"energie-dashboard": {
"command": "docker",
"args": [
"compose", "-f", "/home/peter/project/docker-compose.yml",
"exec", "-T", "php",
"php", "bin/console", "app:mcp:serve", "--no-interaction"
]
}
}
}
| Tool | Parameters | Beschrijving |
|---|---|---|
get_summary |
— | Actueel overzicht: daglicht, temperatuur, verbruik, prijzen, graaddagen |
get_gas_data |
days |
Gasopslag, verbruik, productie & biomethaan (NED.nl) |
get_electricity_data |
days |
Elektriciteitsproductie per bron, import & export (NED.nl) |
get_electricity_prices |
days |
EPEX Spot uurprijzen vandaag/morgen + daggemiddelden (XADI) |
get_gas_prices |
days |
TTF day-ahead gasprijzen in EUR/MWh, EUR/m³, cent/kWh (EEX) |
get_degree_days |
days, station |
Graaddagen, live weer & maandtotalen (KNMI) |
get_forecasts |
— | Productievoorspellingen: wind, zon, totaal, import, export (7 dagen) |
get_house_data |
— | Woninggegevens: BAG, energielabel, buurtstatistieken (PDOK/CBS) |
get_heat_pump |
— | Toshiba Seiya+ 4.2 kW — specs, SCOP, COP-curve (EN14825) |
get_energy_readings |
days |
Slimme meter: huidig vermogen, verbruik vandaag, dagelijks (HomeWizard P1) |
get_temperature |
days |
Binnentemperatuur woonkamer: huidig, uurlijks, dagelijks (Zigbee/MQTT) |
get_daylight |
days |
Zonsopgang, zonsondergang, daglicht- & zonneschijnduur (Open-Meteo) |
get_heating_advice |
— | Verwarmingsadvies: gas vs. airco vergelijking incl. energiebelasting, COP, defrost |
| Base URL | http://localhost:8082/api |
| Formaat | JSON |
| Authenticatie | Geen (lokaal netwerk) |
| Methode | GET (alle endpoints) |
| Endpoint | Parameters | Beschrijving |
|---|---|---|
GET /api/summary |
— | Actueel overzicht van alle data (beste startpunt) |
GET /api/gas |
?days=30 |
Gasopslag, verbruik, productie, biomethaan |
GET /api/electricity |
?days=30 |
Elektriciteitsproductie per bron, import, export |
GET /api/electricity-prices |
?days=30 |
Uurprijzen vandaag/morgen + daggemiddelden |
GET /api/gas-prices |
?days=60 |
TTF gasprijzen (EEX) |
GET /api/degree-days |
?days=30&station=249 |
Graaddagen + live weer |
GET /api/forecasts |
— | Productievoorspellingen (7 dagen) |
GET /api/house |
— | Woninggegevens (BAG/CBS) |
GET /api/heat-pump |
— | Warmtepomp specificaties + COP-curve |
GET /api/energy |
?days=30 |
Slimme meter — live + historisch verbruik |
GET /api/temperature |
?days=7 |
Binnentemperatuur woonkamer |
GET /api/daylight |
?days=365 |
Zonsopgang/zonsondergang/daglichttijden |
GET /api/heating-advice |
— | Verwarmingsadvies gas vs. airco (incl. tariefopbouw) |
Er zijn twee manieren om dit dashboard aan ChatGPT te koppelen:
/api/summary (of meerdere endpoints)/home/peter/project/mcp-config.json.cursor/mcp.json in je projectroot~/Library/Application Support/Claude/claude_desktop_config.json (macOS) of %APPDATA%\Claude\claude_desktop_config.json (Windows)curl -s http://localhost:8082/api/summary | python3 -m json.tool
# MCP server testen (JSON-RPC over stdin)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | \
docker compose -f /home/peter/project/docker-compose.yml exec -T php php bin/console app:mcp:serve --no-interaction
# Alle tools bekijken
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | \
docker compose -f /home/peter/project/docker-compose.yml exec -T php php bin/console app:mcp:serve --no-interaction