Files
3d.lehrstun.de/docs/architektur.md
Hans Puettmann 76addcb846 Herr Rechmann + L3-Titel + L2-Workflow
Drei Aenderungen aus Herbs Feedback:

1. Markus -> Herr Rechmann (60 Treffer in 26 Dateien + DB-Lektionen L2/L3)
   Konvention: Herb bleibt 'Herb' (interne Anrede fuer Claude), Markus
   wird in SuS-sichtbaren Texten als 'Herr Rechmann' ausgeschrieben.
   Wo 'Herb und Markus' stand -> 'Herb und Herr Rechmann'. Wenn das
   stilistisch zu uneinheitlich wirkt, koennen wir Herb spaeter auch
   in SuS-Texten zu 'Herr Puettmann' umziehen.

2. L3-Titel: 'Customizer — parametrisches 3D-Modell anpassen'
   -> 'Mein eigenes 3D-Modell designen'
   Begruendung Herb: 'Customizer' + 'parametrisch' wirken abschreckend.
   Methode kommt in den Aufgabe-Text, nicht in den Titel.

3. L2-Inhalt komplett geschrieben (~4.8 KB):
   - 8-Schritte-Workflow vom Stoebern auf Printables bis zum
     Druck-Abholen
   - A1-mini-Spezifika klar markiert (offen → nur PLA, 18×18 cm)
   - P-Serie-Spezifika fuer groessere Drucke
   - Tipps zur Modell-Wahl (klein anfangen, 4+ Sterne)
   - Was-tun-wenn-Tabelle bei Druckproblemen
   - Lehrer-Eskalations-Pfad: pausieren via Handy-App + Lehrer rufen

   Quellenlage: PDF-Anleitung A1 mini im OneDrive + Bambu-Wiki online
   waren beide nicht maschinell zugaenglich (pdftoppm fehlt, Wiki
   gibt HTTP 402). Workflow basiert auf Standard-Bambu-Studio-Bedienung
   + Konsistenz mit der L1-P2S-Beschreibung. Herb/Herr Rechmann pruefen
   die A1-mini-Spezifika beim Lehrer-Test und korrigieren via Inline-Edit
   (oder per Migration, wenn Inline-Edit-UI noch nicht live ist).
2026-05-24 19:51:19 +02:00

2.9 KiB

type, projekt, stand, tags
type projekt stand tags
konzept-modul 3d.lehrstun.de 2026-05-23
konzept
architektur

Architektur

Komponentensicht der 3D-Druck-AG-Plattform. Detail-Schema siehe datenmodell, Bambu-Anbindung siehe druckerapi, Reservierungen siehe slotsystem.

1. Komponenten

flowchart LR
    subgraph Browser["Browser"]
        SUS[SuS-Cockpit]
        LEHRER[Lehrer-Dashboard]
        OEFF[Öffentliche Seiten]
    end

    subgraph Server["Hetzner: 3d.lehrstun.de:5057"]
        FL[Flask-App]
        DB[(SQLite)]
        POLL[Drucker-Poll-Worker<br/>alle ~30 s]
        FL --- DB
        POLL --- DB
    end

    subgraph Schule["Schule"]
        BS_PC[Bambu Studio<br/>auf Schul-PCs]
        DRU[4 Bambu-Drucker]
        BS_PC -.WLAN.-> DRU
    end

    subgraph Cloud["Bambu Cloud"]
        BAMBU[api.bambulab.com<br/>+ MQTT]
    end

    Browser -->|HTTPS| FL
    POLL -->|HTTPS| BAMBU
    DRU -->|MQTT| BAMBU
    BS_PC -->|HTTPS| BAMBU

2. Datenfluss bei einem Druckauftrag

sequenceDiagram
    actor SuS
    participant Site as 3d.lehrstun.de
    participant DB as SQLite
    participant Studio as Bambu Studio
    participant Drucker
    participant Cloud as Bambu Cloud

    SuS->>Site: Druckauftrag eintragen (Titel, Dauer, Material)
    Site->>DB: druckauftrag (status=geplant)
    SuS->>Site: Slot reservieren (Drucker X, 14:00-16:00)
    Site->>DB: slot (status=reserviert)

    Note over SuS,Studio: SuS slict ausserhalb der Site

    SuS->>Studio: Modell slicen
    Studio->>Cloud: Job hochladen
    Cloud->>Drucker: Job starten
    Drucker->>Cloud: Status (printing, ETA, ...)

    loop alle 30 s
        Site->>Cloud: GET Status aller Drucker
        Cloud-->>Site: JSON
        Site->>DB: drucker_status aktualisieren
    end

    SuS->>Site: Cockpit aufrufen
    Site-->>SuS: "Dein Job auf Drucker X läuft, noch 1h 20m"

    Drucker->>Cloud: Status (finished)
    Site->>Cloud: GET (im nächsten Poll)
    Site->>DB: druckauftrag.status = fertig
    SuS->>Site: "Abgeholt" klicken
    Site->>DB: druckauftrag.status = abgeholt

3. Fehlerfälle

flowchart TB
    A[Drucker meldet 'failed' an Cloud] --> B{Poll erkennt es}
    B --> C[drucker_status.status = failed]
    C --> D[Dashboard zeigt rote Markierung]
    D --> E{Aktive Slots betroffen?}
    E -- ja --> F[Vorschlag: Slot auf anderen Drucker verschieben]
    E -- nein --> G[Nur Drucker als 'Wartung nötig' markieren]
    F --> H[Herb/Herr Rechmann klickt 'Verschieben']
    H --> I[Slot.drucker_id neu, Notiz im SuS-Cockpit]

    J[Cloud-API antwortet nicht] --> K{Letzter Poll-Erfolg > 5 Min her?}
    K -- ja --> L[UI: 'Status veraltet']
    L --> M[Admin: Button 'Manueller Status']
    K -- nein --> N[Normal weiter]

4. Querverweise