303.525 datasets geïndexeerd1.419 uitgevers
Open Data IndexDe index van open data over Nederland
Open Data Index›Bouwen›Wat vliegt er nu boven mijn huis?
AppOm te beginnenVerkeer en vervoer

Wat vliegt er nu boven mijn huis?

Een kleine app die elke paar minuten laat zien welke vliegtuigen binnen 25 km van jouw adres vliegen, hoe hoog, hoe snel en of ze stijgen of dalen, met de live posities van OpenSky en zonder account.

Je AI-assistentOpen Data Index MCP aan
De MCP-server van Open Data Index staat aan in je chat. Zo leest de assistent dit project en de bronnen zelf.
Jij plakt de prompt van dit project
De assistent haalt op bij Open Data Index
  • geef_project("vliegtuigen-boven-je-huis")
  • geef_bron("opensky")
  • geef_bron("schiphol-vluchten")
De assistent

Ik heb het project, de geteste aanroepen en de valkuilen. Ik bouw een app met OpenSky Network en Schiphol vluchtgegevens. Zo kan het eruitzien:

Dit bouw je zelf. Kopieer de prompt naar Claude, ChatGPT of Cursor, met de MCP-server aan, of volg de stappen hieronder.

Volg de stappen
LuchtwachtAMSTELVEEN · 25 KM23:34:14
N09018027010 km20 kmSCHIPHOL4 aan de grondRYR275K11.400 mTRA16M381 m ↓LIFELN1381 mWMT54310.759 m
38boven NL
28in de lucht
8binnen 25 km
397credits over
roepnaamafst.hoogtekm/ukoers
RYR275K13,611.400848093°kruist
TRA16M14,6381253057°daalt
LIFELN116,6381193044°kruist
WMT54324,710.759847101°kruist
Mockup

Dit is een mockup, geen werkende versie, met een echte meting van OpenSky op zaterdag 17 oktober 2026 om 23:34 rond het punt in Amstelveen uit het project. De MCP-server zet je aan met het adres op Voor AI.

Voor wie

Omwonenden van Schiphol en andere vliegvelden die willen weten wat er overkomt, kinderen en hobbyisten, en lokale media bij klachten over vliegtuiggeluid.

Wat je krijgt

Een pagina (of widget op een Raspberry Pi met scherm) met een lijst van de vliegtuigen binnen 25 km van je huis: roepnaam, afstand, hoogte, snelheid, koers en of ze stijgen, dalen of kruisen, plus het aantal toestellen boven heel Nederland. Klik op een toestel voor de route die het vandaag vloog.

Proefdraai op vrijdag 16 oktober 2026 om 23:50:54 voor een punt in Amstelveen, ten oosten van Schiphol: boven Nederland 38 toestellen, waarvan 29 in de lucht. Binnen 25 km: 4 toestellen. Transavia TRA7X op 152 meter hoogte en 252 km/u aan het dalen op 10,4 km afstand, TRA81H op 2.934 meter en 510 km/u ook dalend, en twee toestellen aan de grond op Schiphol (KLM1682 en THY3EZ). De route van TRA81H kwam uit het zuiden van Italië (eerste punt 37,49 N 15,23 O, bij Catania). Het script kostte 2 van de 400 gratis dagcredits.

Vluchten van en naar Schiphol: 478 duizend in 2025, 37% meer dan in 1997

Vluchten van en naar Schiphol, 1997 – 2025, in duizend. Het hoogste punt was 2018 (499).

Bron: CBS, tabel 37478hvv (Luchtvaart; maandcijfers Nederlandse luchthavens van nationaal belang) · opgehaald 25 oktober 2026Open de tabel Los blok

Zo zou je kunnen starten5 stappen

  1. 1

    Vraag de posities in een vak op

    OpenSky geeft zonder account de actuele 'state vectors' van alle toestellen in een vak (lamin, lomin, lamax, lomax in graden). Elke toestand is een lijst, geen object: [0] icao24, [1] roepnaam (met spaties aangevuld tot 8 tekens), [2] land van registratie, [5] lengte, [6] breedte, [7] barometrische hoogte in m, [8] aan de grond, [9] snelheid in m/s, [10] koers, [11] stijgsnelheid in m/s, [13] GPS-hoogte. Velden kunnen null zijn. De robots.txt van opensky-network.org geeft 403 aan iedereen; de API zelf antwoordt wel en is gedocumenteerd op openskynetwork.github.io/opensky-api.

    https://opensky-network.org/api/states/all?lamin=52.1&lomin=4.5&lamax=52.5&lomax=5.2
    x-rate-limit-remaining: 392
    {"time":1792187264,"states":[["4bb101","THY3EZ  ","Turkey",1792187253,1792187253,4.7303,52.3232,null,true,10.8,317.81,null,null,null,null,false,0],
     ["48520b","TRA7X   ","Kingdom of the Netherlands",1792187264,1792187264,4.5078,52.209,899.16,false,118.85,90.99,-7.15,null,1036.32,"1000",false,0],
     ["486258","KLM1682 ","Kingdom of the Netherlands",1792187264,1792187264,4.6969,52.2736,91.44,false,65.93,5…
  2. 2

    Reken op je credits

    Anoniem krijg je 400 credits per dag voor /states. Een vak tot 25 vierkante graad kost 1 credit (heel Nederland is 11,9), groter kost 2 tot 4. De kop X-Rate-Limit-Remaining zegt hoeveel je over hebt; bij 0 krijg je 429 met X-Rate-Limit-Retry-After-Seconds. Elke 5 minuten twee vragen is 576 per dag: te veel. Vraag dus elke 4 minuten, alleen overdag, of maak een gratis account (4.000 per dag, OAuth2 client credentials).

  3. 3

    Filter op afstand en bepaal stijgen of dalen

    Het vak is rechthoekig; reken daarna met de haversine-formule de echte afstand uit en houd alleen wat binnen je straal valt. Stijgsnelheid onder -2 m/s = dalen, boven 2 = stijgen. Snelheid is in m/s: keer 3,6 voor km/u. Gebruik de GPS-hoogte als die er is; de barometrische hoogte hangt af van de luchtdruk. Toestellen aan de grond hebben vaak geen hoogte.

  4. 4

    Toon waar een toestel vandaan komt

    /tracks/all met icao24 en time=0 geeft de route van de lopende vlucht als lijst punten [tijd, breedte, lengte, hoogte, koers, aan de grond]. Dit heeft een eigen tegoed (los van /states). De vluchtenlijsten (/flights/arrival, /flights/departure) geven anoniem 403: 'You cannot access historical flights'.

    https://opensky-network.org/api/tracks/all?icao24=48683e&time=0
    {"icao24":"48683e","callsign":"TRA81H  ","startTime":1.792178801E9,"endTime":1.792187882E9,
     "path":[[1792178801,37.4879,15.2291,1219,82,false],[1792178801,37.4879,15.2291,1219,82,false],
             [1792178828,37.4923,15.2694,1828,79,false], … ]}
    (160 punten; het laatste: [1792187882, 52.2609, 4.6641, 0, 57, false])
  5. 5

    Vertrek- en aankomsttijden? Alleen met Schiphol-account

    OpenSky weet niet van gates of vertraging. Die staan in de Public Flight API van Schiphol, maar die vraagt een account, een applicatie en een OAuth2-token (30 minuten geldig) en heeft strenge voorwaarden: alleen om reizigers te helpen, niets langer dan 24 uur bewaren, geen statistiek of historische analyse en niet doorgeven aan derden. Een 'wat vliegt er boven mijn huis'-teller valt daar niet onder. Zonder token geeft de API 401. Wij hebben geen account en hebben dit niet verder getest.

    https://api.schiphol.nl/public/public-flights/v4/flights?scheduleDate=2026-10-16&flightDirection=A&page=0
    {
      "message":"Unauthorized",
      "request_id":"ba1cf8526ebba40cf84f856b56520549"
    }
    (HTTP 401)

Hoe de bronnen samenkomen

  • OpenSky NetworkSchiphol vluchtgegevensvia roepnaam (callsign 'KLM1682') ≈ vluchtnummer (flightName 'KL1682', IATA-code in plaats van ICAO)

    OpenSky gebruikt de ICAO-roepnaam (KLM1682), Schiphol het IATA-vluchtnummer (KL1682). Voor de omzetting heb je een tabel met luchtvaartmaatschappijen nodig (/airlines in de Schiphol-API). Alleen voor reizigersinformatie; opslaan voor statistiek mag niet.

  • OpenSky NetworkCBS StatLinevia maand (CBS 37478hvv, luchthaven Schiphol)

    Wil je trends (vliegbewegingen per maand), gebruik dan de CBS-tabel 37478hvv in plaats van live posities op te sparen.

Laat AI het bouwen

Plak deze prompt in Claude, ChatGPT, Cursor of Lovable. Hij noemt de echte endpoints, de koppelsleutels en de valkuilen, zodat de assistent meteen werkende code schrijft. Controleer de uitkomst altijd met de bron zelf.

Bouw een kleine webapp 'Wat vliegt er boven mijn huis?' met Python 3 (FastAPI of Flask) of Node 20, plus één HTML-pagina met een Leaflet-kaart.

Data: OpenSky Network REST API, anoniem, docs op https://openskynetwork.github.io/opensky-api/rest.html
- Posities: GET https://opensky-network.org/api/states/all?lamin=…&lomin=…&lamax=…&lomax=…
- Route van één toestel: GET https://opensky-network.org/api/tracks/all?icao24=<hex>&time=0

Wat je moet weten:
- Elke state is een lijst: [0] icao24, [1] callsign (spaties eraf halen), [2] land van registratie, [3] time_position, [4] last_contact, [5] lon, [6] lat, [7] baro_altitude (m), [8] on_ground, [9] velocity (m/s), [10] true_track (graden), [11] vertical_rate (m/s), [13] geo_altitude (m), [14] squawk. Bijna alles kan null zijn.
- Anoniem: 400 credits per dag voor /states; een vak tot 25 vierkante graad kost 1. /tracks heeft een eigen tegoed. Lees X-Rate-Limit-Remaining en toon het. Bij 429: X-Rate-Limit-Retry-After-Seconds respecteren.
- Ververs niet vaker dan eens per 4 minuten (of laat de gebruiker op 'nu verversen' klikken) en cache het antwoord op de server: alle bezoekers delen één aanroep.
- /flights/* geeft anoniem 403. Gebruik geen scraping van de website (robots.txt geeft 403).
- Licentie: alleen niet-commercieel gebruik. Vermeld 'Data: OpenSky Network'.
- Bereken de echte afstand tot het huis met haversine en filter op een straal van 25 km. Stijgen/dalen uit vertical_rate (±2 m/s). Snelheid × 3,6 = km/u.
- Toon geen vertrek- of aankomsttijden: die staan alleen in de Schiphol Public Flight API (account, OAuth2, alleen voor reizigers, max 24 uur bewaren, geen statistiek).

Uitkomst: een invoerveld voor een adres of coördinaten (zoek coördinaten niet via Nominatim zonder hun gebruiksregels te lezen; laat de gebruiker op de kaart klikken), een kaart met de toestellen als pijltjes in de vliegrichting, een lijst gesorteerd op afstand (roepnaam, hoogte, km/u, stijgt/daalt), en bij klikken de route van vandaag als lijn. Onderaan: tijdstip van de data, aantal toestellen boven Nederland en resterende credits.

Probeer het zelf

De kern van het project in een klein script. Nodig: Python 3.9+ en requests. Getest op 2026-10-16; hieronder de echte uitvoer van die proefdraai.

# Wat vliegt er nu boven mijn huis? OpenSky Network, anoniem (400 credits per dag, dit script kost er 2).
# Python 3.10+ en requests. Gebruik alleen niet-commercieel (voorwaarden OpenSky).
import math, requests
from datetime import datetime
from zoneinfo import ZoneInfo

UA = {"User-Agent": "mijn-vliegtuigradar/1.0 (+jij@voorbeeld.nl)"}
API = "https://opensky-network.org/api/states/all"
HUIS = (52.3017, 4.8640)   # breedte, lengte: Amstelveen, ten oosten van Schiphol; vul je eigen adres in
STRAAL_KM = 25

def toestanden(lamin, lomin, lamax, lomax):
    r = requests.get(API, params={"lamin": lamin, "lomin": lomin, "lamax": lamax, "lomax": lomax},
                     headers=UA, timeout=30)
    if r.status_code == 429:
        raise SystemExit(f"Dagtegoed op, wacht {r.headers.get('X-Rate-Limit-Retry-After-Seconds')} s")
    r.raise_for_status()
    return r.json(), r.headers.get("X-Rate-Limit-Remaining")

def afstand_km(a, b):   # haversine
    p1, p2 = math.radians(a[0]), math.radians(b[0])
    d = math.sin((p2 - p1) / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(math.radians(b[1] - a[1]) / 2) ** 2
    return 6371 * 2 * math.asin(math.sqrt(d))

# 1. Heel Nederland (11,9 vierkante graad = 1 credit)
nl, _ = toestanden(50.75, 3.2, 53.7, 7.22)
lucht = [s for s in nl["states"] or [] if not s[8]]
tijd = datetime.fromtimestamp(nl["time"], ZoneInfo("Europe/Amsterdam")).strftime("%d-%m-%Y %H:%M:%S")
print(f"{tijd}: boven Nederland {len(nl['states'] or [])} toestellen, {len(lucht)} in de lucht")

# 2. Rond mijn huis: vak van ruim 50 bij 50 km (1 credit), daarna precies op afstand filteren
dlat, dlon = STRAAL_KM / 111, STRAAL_KM / (111 * math.cos(math.radians(HUIS[0])))
hier, over = toestanden(HUIS[0] - dlat, HUIS[1] - dlon, HUIS[0] + dlat, HUIS[1] + dlon)
rijen = []
for s in hier["states"] or []:
    icao, roep, land, _, contact, lon, lat, baro, grond, snelheid, koers, stijg = s[:12]
    if lat is None or lon is None:
        continue   # geen positie in de laatste 15 seconden
    km = afstand_km(HUIS, (lat, lon))
    if km > STRAAL_KM:
        continue
    hoogte = s[13] if s[13] is not None else baro      # geo_altitude, anders barometrisch
    fase = "aan de grond" if grond else ("daalt" if (stijg or 0) < -2 else "stijgt" if (stijg or 0) > 2 else "kruist")
    rijen.append((km, (roep or "?").strip(), icao, land, hoogte, (snelheid or 0) * 3.6, koers, fase))

print(f"Binnen {STRAAL_KM} km van {HUIS}: {len(rijen)} toestellen (nog {over} credits vandaag)")
for km, roep, icao, land, h, v, k, fase in sorted(rijen)[:8]:
    hoogte = f"{h:,.0f} m".replace(",", ".") if h is not None else "? m"
    print(f"  {km:5.1f} km  {roep:8} {icao}  {land:15.15} {hoogte:>8}  {v:4.0f} km/u  koers {k or 0:3.0f}  {fase}")
Uitvoer
16-10-2026 23:50:54: boven Nederland 38 toestellen, 29 in de lucht
Binnen 25 km van (52.3017, 4.864): 4 toestellen (nog 389 credits vandaag)
    6.8 km  KLM1682  486258  Kingdom of the       ? m    32 km/u  koers 239  aan de grond
   10.4 km  TRA7X    48520b  Kingdom of the     152 m   252 km/u  koers  58  daalt
   10.7 km  THY3EZ   4bb101  Turkey               ? m    25 km/u  koers 222  aan de grond
   12.2 km  TRA81H   48683e  Kingdom of the   2.934 m   510 km/u  koers 268  daalt

Waar het misgaat

  • Het tegoed is snel op. 400 credits per dag is één vraag per 3,6 minuut, de hele dag. Een pagina die elke 10 seconden ververst, zit binnen een uur zonder. Cache op de server en ververs alleen als iemand kijkt.
  • Land is het land van registratie, niet de maatschappij. SAS1804 stond in onze eerste proef als 'Ireland', THY3EZ als 'Turkey'. Het land volgt uit het ICAO24-adres van de transponder.
  • Niet alles is te zien. OpenSky hoort alleen toestellen die een ontvanger in de buurt opvangt; lage toestellen en toestellen zonder ADS-B (sommige militaire, kleine vliegtuigen) ontbreken. Om 23:50 waren het er 38 boven Nederland; overdag veel meer.
  • Hoogte en positie kunnen ontbreken. Toestellen aan de grond hadden geen hoogte; posities ouder dan 15 seconden worden null. Sla toestellen zonder positie over en toon '?' bij een lege hoogte.
  • Schiphol-data mag hier niet voor. De Public Flight API verbiedt statistiek, historische analyse en bewaren langer dan 24 uur. Een overlast-teller of een archief van vluchten boven je huis bouw je dus met OpenSky, niet met Schiphol.

Verder bouwen

  • Geluid erbij: tel per uur hoeveel toestellen onder de 1.000 meter binnen 5 km van je huis komen en zet dat naast de geluidsmetingen van een meetpost van de luchthaven.
  • Een e-inkscherm in de vensterbank: een Raspberry Pi die elke 5 minuten het dichtstbijzijnde toestel toont met roepnaam, hoogte en de stad van vertrek (eerste punt van /tracks).
  • Trends per maand: gebruik voor vliegbewegingen per maand de CBS-tabel 37478hvv (Schiphol en de andere luchthavens van nationaal belang) in plaats van live data te bewaren.
  • Gratis account: met 4.000 credits per dag kun je elke minuut verversen en zie je per toestel ook de categorie (licht, zwaar, helikopter) met extended=1.

De bronnen2

OpenSky Network

OpenSky NetworkWereld, vliegtuig

Posities van vliegtuigen, opgevangen door een wereldwijd netwerk van ontvangers. Zonder account beperkt tot actuele posities.

OpenAPIRealtimeVerkeer en vervoer
Actueel
bijgewerkt minder dan een uur geleden

Schiphol vluchtgegevens

Royal Schiphol GroupNederland, vlucht

De Public Flight API van Schiphol geeft per vlucht de geplande en verwachte tijden, status, gate, terminal, bagageband, vliegtuigtype en route, plus lijsten van luchtvaartmaatschappijen, bestemmingen en vliegtuigtypen. Gratis na registratie, maar de voorwaarden zijn streng: alleen om reizigers te helpen, niets langer dan 24 uur bewaren en geen statistiek.

Gratis sleutelAPIRealtimeVerkeer en vervoer
Bereikbaar
elke minuut

Meer om te bouwen