Schwester-Projekt zu arduino.lehrstun.de fuer die 3D-Druck-AG am Lessing-Gymnasium. Offene jahrelange Nachmittags-AG (kein Trimester), 8-10 Einzel-SuS mit optionalen 2er-Paarungen, 4 Bambu-Lab-Drucker (3 geschlossen + 1 A1 mini). Konzept v2 (Reality-Check-Iteration 2026-05-24): - Onboarding-Pfad statt Pflicht-Lektionen (L1-L3 selbst-zertifiziert) - Selbstlern-Loop als Kern: SuS-Projekte wachsen die interne Bibliothek - Drill-Down-Lehrer-Dashboard (Wer ist hier / Wartet Review / Haengt fest) - Cockpit progressiv: zeigt nur was zum Status passt - Bambu-Cloud-API fuer Drucker-Live-Status (fragil + Fallback manuell) - Three.js-Vorschau fuer Cover-aus-3D-Ansicht (Etappe 6) - Vollstaendige Doku als Obsidian-Vault (24 Markdown-Dateien) - Entscheidungen E-001 bis E-022 in docs/decisions.md Etappe 1 lauffaehig (~1800 Zeilen Code): - Blueprint-Struktur (V8): routes/oeffentlich+profil+admin+api, services/auth+bambu+datei - Komplettes Schema in database.py (14 Tabellen, idempotent) - Login mit bcrypt + persistentem Lockout in DB (V7, verbessert ggue Arduino-Kurs der In-Memory-Dict nutzt) - Admin-Login + Profile-CRUD + PIN-Reset + PIN-Karten-Druckbogen - Inline-Edit-Endpunkt mit Whitelist + Audit-Log - Seeds: AG lessing-3d-ag + 4 Drucker + Default-Einstellungen - Smoke-Test bestanden (Login, Profil-Anlage, Lockout-Logging) Nicht im Repo (.gitignore): .env, *.db, venv/, .obsidian/workspace.json
4.0 KiB
4.0 KiB
type, projekt, stand, tags
| type | projekt | stand | tags | |||
|---|---|---|---|---|---|---|
| konzept-modul | 3d.lehrstun.de | 2026-05-23 |
|
Slot-System (Drucker-Reservierung)
DB-Tabelle: datenmodell#slot. Routes: routen. Drucker-Status: druckerapi.
Ziel
Faire Verteilung der 4 Drucker auf 8-10 SuS, die unterschiedlich lange Drucke fahren. Funktioniert auch bei Drucker-Ausfall (druckerapi kann brechen).
Default: Windhund-Prinzip
- Wer zuerst kommt, bekommt den Slot.
- Jede:r SuS reserviert selbst über das Cockpit.
- Konflikt-Check: keine Überlappung mit aktiver/zukünftiger reservierter Reservierung auf demselben Drucker.
Override: Lehrer-Priorität
- Im routen#admin kann Herb/Markus pro Slot
prioritaetsetzen (Default 0, höher = wichtiger). - Sortierung im UI:
ORDER BY prioritaet DESC, erstellt_am ASC. - Bei Konflikt durch Priorisierung: Site zeigt eine Warnung, verschiebt nichts automatisch — Herb entscheidet.
Slot-Granularität (Entscheidung offen)
Drei Optionen, siehe offene-fragen#slot-granularität:
| Option | Vorteil | Nachteil |
|---|---|---|
| Freie Zeitspannen (Start + Dauer) | flexibel, passt zu realer Druckzeit (15 Min - 8 h) | Konflikt-Check komplexer |
| Feste Stunden-Slots | einfach zu buchen, kalenderartig | unflexibel — 4-h-Druck blockiert 4 Slots |
| Tages-Slots (Vormittag/Nachmittag/Nacht) | passt zu langen Drucken | zu grob für kurze Drucke |
Empfehlung aus Recherche: freie Zeitspannen, weil Druckzeit stark variiert.
Drucker-Ausfall-Handling
Wenn druckerapi meldet status = failed oder offline für > 10 Min:
flowchart TB
A[Drucker fällt aus] --> B{Aktive Slots betroffen?}
B -- ja --> C[Dashboard: rote Markierung]
C --> D[Vorschlag: Slot auf anderen Drucker verschieben]
D --> E[Admin: 1-Klick-Verschieben]
E --> F[Slot.drucker_id ändern]
F --> G[Cockpit-Notiz für betroffene SuS]
B -- nein --> H[Drucker als 'Wartung nötig' markieren]
Konflikt-Erkennung
-- Neue Reservierung würde mit bestehender überlappen?
SELECT COUNT(*) FROM slot
WHERE drucker_id = :drucker_id
AND status IN ('reserviert', 'aktiv')
AND start_zeit < :neue_ende
AND ende_zeit > :neue_start;
Falls > 0 Treffer: Reservierung abgelehnt mit Liste der Konflikte.
UI-Skizze (Cockpit-Slot-Buchung)
┌─ Drucker reservieren ──────────────────────────┐
│ │
│ Drucker: [ ▼ P1S #1 ] │
│ Start: [ Heute, 14:30 ] │
│ Dauer: [ 2 h 30 m ] (Schätzung aus 3MF) │
│ │
│ ┌─ Kalender ────────────────────────────────┐ │
│ │ P1S #1 ▓▓░░░░░░░░░░░░▓▓▓▓▓░░░░░░░░░░░ │ │
│ │ P1S #2 ░░░░░▓▓▓▓░░░░░░░░░░░░░░░▓▓▓░░░ │ │
│ │ X1C ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │
│ │ A1 mini ▓▓▓▓▓▓▓░░░░░░░░░░░▓▓░░░░░░░░░░ │ │
│ │ 09 11 13 15 17 19 21 23 │ │
│ └────────────────────────────────────────────┘ │
│ │
│ [ Reservieren ] │
└─────────────────────────────────────────────────┘
(Genaues Design folgt in etappen#etappe-6.)
Querverweise
- DB-Schema: datenmodell#slot
- Drucker-Live-Status (für Ausfall-Erkennung): druckerapi
- Routes: routen#profil + routen#admin
- Offene Frage zur Granularität: offene-fragen