# Zwaailicht.nl

> Live P2000-alarmeringen van de Nederlandse hulpdiensten (brandweer, ambulance, politie, traumahelikopter en KNRM), in real time ontvangen van een eigen SDR-antenne, automatisch verrijkt, geclusterd tot pieken en gereconstrueerd tot incidenten met nieuwskoppeling.

## Over deze bron

- Eigen ontvanger, geen tussenpartij: P2000 wordt rechtstreeks van de antenne opgevangen (FLEX/SDR, ~95% van de meldingen) plus een RSS-fallback.
- Alle samenvattingen en sociale berichten worden automatisch gegenereerd en overal als zodanig gelabeld (EU AI-verordening art. 50). Geen menselijke redactie.
- Hergebruik is toegestaan mits elk overgenomen item een zichtbare link naar de bijbehorende pagina bevat. Voorwaarden: https://zwaailicht.nl/voorwaarden

## Markdown-versies voor agents

Elke belangrijke pagina heeft een schone markdown-versie via de `.md`-suffix:

- https://zwaailicht.nl/index.md — wat er nu speelt (voorpagina)
- https://zwaailicht.nl/meldingen.md — landelijke tijdlijn van recente meldingen
- https://zwaailicht.nl/meldingen/brandweer.md — per dienst (ook ambulance, politie, lifeliner, knrm)
- https://zwaailicht.nl/{stad}.md — stadspagina (bijv. https://zwaailicht.nl/amsterdam.md)
- https://zwaailicht.nl/{stad}/{dienst}.md — stad gefilterd op dienst
- https://zwaailicht.nl/pieken/{scope}/{datum}/{id}.md — piek/incident-detail
- https://zwaailicht.nl/{stad}/{type}/{datum}/{id}.md — losse melding-detail

## Agent API

Naast de markdown-pagina's is er een read-only JSON/markdown API voor machineclients. Geen sleutel nodig.

- API-root: https://zwaailicht.nl/api/v1/
- OpenAPI: https://zwaailicht.nl/api/v1/openapi.json
- Zoeken: https://zwaailicht.nl/api/v1/search?q=...
- Meldingen: https://zwaailicht.nl/api/v1/messages
- Pieken (gereconstrueerde incidenten): https://zwaailicht.nl/api/v1/pieken
- Incidentdossier in één request: https://zwaailicht.nl/api/v1/pieken/{id}/context
- Herkomst van een piek: https://zwaailicht.nl/api/v1/pieken/{id}/provenance
- Statistiek: https://zwaailicht.nl/api/v1/stats/pieken?group_by=day

De API herpubliceert de letterlijke P2000-pagertekst niet (net als de Atom-feeds): per melding krijg je Zwaailichts eigen lezing — een gegenereerde titel en omschrijving plus de herkende velden.

Begrippen: een *message* is één P2000-alarmering (een directe waarneming); een *piek* is een gereconstrueerd incident, samengesteld uit meldingen die in tijd en ruimte bij elkaar horen. Titels, samenvattingen en coherentie-oordelen zijn machinaal gegenereerd en zijn geen onafhankelijk geverifieerde feiten — `provenance` zegt per piek wat waargenomen, afgeleid of gegenereerd is.

Elke resource ondersteunt `Accept: application/json` (standaard) en `Accept: text/markdown`. Paginering gaat via cursors, niet via offsets. Fouten zijn RFC 9457 problem details. Huisnummers worden overal weggelaten.

## Pagina's

- [https://zwaailicht.nl/](https://zwaailicht.nl/) — voorpagina: lopende pieken, ruw signaal, ranglijst
- [https://zwaailicht.nl/kaart](https://zwaailicht.nl/kaart) — live kaart
- [https://zwaailicht.nl/meldingen](https://zwaailicht.nl/meldingen) — doorzoekbare tijdlijn
- [https://zwaailicht.nl/pieken](https://zwaailicht.nl/pieken) — gedetecteerde activiteitspieken
- [https://zwaailicht.nl/ranglijst](https://zwaailicht.nl/ranglijst) — drukste gemeenten
- [https://zwaailicht.nl/nieuws](https://zwaailicht.nl/nieuws) — nieuws gekoppeld aan pieken
- [https://zwaailicht.nl/blog](https://zwaailicht.nl/blog) — achtergrond + weekoverzichten
- [https://zwaailicht.nl/hoe-het-werkt](https://zwaailicht.nl/hoe-het-werkt) — de verwerkingspijplijn
- [https://zwaailicht.nl/over](https://zwaailicht.nl/over) — over Zwaailicht.nl
- [https://zwaailicht.nl/faq](https://zwaailicht.nl/faq) — veelgestelde vragen

## Feeds (Atom)

- https://zwaailicht.nl/feed/meldingen.xml — alle meldingen (?filter=zwaailicht|all)
- https://zwaailicht.nl/feed/meldingen/{dienst}.xml — per dienst
- https://zwaailicht.nl/feed/pieken.xml — pieken
- https://zwaailicht.nl/feed/{stad}/meldingen.xml — per stad

## Diensten

- **Brandweer** (brandweer) — Brandweer
- **Ambulance** (ambulance) — Ambulance
- **Politie** (politie) — Politie
- **Lifeliner** (lifeliner) — Traumahelikopter
- **KNRM** (knrm) — Reddingsbrigade

## Incidenttypen

- **Brand** (`/brand`) — subtypes: `/woningbrand`, `/gebouwbrand`, `/voertuigbrand`, `/buitenbrand`, `/industriebrand`, `/brandgerucht`
- **Medisch** (`/medisch`) — subtypes: `/spoedgeval`
- **Verkeer** (`/verkeer`) — subtypes: `/wegongeval`, `/verkeersongeval-met-letsel`, `/aanrijding-materieel`, `/spoorwegongeval`, `/vliegtuigongeval`
- **Hulpverlening** (`/hulpverlening`)
- **Water** (`/water`)
- **Gevaarlijke stoffen** (`/gevaarlijke-stoffen`)
- **Geweld** (`/geweld`) — subtypes: `/steekpartij`, `/schietpartij`, `/overval`, `/inbraak`, `/achtervolging`, `/vechtpartij`
- **Groot incident** (`/grip`) — subtypes: `/grip-incident`

## Populaire steden

rotterdam, amsterdam, den-haag, eindhoven, tilburg, utrecht, breda, almere, arnhem, delft, zoetermeer, leiden, nijmegen, dordrecht, voorburg, apeldoorn, haarlem, den-bosch, schiedam, lelystad

## Meer

- Volledige referentie in één bestand: https://zwaailicht.nl/llms-full.txt
- Sitemap: https://zwaailicht.nl/sitemap.xml

---

# Referentie

## Verwerkingspijplijn

1. **Ontvangen** — P2000-meldingen worden live van de antenne opgevangen met een eigen SDR-ontvanger (FLEX). Een RSS-fallback poll draait elke 30 seconden. Geen externe feed, geen tussenpartij.
2. **Verrijken** — Vaste regels (geen taalmodel) halen prioriteit, dienst, locatie, voertuig-/eenheidscodes, medische codes en incidenttype uit de tekst.
3. **Geocoderen** — De herkende locatie wordt omgezet naar coördinaten.
4. **Piekdetectie** — Meldingen worden in ruimte en tijd geclusterd (binnen ~1 km en een tijdsgat van 20 minuten). Een cluster wordt een piek vanaf ~5 meldingen of bij een GRIP-alarm. Ernst: verhoogd, hoog, extreem.
5. **Toetsen** — Een taalmodel (Claude Haiku) leest de meldingen en beoordeelt of ze werkelijk bij één incident horen (COHERENT vs GENERIEK). Alleen coherente pieken worden gepubliceerd.
6. **Nieuwskoppeling + reconstructie** — Bij coherente pieken worden gerelateerde nieuwsartikelen gezocht en gekoppeld; de piek krijgt een samenvatting, en bij nieuws een incidentrapport met bronvermelding en het tijdsverschil tussen detectie en eerste bericht.

## Prioriteitscodes

- **A1** — Ambulance spoed, levensbedreigend (met zwaailicht en sirene)
- **A2** — Ambulance dringend, niet direct levensbedreigend
- **B1** — Besteld ambulancevervoer, met urgentie
- **B2** — Besteld ambulancevervoer, gepland
- **P1** — Politie/brandweer spoed (met zwaailicht en sirene)
- **P2** — Politie/brandweer dringend, geen spoed
- **GRIP 1-4** — Gecoördineerde Regionale Incidentbestrijdings Procedure (opschaling)

## Medische codes

- **CVA** — Beroerte (CVA)
- **TIA** — TIA
- **ACS** — Acuut coronair syndroom
- **AED** — AED-inzet
- **REANIMATIE** — Reanimatie
- **COPD** — COPD-aanval
- **EPILEPSIE** — Epileptische aanval
- **INTOXICATIE** — Intoxicatie
- **SEPSIS** — Sepsis
- **ALLERGISCH** — Allergische reactie
- **BEWUSTELOOS** — Bewusteloze persoon
- **ADEMSTILSTAND** — Ademstilstand
- **ADEMNOOD** — Ademnood
- **PNEUMONIE** — Longontsteking
- **COLLAPS** — Collaps
- **GYN** — Bevalling / gynaecologie
- **CARDIOLOGIE** — Cardiologisch probleem

## Technisch

- Data: P2000 alarmeringsnetwerk (openbare, onversleutelde meldingen)
- Ontvangst: eigen SDR-antenne (FLEX) + RSS-fallback
- Opslag: DuckDB
- Taal: Nederlands
- Website: https://zwaailicht.nl
- Bluesky: @zwaailicht.nl
