bluegreencity-ki

Data Flow Overview – Von der Baumliste bis zur Bewässerungseinsatzzusage

Status: aktiv (Stand: 26.09.2026, issue #248)

Diese Seite beschreibt den vollständigen Datenfluss des Tools end-to-end: Woher die Eingaben kommen, welche Zwischenschritte es gibt, wo jedes Ergebnis landet und wer es konsumiert. Die zweite Seite dieses Dokuments sollte ausreichen, um dem Grünenflächenamt oder h_da zu erklären, wo eine Zahl herkommt.

Diagramm (Kurzform)

flowchart TD
    subgraph Quellen
        LHH["LHH Baumkataster CSV (v6)"]
        DWD["DWD Wetter (HOYRAS)"]
        OSM["OSM/ALKIS, LBEG, Citree (Enrichment)"]
    end

    subgraph Daily_0400["Taeglich ab 03:00 (Windows-Task)"]
        DWDUPD["03:00 DWD-Cache-Update<br/>run_scheduled_dwd_update.ps1"]
        SWBM["04:00 SWBM-Lauf<br/>run_scheduled_water_balance.ps1<br/>(Letzte 3 Tage + 7 Tage Vorhersage)"]
        AGG["Stadt-/Niederschlags-/Alters-Aggregat<br/>swbm_city_daily_agg etc."]
        OP["Operational Products<br/>refresh_operational_tree_products.py<br/>(Risiko-GPKG + SWBM-State)"]
        PLAN["Bewaesserungsplanung<br/>run_irrigation_planning.py (MILP)"]
    end

    subgraph PostGIS["PostGIS (bgcki)"]
        STATE["swbm_daily_state<br/>(~134.760 Profile/Tag)"]
        OPPROD["operational_tree_product"]
        DECISION["irrigation_plan_decision"]
        REVIEW["irrigation_plan_review<br/>+ work_order + execution<br/>(HITL-Audit-Trail)"]
    end

    subgraph ML["ML-Refresh (manuell nachts, ~woechentlich)"]
        MLRUN["run_ml_refresh_overnight.ps1<br/>Train + Inference + SHAP<br/>tree_features.gpkg Rebuild"]
    end

    subgraph HITL["Taipy HITL (Forschungsdienst)"]
        TAIPI["Taipy GUI<br/>Planentwurf + Freigabe<br/>+ Ausfuehrung + Szenario<br/>(SHAP-Begruendung)"]
    end

    subgraph Consumer
        GRAF["Grafana: Lagebild +<br/>Bewaesserungsbetrieb<br/>(inkl. HITL-Flow)"]
        QGIS["QGIS/QWC via WFS"]
        GFMS["GFMS (LHH) –<br/>Einsatzplanung"]
    end

    LHH --> SWBM
    OSM --> SWBM
    DWD --> DWDUPD --> SWBM
    SWBM --> STATE
    SWBM --> AGG --> GRAF
    MLRUN -. "Risiko-GPKG<br/>(Pointer in config)" .-> OP
    STATE -. "State-Parquet-Mirror" .-> OP
    OP --> OPPROD
    OPPROD --> GRAF
    OPPROD --> QGIS
    STATE --> PLAN
    OPPROD --> PLAN
    PLAN --> DECISION
    DECISION --> GRAF
    DECISION --> TAIPI
    TAIPI --> REVIEW
    REVIEW --> GRAF
    DECISION -. "Export/Review" .-> GFMS
    GFMS -. "Bewaesserungs-Events (#249, WFS 2027;<br/>CSV-Import vorbereitet)" .-> STATE

Schritt-für-Schritt

0. Eingaben und Id-Konventionen

Thema Konvention
Baum-Id objectid des Baumkatasters (stabil, als Text behandelt)
Koordinatensystem EPSG:25832 (UTM 32N) in allen Vektoren und Rastern
Temperatur immer Celsius
Tagesdatum state_date / run_date als YYYY-MM-DD
Szenario-Fan-out Bäume mit unbekanntem Alter/SVF haben mehrere Profile pro Tag (3 bzw. 9 model_version-Varianten) – das ist Design, keine Duplikate

1. Baumkataster (LHH)

2. DWD-Wetter (täglich 03:00)

3. Bodenwasserhaushalt SWBM (täglich 04:00)

4. Aggregationen für Historie-Dashboards (direkt nach 3)

5. Operational Products (Grafana-/QGIS-Quelltabelle)

6. ML-Refresh (manuell nachts, ~wöchentlich)

7. Bewässerungsplanung (direkt nach 5, täglich)

8. Rückkopplung Feld → Modell (offen)

Fehlerfortpflanzung (kurz)

Bezug