homelab-brain/flugpreisscanner/STATE.md
root e607b1fba0 docs: STATE.md Updates - FuenfVorAcht Review-Schritt entfernt, Redakteur RSS-Integration, Flugpreisscanner
- fuenfvoracht/STATE.md: Review-Flow entfernt, direkt approved, neuer Changelog
- arakava-news/STATE.md: Aktualisiert
- redax-wp/STATE.md + src/app.py: Aktualisiert
- flugpreisscanner/STATE.md: Aktualisiert
- infrastructure/STATE.md: Aktualisiert
- fuenfvoracht READMEs und Kurzuebersichten hinzugefuegt

Made-with: Cursor
2026-02-27 21:24:31 +07:00

8.2 KiB
Raw Blame History

STATE: Flugpreisscanner

Stand: 26.02.2026


Status

🚀 In Betrieb — seit 25.02.2026

Komponente Status
flugscanner-hub Läuft (Docker: web + scheduler)
flugscanner-asia Läuft (Docker: agent + noVNC)
flugscanner-mu Läuft (Docker: agent + noVNC)
Forgejo-Repo http://100.89.246.60:3000/orbitalo/flugpreisscanner
Dashboard http://100.92.161.97:8080
Telegram Bot @CX_HKG_Alert_bot — Alerts + /preis + /best + /status

Kernidee

Täglich günstigste Flüge FRA → KTI (Frankfurt → Phnom Penh) automatisch finden. Kabine: Economy · Gepäck: 1 Koffer + Handgepäck · Aufenthalt: ~2 Monate Fokus: Cathay Pacific (CX) via Hong Kong — beste Preis-Leistung in Economy. KI wertet aus: jetzt buchen oder warten? Scraping läuft bewusst von Heimnetz-IPs — nicht von Hetzner (Datacenter-IPs werden geblockt).

Route: 🇭🇰 HKG Stopover — Multi-City FRA→HKG (12 Nächte) → KTI → FRA. Realistischer Preis: 9001.050 EUR Roundtrip Economy.


Container

CT Name Server LAN-IP Tailscale-IP Aufgabe
115 flugscanner-hub pve-hetzner 10.10.10.115 100.92.161.97 Gehirn: Dashboard + Scheduler + KI-Auswertung (OpenRouter) + DB + Job-Koordination
115 flugscanner-asia pve1 Kambodscha 192.168.0.131 100.112.190.22 Scraping-Node A: SeleniumBase CDP + noVNC, Heimnetz-IP Asien
145 flugscanner-mu helmut-pve Muldenstein 192.168.178.130 100.75.182.15 Scraping-Node B: SeleniumBase CDP + noVNC, Heimnetz-IP Deutschland

Zugänge:

  • Hub (pve-hetzner): ssh root@100.88.230.59 PW: Astral-Proxmox!2026 → pct exec 115
  • Asia (pve1): ssh root@192.168.0.197 PW: astral66 → pct exec 115
  • Muldenstein: ssh root@100.75.182.15 PW: astral66 (direkt, kein pct nötig)
  • helmut-pve: ssh root@100.87.235.11 PW: astral66

Wichtig:

  • Scraping läuft NIE von CT 115 / Hetzner aus
  • CT 115 koordiniert nur — die Nodes führen aus
  • Muldenstein = deutsche IP (beste Ergebnisse für Kayak, Momondo)
  • Kambodscha = asiatische IP (Momondo/Traveloka werden übersprungen — Geo-Block)
  • Tailscale auf allen Containern — sichere Kommunikation über Tailnet

CT 115 — Flugpreisscanner Hub

Nur Koordination, Auswertung, Dashboard — KEIN Scraping, KEIN noVNC hier.

Dienste (Docker)

Service Container Port Aufgabe
web flugscanner-web 8080 Flask Dashboard
scheduler flugscanner-scheduler Jobs verteilen, KI auslösen, Telegram Bot

Pfade

/opt/flugscanner/
├── hub/
│   ├── docker-compose.yml
│   ├── .env
│   ├── Dockerfile
│   ├── data/
│   │   └── flugscanner.db     ← SQLite Datenbank
│   └── src/
│       ├── web.py             ← Flask Dashboard + API
│       ├── scheduler.py       ← Job-Koordination + Telegram Bot
│       ├── ki.py              ← OpenRouter Auswertung + Plausibilität
│       ├── db.py              ← DB-Zugriff + Init
│       └── requirements.txt
└── node/                      ← (auf Nodes ausgecheckt)

Scraping-Nodes (asia + mu)

Dienste (Docker)

Service Container Port Aufgabe
agent flugscanner-agent 5010 Jobs empfangen, Selenium starten
novnc flugscanner-novnc 6080 Chrome live im Browser sehen

Pfade

/opt/flugscanner/node/
├── docker-compose.yml
├── .env                       ← NODE_NAME=flugscanner-asia/mu
├── Dockerfile
└── src/
    ├── agent.py               ← Flask API (POST /job, GET /status)
    ├── worker.py              ← SeleniumBase CDP Scraper
    └── requirements.txt

Kommunikation

Hub Scheduler → POST http://[Node-Tailscale-IP]:5010/job
  { "scanner": "kayak_multicity", "von": "FRA", "nach": "KTI", "kabine": "economy", ... }

Node antwortet:
  { "results": [...], "node": "flugscanner-mu", "count": 10, "screenshot_b64": "..." }

Scanner

Scanner Status Anmerkung
Kayak (Roundtrip) Aktiv Beste Datenquelle, GDPR-Consent automatisiert
Kayak Multi-City CX via HKG Aktiv Primärer Scanner — FRA→HKG→KTI→FRA
Cathay Pacific direkt Aktiv CX direkt buchen — FRA→KTI Roundtrip via cathaypacific.com
Trip.com Aktiv Gute Ergänzung, auch CX-Filter
Momondo Aktiv Nur auf Muldenstein (Geo-Block aus Asien)
Google Flights ⚠ Eingeschränkt Wenige Ergebnisse, Consent-Probleme
Traveloka ⚠ Nur Muldenstein Geo-Block aus Asien
Wego Deaktiviert
Skyscanner Deaktiviert Bot-Detection

Node-spezifische Einschränkungen

Momondo und Traveloka werden auf flugscanner-asia automatisch übersprungen (Geo-Block). Konfiguration: NODE_SCANNER_SKIP in scheduler.py.


Anti-Bot-Strategie

  • Scan-Intervall: zufällig 2545 Minuten (nicht regelmäßig)
  • SeleniumBase UC/CDP Mode (undetected Chromium)
  • GDPR-Consent automatisch wegklicken (Kayak, Momondo)
  • Zwei verschiedene Geo-Locations (Kambodscha + Deutschland)
  • Scrape-URL (.de) getrennt von Booking-URL (.com) — Nutzer sieht internationale Preise

Telegram Bot

Bot: @CX_HKG_Alert_bot Token: 8693839370:AAEPG0t2gA5jkLFH3J8UmstZMkHPdp0aTG4 Chat-ID: 674951792

Befehle

Befehl Funktion
/preis Aktueller CX-Preis via HKG
/best Top 3 günstigste heute
/status Systemstatus (Nodes, letzte Scan-Zeit)

Automatische Nachrichten

Wann Was
Täglich 07:00 Morgenbericht mit Preisübersicht
Bei CX < 900€ Preis-Alert
Bei Anstieg > 50€ Preisanstieg-Warnung
Nach 3x Null-Ergebnissen Scanner-Problem-Alert (pro Node)

Datenbank (SQLite auf CT 115)

Pfad: /opt/flugscanner/hub/data/flugscanner.db

Tabelle Inhalt
jobs Geplante Scraping-Jobs (Route, Anbieter, Intervall, Airline-Filter)
prices Rohe Preisdaten (Preis, Datum, Anbieter, Node, Booking-URL, plausibel)
screenshots Vision-AI Screenshots mit Kabinenklassen-Erkennung
analyses KI-Auswertungen mit Timestamp
prompts Editierbare KI-Prompts
nodes Registrierte Scraping-Nodes + Status
logs System-Logs

KI-Auswertung

  • Läuft automatisch nach jedem Scraping-Durchlauf
  • Vision AI: Screenshots werden per gpt-4o-mini klassifiziert (Economy/PE/Business)
  • Plausibilitätsprüfung: Preise 70012.000€ für Economy Roundtrip
  • Marktanalyse: Prompt editierbar im Dashboard
  • OpenRouter Guthaben wird im Dashboard angezeigt

OpenRouter

Variable Wert
OPENROUTER_API_KEY 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
AI_MODEL openai/gpt-4o-mini

Preiserwartung (Stand 26.02.2026)

FRA → HKG → Phnom Penh → FRA — Cathay Pacific Economy Roundtrip

Metrik Wert
Günstigster ~726 EUR
Realistischer Schnitt 9001.050 EUR
Gute Airlines (CX/SQ/TG) Durchschnitt ~1.030 EUR
Zum Vergleich: Reisebüro VA PE ~2.000 EUR

Repo

git.orbitalo.net/orbitalo/flugpreisscanner API-Token (cursor-deploy-3): a6dd1ee58e091c894169c5ae15f6b74bb9461c56


Änderungslog

Datum Was
25.02.2026 System live geschaltet
25.02.2026 Cookie-Banner-Fix + Screenshot-Verbesserungen
26.02.2026 Umstellung PE → Economy, CX via HKG als Hauptroute
26.02.2026 Telegram Bot @CX_HKG_Alert_bot eingerichtet
26.02.2026 SeleniumBase 4.34 → 4.47 (CDP-Verbesserungen)
26.02.2026 _scrape_url / _booking_url Trennung (Scrape .de, Booking .com)
26.02.2026 GDPR-Consent-Handling für Kayak/Momondo
26.02.2026 NODE_SCANNER_SKIP: Momondo/Traveloka auf Asia deaktiviert
26.02.2026 Alert-Zähler jetzt pro Node (kein Spam durch Geo-Blocks)
26.02.2026 SSH-Fix Muldenstein (PermitRootLogin yes)
26.02.2026 Doku in CT999 ergänzt (ct-145-flugscanner-mu.md + index.md)