Handleiding

Hoe werkt Realtime Treinen?

Over Realtime Treinen

Realtime Treinen biedt een live overzicht van alle treinen in Nederland. Posities, vertragingen, uitval en statistieken worden continu verzameld uit officiële databronnen en in real-time weergegeven op een interactieve kaart en dashboards.

De website is volledig gratis en zonder registratie te gebruiken. Enkele geavanceerde functies zoals de reisplanner vereisen een inlog. Het doel is om reizigers, treinliefhebbers en onderzoekers inzicht te geven in de actuele status en historische prestaties van het Nederlandse spoornetwerk.

Databronnen

NDOV Loket (BISON) ZeroMQ
Landelijke database voor openbaar vervoer data, beheerd door NDOV Loket. Via het ZeroMQ-protocol worden real-time berichten ontvangen:
  • KV6 — Voertuigposities: GPS-coördinaten, ritinformatie en stiptheid van bussen, trams en metro's
  • KV15 — Verstoringen en reisinformatie: actuele storingen en omleidingen
  • KV17 — Dienstregeling-mutaties: wijzigingen in de geplande dienstregeling
NS InfoPlus DVS ZeroMQ
Vertrek- en aankomstinformatie per station voor treinen. Bevat geplande en actuele vertrektijden, vertragingen in seconden, perronwijzigingen, omleidingen en routewijzigingen.
NS Reisinformatie API REST API
Officiële API van NS voor geannuleerde treinen (betrouwbaarder dan DVS), actuele verstoringen en materieelsamenstelling. Wordt elke 60 seconden gepolld.
Verwerking
Alle data wordt ontvangen via ZeroMQ of REST API, geparsed uit XML/JSON, opgeslagen in PostgreSQL (historische data) en Redis (real-time cache), en beschikbaar gesteld via een REST API die de frontend voedt.

Berekeningen

Punctualiteit
Per unieke trein per dag wordt de maximale vertraging op alle stations bekeken. Een trein stopt bij meerdere stations — de hoogste gemeten vertraging bepaalt of een trein als "op tijd" of "vertraagd" wordt gerekend.
Een trein is "op tijd" als de maximale vertraging minder dan 3 minuten (180 seconden) bedraagt.
Punctualiteit = (treinen op tijd / totaal unieke treinen) × 100%
Let op: dit verschilt van de NS-definitie, die een drempel van 5 minuten hanteert. Onze berekening is strenger, waardoor percentages lager kunnen uitvallen.
Vertraging
Het verschil in seconden tussen de geplande vertrektijd en de werkelijke vertrektijd, zoals gemeld door NS InfoPlus DVS. Per station wordt een apart vertragingscijfer ontvangen.
De gemiddelde vertraging op de dashboards wordt berekend over alle unieke treinen van die dag, waarbij per trein de maximale vertraging wordt genomen.
Geannuleerde treinen
Geannuleerde treinen worden uitsluitend via de NS Reisinformatie API bijgehouden. Het DVS-veld "geannuleerd" is onbetrouwbaar gebleken (markeerde >97% van alle treinen als geannuleerd).
Per dag wordt elk uniek treinnummer slechts eenmaal geteld, ongeacht hoeveel stations de annulering betreft.
Annuleringsredenen
Bij elke annulering levert de NS een of meerdere tekstuele berichten. Het systeem classificeert deze automatisch in categorieën via keyword-matching:
Defect materieel Defect spoor Seinstoring Wisselstoring Aanrijding / Persoon Werkzaamheden Weer Overwegstoring Infrastructuur Staking Dienstregelingswijziging Onbekende oorzaak
Berichten die niet in een van deze categorieën passen, worden geclassificeerd als "Overig".
Treinen vandaag
Het totaal aantal unieke treinnummers dat vandaag minimaal één vertrek heeft gehad, op basis van DVS-vertrekdata. Eén treinnummer dat bij 15 stations stopt, telt als 1 trein.
Actieve treinen (radar)
Het aantal treinen dat op dit moment een real-time GPS-positie uitzendt via BISON KV6. Dit cijfer verandert continu en wordt elke paar seconden bijgewerkt vanuit de Redis-cache.

Technologie

Backend
Python 3.12 · FastAPI
SQLAlchemy (async) + asyncpg
Database
PostgreSQL 16
TimescaleDB extensie voor time-series
Cache
Redis
Real-time state: posities, vertragingen
Data transport
ZeroMQ
NDOV besteffort protocol
Deployment
Docker Compose
Hetzner Cloud (Duitsland)
Frontend
Vanilla HTML/CSS/JS
Leaflet.js voor kaarten

Bronvermelding

Alle treindata is afkomstig van NDOV Loket (ndovloket.nl) en NS Open Data (apiportal.ns.nl).

Dit is een onafhankelijk project en is niet gelieerd aan NS, ProRail of NDOV Loket. De getoonde data wordt naar beste vermogen verwerkt, maar er kunnen geen rechten aan worden ontleend.