Hoe combineer je KNMI-data met lokale IoT-sensoren? Stappenplan
Een praktisch stappenplan voor het opzetten van een hybride weerdata-architectuur: KNMI EDR API-integratie, schema-mapping, kwaliteitscontrole en een live dashboard dat beide bronnen combineert.
Kort antwoord
KNMI-data is beschikbaar via de gratis EDR API (OGC-standaard, 10-minuut resolutie). Lokale IoT-sensoren (bijv. Ecowitt) leveren data via een eigen cloud-API. De combinatie vereist vijf stappen: (1) beide APIs aanroepen, (2) data normaliseren naar een gedeeld schema, (3) tijdstempels uitlijnen, (4) ruimtelijke en temporele kwaliteitscontrole uitvoeren, en (5) gecombineerde data opslaan en visualiseren. MeteoA voert dit volledig geautomatiseerd uit in een 10-minuut GitHub Actions pipeline.
Stap 1 — KNMI EDR API aanroepen
KNMI biedt weerdata aan via de Environmental Data Retrieval (EDR) API, een OGC-standaard REST API. Toegang is gratis via een API-sleutel van het KNMI Data Platform.
| Gegeven | Waarde |
|---|---|
| Basis-URL | https://api.dataplatform.knmi.nl/edr/ |
| Authenticatie | API-sleutel via header Authorization: Bearer <key> |
| Resolutie | 10 minuten (automatische stations) |
| Vertraging | 5–20 minuten (verwerkingslag) |
| Formaat | CoverageJSON, GeoJSON |
| Registratie | dataplatform.knmi.nl |
Aandachtspunt: KNMI heeft een verwerkingsachterstand van 5–20 minuten. Implementeer retry-logica: als het meest recente tijdstip nog niet beschikbaar is, wacht dan 5 minuten en probeer opnieuw (maximaal 3 pogingen).
Stap 2 — Lokale IoT-sensor API aanroepen
Ecowitt-stations leveren historische data via de Ecowitt historische API. MeteoA gebruikt bewust de historische API (dag-voor-dag requests) in plaats van de real-time push-API, omdat deze robuuster is bij tijdelijke verbindingsuitval.
| Gegeven | Waarde (Ecowitt) |
|---|---|
| Endpoint | https://api.ecowitt.net/api/v3/device/history |
| Authenticatie | application_key + api_key parameters |
| Aanroepstrategie | Dag-voor-dag requests (max. 30-daags bereik per request) |
| Eenheden | Metrisch (stel unit_system=metric in) |
| Rate limiting | Fout 40015 = rate limit; exponentiële backoff toepassen |
Stap 3 — Schema-normalisatie
KNMI en Ecowitt gebruiken verschillende veldnamen en eenheden. Normaliseer beide bronnen naar een gedeeld intern schema vóór verdere verwerking:
| Intern veld | KNMI veldnaam | Ecowitt veldnaam | Eenheid |
|---|---|---|---|
| temp_out | ta (luchttemperatuur) | outdoor.temperature.list | °C |
| humidity_out | rh (relatieve vochtigheid) | outdoor.humidity.list | % |
| wind_speed | ff (windsnelheid 10 min gem.) | wind.wind_speed.list | m/s |
| wind_dir | dd (windrichting) | wind.wind_direction.list | ° |
| precip_daily | rn (dagsom neerslag) | rainfall.daily.list | mm |
| pressure_rel | pp (luchtdruk zeeniveau) | pressure.relative.list | hPa |
Ontbrekende waarden: sla op als null, nooit als 0 of als placeholder (“—”). Dit voorkomt analysefouten bij optelling of middeling.
Stap 4 — Tijdstempel-uitlijning
KNMI levert timestamps in UTC. Ecowitt levert in de door u ingestelde tijdzone. Converteer alles naar UTC vóór samenvoeging. Gebruik pandas pd.to_datetime(..., utc=True) of een equivalente aanpak in uw taal naar keuze.
Bij 10-minuut data kunnen tijdstempels 1–2 minuten verschuiven door afrondingsverschillen. Gebruik een tolerantie van ±1 minuut bij het samenvoegen (merge with tolerance).
Stap 5 — Kwaliteitscontrole (3 lagen)
| Laag | Methode | QC-vlag bij fout |
|---|---|---|
| 1. Fysische plausibiliteit | Waarde buiten fysisch haalbaar bereik | QC_FAIL_RANGE |
| 2. Temporele consistentie | Stap > drempelwaarde t.o.v. vorige meting | QC_FAIL_STEP |
| 3. Ruimtelijke vergelijking | Afwijking lokaal vs. KNMI > configureerbare drempel | QC_FLAG_SPATIAL |
QC-geflagde waarden worden opgeslagen met de vlag maar niet verwijderd. Dit maakt auditing mogelijk en laat de gebruiker zien wanneer een sensor mogelijk stoort.
Stap 6 — Opslag en visualisatie
MeteoA slaat gecombineerde data op in maandelijkse Apache Parquet-bestanden per station. Dit formaat is snel leesbaar, sterk gecomprimeerd en compatibel met pandas, DuckDB en Polars.
Het dashboard wordt aangestuurd door een stations_summary.json dat elke 10 minuten wordt bijgewerkt via een GitHub Actions cron-workflow. Het Leaflet.js-dashboard laadt dit bestand direct — geen databaseserver nodig.
Wanneer adviseren wij de MeteoA beheerde pipeline?
Wilt u de technische implementatie niet zelf bouwen en beheren? MeteoA biedt een volledig beheerde datafusie-pipeline die KNMI-data en uw lokale station(s) combineert, inclusief:
- API-integratie en automatische backfill tot 365 dagen
- 3-laagse kwaliteitscontrole met sensoralarmen
- Live dashboard met 10-minuut update
- CSV/JSON export en API-toegang op aanvraag
Veelgestelde vragen
Welke API gebruikt KNMI voor het delen van weerdata?
KNMI gebruikt de Environmental Data Retrieval (EDR) API (OGC-standaard). Via het KNMI Data Platform (dataplatform.knmi.nl) registreert u gratis voor een API-sleutel.
Welk formaat levert de KNMI EDR API?
CoverageJSON en GeoJSON. Tijdreeksdata wordt geleverd als arrays van tijdstempels en parameterwaarden. MeteoA normaliseert dit naar een intern schema.
Hoe vaak wordt KNMI automatische weerdata bijgewerkt?
10-minuut resolutie, met een verwerkingsachterstand van 5–20 minuten. Implementeer retry-logica om deze achterstand te overbruggen.
Wat is het beste opslagformaat voor gecombineerde weerdata?
Apache Parquet (maandelijkse bestanden per station) voor batch-analyse. InfluxDB voor realtime toepassingen met hoge schrijffrequentie.
Kan ik KNMI-data gebruiken als kwaliteitscontrole voor mijn eigen sensor?
Ja — dit is de kern van de MeteoA-aanpak. Per tijdstap wordt de lokale meting vergeleken met de KNMI-referentie. Een structurele afwijking boven een configureerbare drempel genereert een QC-vlag en sensoralarm.
Plan een demo
Bekijk de MeteoA datafusie-pipeline in werking: live vergelijking lokaal station vs. KNMI-referentie, kwaliteitscontrole en geautomatiseerde sensoralarmen.
Plan een demo