Skip to content

About

Echtzeit-Wettercheck & Luftraumbewertung für Drohnenpiloten in Deutschland – Windgeschwindigkeit, Temperatur, Taupunkt, Kp-Index und DiPUL-Luftraumzonen auf einen Blick.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🛸 Drohnenwetter

Echtzeit-Wetter- und Luftraumbewertung für Drohnen-Piloten in Deutschland.

🇬🇧 English version

Deploy Daily Health Check

Drohnenwetter


Funktionen

  • Sicherheitsbewertung — Windgeschwindigkeit (je Höhe), Böen, Temperatur, Taupunkt (pro Höhe) und geomagnetische Aktivität werden gegen die Betriebsgrenzen geprüft
  • Taupunkt je Höhe — pro Altitude aus DFS-Temperatur und -Luftfeuchte via Magnus-Tetens berechnet, zwei Gefahrenstufen (Warnung / kritisch) plus absolutes Flugverbot bei gefrierendem Regen
  • Luftraumüberlagerung — DiPUL/DFS WMS mit 32 Zonentypen (Kontrollzonen, Naturschutzgebiete, Militärgebiete, …)
  • Betroffene Zonen — API-basierte GeoJSON-Polygone für den genauen Standort, auf der Karte dargestellt mit Popups und Klick-Details
  • Wolkenuntergrenze — nächstgelegenes Flughafen-TAF wird nach Wolkenuntergrenze ausgewertet
  • Luftverkehr live — Flugzeuge in der Nähe (✈️ Starrflügler, 🚁 Hubschrauber, 🛩 Leichtflugzeuge, 🛸 UAVs) über das OpenSky-Netzwerk, alle 15 Sekunden aktualisiert
  • Parallele API-Abfragen — alle Datenquellen werden gleichzeitig abgerufen (UTM, OpenWeatherMap, Kp-Index, DiPUL, OpenSky)
  • Zweisprachig — Deutsch/Englisch umschaltbar, wird in localStorage gespeichert
  • Hell- & Dunkelmodus — umschaltbar, wird in localStorage gespeichert
  • Mobiloptimiert — responsives Grid, touchfreundliche Bedienung, 16px-Eingaben (kein iOS-Autozoom)
  • Rate Limiting — 10 Anfragen / Minute pro IP, Token-Bucket via golang.org/x/time/rate

Datenquellen

Quelle Daten
DFS UTM Wind, Temperatur & Luftfeuchte auf 2 / 10 / 50 / 100 / 150 m AGL (Taupunkt wird daraus abgeleitet)
OpenWeatherMap Ergänzende Oberflächenwerte (Fallback für Taupunkt)
GFZ Potsdam Kp-Index (geomagnetische Aktivität)
DiPUL / DFS Luftraumzonen, WMS-Überlagerung & Zonendetails
DFS TAF Wolkenuntergrenze vom nächstgelegenen Flughafen-TAF
OpenSky Network Echtzeit-Luftverkehr (State Vectors, ~11 km Radius)
HERE Maps Adress-Geocoding (nur Deutschland)
OpenStreetMap Kartenkacheln
Leaflet Interaktive Karte

Sicherheitsgrenzen

Parameter Grenzwert
Windgeschwindigkeit ≤ 12 m/s je Höhenstufe
Böen ≤ 12 m/s
Temperatur −20 °C … +50 °C
Taupunkt-Abstand (Warnung) T < 3 °C und (T − Td) < 2 °C → Nebel-/Klareisgefahr
Taupunkt-Abstand (kritisch) −10 °C ≤ T ≤ 0 °C und (T − Td) < 1 °C → Vereisungsgefahr
Gefrierender Regen Niederschlag > 0 mm bei Oberflächen-T ≤ 0 °C → absolutes Flugverbot
Regen (nicht gefrierend) > 0 mm → Warnung (wetterfeste IP-Drohne empfohlen, kein Flugverbot)
Schneefall > 0 cm → Warnung (wetterfeste IP-Drohne empfohlen, kein Flugverbot)
Kp-Index ≤ 4 (GPS- / Funk-Zuverlässigkeit)

Die App ist primär auf BOS-Nutzer (Polizei, Feuerwehr, Rettung, Katastrophenschutz) mit IP-geschützten Drohnen ausgelegt. Leichter Regen oder Schnee werden daher als Warnung angezeigt, jedoch ohne den Flugstatus auf „gesperrt" zu setzen.


Technologie

  • Sprache: Go 1.23 — net/http, html/template, kein Web-Framework
  • Version: 0.9 (siehe VERSION)
  • Abhängigkeiten: golang.org/x/time/rate (Rate Limiting)
  • Karte: Leaflet.js + OpenStreetMap + DiPUL WMS
  • Betrieb: Docker Compose — 3 App-Replikas + Nginx Reverse Proxy
  • Image: Multi-Stage-Build → gcr.io/distroless/static-debian12:nonroot (~8 MB)
  • Proxy: Cloudflare → Nginx → Go-App (echte IP via CF-Connecting-IP)

Projektstruktur

drohnenwetter/
├── go/                          # Go-Anwendung
│   ├── cmd/drohnenwetter/
│   │   └── main.go              # Einstiegspunkt, Server, Rate Limiting, Middleware
│   ├── internal/
│   │   ├── api/
│   │   │   ├── client.go        # HTTP-Client (8 s Timeout)
│   │   │   ├── geocode.go       # HERE Maps Geocoding
│   │   │   ├── weather.go       # DFS UTM + OpenWeatherMap + Kp-Index
│   │   │   ├── dipul.go         # DiPUL Token-Cache + Zonenabruf
│   │   │   ├── wms.go           # DiPUL WMS GetFeatureInfo (Klick-Details)
│   │   │   ├── metar.go         # Wolkenuntergrenze aus Flughafen-TAF
│   │   │   └── opensky.go       # OpenSky OAuth2 Token-Cache + Verkehrsabruf
│   │   ├── assessment/
│   │   │   └── assess.go        # Sicherheitsbewertungslogik
│   │   └── handler/
│   │       ├── home.go          # GET /
│   │       ├── results.go       # POST /results — paralleler Abruf & Rendering
│   │       ├── zone-info.go     # GET /zone-info — Zonenklick-Details (GeoJSON)
│   │       ├── traffic.go       # GET /traffic — Live-Luftverkehr JSON
│   │       ├── track.go         # GET /track — Flugtrack-Proxy
│   │       └── util.go          # Gemeinsame Handler-Hilfsfunktionen
│   ├── templates/
│   │   ├── base.html            # Gemeinsames CSS, Hell/Dunkel-Modus, i18n, Footer
│   │   ├── index.html           # Startseite
│   │   ├── results.html         # Dashboard: Messwerte, Karte, Zonen, Luftverkehr
│   │   ├── impressum.html       # Impressum
│   │   └── datenschutz.html     # Datenschutzerklärung
│   ├── static/                  # Favicons, Manifest, robots.txt, Sitemap
│   ├── Dockerfile
│   ├── go.mod
│   └── go.sum
├── nginx/
│   └── drohnenwetter.de.conf
├── checks/
│   └── smoke.sh                 # Smoke-Tests gegen Live-Site
├── .github/
│   └── workflows/
│       └── daily-health.yml     # Täglicher automatischer Health-Check (07:00 UTC)
├── docker-compose.yml
└── .env                         # API-Keys (nicht eingecheckt)

Einrichtung

Voraussetzungen

  • Docker + Docker Compose
  • API-Keys (siehe unten)

Umgebungsvariablen

.env-Datei im Projektverzeichnis anlegen:

HERE_API_KEY=dein_here_maps_api_key
OPENWEATHER_TOKEN=dein_openweathermap_api_key
OPENSKY_CLIENT_ID=deine_opensky_client_id
OPENSKY_CLIENT_SECRET=dein_opensky_client_secret
Variable Bezugsquelle
HERE_API_KEY developer.here.com — kostenlose Stufe verfügbar
OPENWEATHER_TOKEN openweathermap.org/api — OneCall 3.0 erforderlich
OPENSKY_CLIENT_ID opensky-network.org — API-Client unter dem eigenen Konto anlegen
OPENSKY_CLIENT_SECRET Wie oben — OAuth2 Client Credentials Flow

OPENSKY_CLIENT_ID und OPENSKY_CLIENT_SECRET sind optional. Ohne diese Angaben greift die App auf die anonyme OpenSky-API zurück (niedrigere Rate Limits, keine Track-Daten).

Starten

docker compose up --build

Die App ist danach unter http://localhost:8080 erreichbar.

Logs

docker compose logs -f drohnenwetter-app

Entwicklung

Go muss nicht lokal installiert sein — der Docker-Build übernimmt die Kompilierung. Falls Go lokal vorhanden ist:

cd go
go build ./...                                    # Kompilierungsprüfung
HERE_API_KEY=... OPENWEATHER_TOKEN=... \
  OPENSKY_CLIENT_ID=... OPENSKY_CLIENT_SECRET=... \
  go run ./cmd/drohnenwetter                      # lokal starten auf :8080

Smoke-Tests

./checks/smoke.sh                          # Live-Site testen
./checks/smoke.sh http://localhost:8080    # lokale Instanz testen

Deployment

Das mitgelieferte docker-compose.yml betreibt 3 App-Replikas hinter Nginx. Konzipiert für den Betrieb hinter Cloudflare (echte Client-IP aus CF-Connecting-IP).

Live unter: drohnenwetter.de

Sicherheitshinweis: Kein integriertes TLS. Ausschließlich hinter Nginx + Cloudflare (oder einem anderen TLS-terminierenden Proxy) betreiben. Den Go-App-Port 8080 nicht direkt im Internet exponieren.


Lizenz

Persönliches Projekt — ohne Gewähr. Kein Ersatz für offizielle Vorflugchecks. Wetterdaten © jeweilige Anbieter. Kartendaten © OpenStreetMap-Beitragende.


Kontakt: info@drohnenwetter.de · github.com/olizimmermann

About

Echtzeit-Wettercheck & Luftraumbewertung für Drohnenpiloten in Deutschland – Windgeschwindigkeit, Temperatur, Taupunkt, Kp-Index und DiPUL-Luftraumzonen auf einen Blick.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages