# HexaWetter – Selfhosted Wetterportal HexaWetter ist ein vollständiges Self-Hosting-Wetterportal mit Forecast, DWD-Beobachtungen, interaktiver Radar-Karte (WMS + Zeitleiste), Warnungen, Geocoding und lokalem Radar-Rendering. ## Features - **Dashboard**: Aktuelles Wetter, DWD-Station, 48h-Stundenansicht, 7-Tage-Forecast - **Radar-Karte**: Leaflet + OpenStreetMap + DWD WMS (Niederschlagsradar, Warnungen) - **Radar-Animation**: Zeitleiste (60–120 Min., 5-Min-Schritte), Play/Pause, Vor/Zurück - **Warnungen**: DWD-Warnungen mit Standortfilter (Landkreis-Matching) - **Ortssuche**: PLZ/Ort via Nominatim-Proxy, GPS, Favoriten - **Lokales Radar**: Worker lädt Rohdaten, Renderer erzeugt PNG-Overlays - **Infrastruktur**: PostgreSQL + TimescaleDB + PostGIS, Redis-Cache, Healthchecks ## Admin-Bereich ```bash pip install bcrypt python scripts/hash_admin_password.py 'dein-sicheres-passwort' ``` Die ausgegebenen Werte in `.env` eintragen, dann Stack neu starten. Admin-UI: `http://localhost:8080/admin.html` Sicherheit: - bcrypt-Passwort-Hash (niemals Klartext in `.env` committen) - JWT mit `ADMIN_JWT_SECRET` (min. 32 Zeichen) - Rate-Limiting auf Login (5 Versuche / 5 Min.) - Token nur in `sessionStorage` (nicht localStorage) - Security-Headers auf allen API-Antworten ```bash cp .env.example .env docker compose up -d --build ``` Web-UI: `http://localhost:8080` · API: `http://localhost:8081/api/health` ## Architektur | Service | Rolle | |---------|-------| | `frontend` | Nginx + statisches UI | | `api` | FastAPI-Backend | | `postgres` | TimescaleDB + PostGIS (Cache, Radar-Metadaten) | | `redis` | Kurzzeit-Cache | | `radar-worker` | DWD OpenData Download | | `radar-renderer` | HDF5 → PNG aus Rohdaten | ## API-Endpunkte (Auswahl) | Endpoint | Beschreibung | |----------|--------------| | `GET /api/health` | Status inkl. Quellen-Healthchecks | | `GET /api/forecast` | 7-Tage-Forecast | | `GET /api/observations` | DWD-Beobachtung (Bright Sky) | | `GET /api/warnings` | DWD-Warnungen (standortbezogen) | | `GET /api/geocode/search` | Ortssuche | | `GET /api/radar/wms/times` | WMS-Zeitschritte für Animation | | `GET /api/radar/rendered` | Lokal gerenderte Radar-Frames | ## Selfhosted Forecast (optional) ```bash docker compose -f docker-compose.yml -f docker-compose.selfhosted.yml --profile selfhosted up -d ``` Siehe `docs/NEXT_STEPS.md` für Hardware-Empfehlungen zu Open-Meteo und Bright Sky. ## Konfiguration Wichtige `.env`-Variablen: - `OPEN_METEO_BASE_URL`, `BRIGHTSKY_BASE_URL` – Forecast/Beobachtungen - `DWD_WMS_URL`, `DWD_RADAR_BASE_URL` – Radar-Karte und Rohdaten - `POSTGRES_PASSWORD`, `RADAR_RETENTION_HOURS` - `CACHE_TTL_*`, `RATE_LIMIT_PER_MINUTE` ## Backup - PostgreSQL: `docker exec hexawetter-postgres pg_dump -U hexawetter hexawetter > backup.sql` - Radar-Rohdaten: `./data/raw/radar/` - Gerenderte Frames: `./data/processed/radar/` ## Entwicklung ```bash cd api && pip install -r requirements.txt && uvicorn app.main:app --reload --port 8081 ``` ## Lizenz / Attribution Datenbasis: Deutscher Wetterdienst (DWD), Open Data. Kartenbasis: OpenStreetMap. Keine amtliche Wetterberatung.