# MYP-Plattform Projektübersicht ## 1. Projektüberblick Die MYP-Plattform (My Young Printer) ist ein Verwaltungssystem für 3D-Drucker mit folgenden Kernfunktionen: - Zentrale Verwaltung mehrerer 3D-Drucker über ein Netzwerk - Steuerung der Stromversorgung über SmartPlugs (Tapo P110) - Benutzer- und Auftragsmanagement mit Reservierungsfunktionalität - Offline-Fähigkeit durch Service Worker Integration - REST-API für Frontend und externe Dienste - Automatisierte Auftrags-Planung und -Ausführung via Scheduler - Verschlüsselte Kommunikation über HTTPS mit selbstsignierten Zertifikaten - Kiosk-Modus für Informationsdisplays und öffentliche Terminals Das Backend basiert auf Flask (Python) und nutzt eine SQLite-Datenbank für die Datenspeicherung. ## 2. Netzwerk-Architektur & Digitale Vernetzung Die MYP-Plattform setzt auf eine verteilte Netzwerk-Architektur: ### Hauptkomponenten - **Flask-Backend-Server**: Stellt die zentrale API bereit (Port 5000) - **Smart-Plugs (Tapo P110)**: Steuerung der Drucker-Stromversorgung via IP-Netzwerk - **3D-Drucker**: Werden als Netzwerkgeräte mit festen IP-Adressen konfiguriert - **Frontend**: Als Web-App mit Offline-Funktionalität konzipiert - **PWA-Funktionalität**: Service Worker für Offline-Betrieb und Cache-Management - **Kiosk-Displays**: Raspberry Pi mit Chrome im Kiosk-Modus ### Netzwerk-Topologie ``` ┌──────────────────┐ │ Command Center │ │ (192.168.0.1) │ └──────────┬───────┘ │ ▼ ┌───────────────┐ ┌─────────────────────┐ ┌──────────────┐ │ Frontend/PWA │◄────►│ Flask-Backend │◄────►│ Smart-Plugs │ │(192.168.0.105)│ │ (192.168.0.105) │ │(192.168.0.1xx)│ └───────┬───────┘ └─────────┬───────────┘ └──────┬────────┘ │ │ │ │ │ ▼ ┌───────▼───────┐ │ ┌────────────────┐ │ Kiosk-Mode │ │ │ 3D-Drucker │ │ (10.0.0.1-10) │ │ │(192.168.0.1xx) │ └───────────────┘ ▼ └────────────────┘ ┌─────────────────────┐ │ Ad-hoc Pi-Netzwerk │ │ (10.0.0.x/24) │ └─────────────────────┘ ``` ### Kommunikationsprotokolle - **HTTPS/REST**: Zwischen Frontend und Backend (Port 5000) - **JSON**: Standardformat für Datenaustausch - **Tapo-Protokoll**: Für Smart-Plug-Steuerung via PyP110-Bibliothek - **SQLite**: Lokale Datenbankanbindung - **TLS 1.2/1.3**: Verschlüsselte Kommunikation mit selbstsignierten Zertifikaten ### Vernetzungs-Features - IP-basierte Identifikation der Drucker im lokalen Netzwerk - SmartPlug-Integration für Fernsteuerung der Stromversorgung - Offline-Betriebsmodus mit synchronisierenden Service Workern - Automatische Erkennung der Drucker-Status via Netzwerk-Polling - Kiosk-Modus mit automatischem Start nach Systemneustart - Command Center für zentrale Verwaltung aller Komponenten ## 3. Hauptkomponenten des Backends ### Core-Komponenten - **app.py**: Hauptanwendung mit API-Endpunkten und Route-Definitionen - **models.py**: Datenbankmodelle für User, Printer, Job und Stats - **job_scheduler.py**: Background-Task-Scheduler für automatisierte Prozesse - **Blueprints**: Modulare Komponenten für Auth, User, etc. ### API-Layer Das Backend stellt eine umfassende REST-API bereit: - **User Management**: Authentifizierung, Profilmanagement - **Printer Management**: Druckerstatus, Steuerung - **Job Management**: Auftragsplanung, -verwaltung und -überwachung - **Stats API**: Statistiken und Auswertungen - **Kiosk API**: Steuerung der Kiosk-Displays ### SmartPlug-Integration - Nutzung der PyP110-Bibliothek für die Kommunikation mit Tapo-SmartPlugs - Automatisierte Steuerung der Stromversorgung basierend auf Jobplanung - Status-Monitoring und Fehlerbehandlung ### SSL/HTTPS-Implementierung - Selbstsignierte Zertifikate für verschlüsselte Kommunikation - Automatische Zertifikatsgenerierung während der Installation - Konfigurierbare Zertifikatslaufzeit (Standard: 10 Jahre) - Prüfwerkzeuge für Zertifikatsstatus und -gültigkeit ## 4. Datenbankmodell & Scheduler-Logik ### Datenbankmodelle - **User**: Benutzer-Accounts mit Rollenmanagement - **Printer**: 3D-Drucker mit Netzwerkkonfiguration und Status - **Job**: Druckaufträge mit Zeitplanung und Statusinformationen - **Stats**: Globale Statistikdaten ### Scheduler-Architektur Der BackgroundTaskScheduler bietet: - Registrierung von Task-Funktionen mit individuellen Intervallen - Zeitgesteuerte Ausführung im Hintergrund - Kommunikation mit Smart-Plugs zur zeitgesteuerten Stromversorgung - Automatisches Job-Management ### Datenbanksicherung - SQLite-Datenbank mit Backup-Funktionalität - Einfache Administrierbarkeit durch übersichtliche Tabellenstruktur ## 5. API-Endpunkte | Endpunkt | Methode | Funktion | Authentifizierung | |----------|---------|----------|-------------------| | /api/jobs | GET | Auftragsliste abrufen | Ja | | /api/jobs | POST | Neuen Auftrag erstellen | Ja | | /api/jobs/{id} | GET | Auftragsdetails abrufen | Ja, Besitzer | | /api/jobs/{id}/extend | POST | Auftrag verlängern | Ja, Besitzer | | /api/jobs/{id}/finish | POST | Auftrag abschließen | Ja | | /api/printers | GET | Druckerliste abrufen | Ja | | /api/printers | POST | Neuen Drucker anlegen | Ja, Admin | | /api/printers/status | GET | Status aller Drucker | Ja | | /api/stats | GET | Statistiken abrufen | Ja | | /api/users | GET | Benutzerliste | Ja, Admin | | /api/users | POST | Neuen Benutzer anlegen | Ja, Admin | | /api/scheduler/status | GET | Scheduler-Status | Ja | | /api/scheduler/start | POST | Scheduler starten | Ja, Admin | | /api/scheduler/stop | POST | Scheduler stoppen | Ja, Admin | | /api/kiosk/status | GET | Kiosk-Status | Ja | | /api/kiosk/activate | POST | Kiosk aktivieren | Ja, Admin | | /api/kiosk/deactivate | POST | Kiosk deaktivieren | Ja, Admin | | /auth/login | POST | Anmelden | Nein | | /auth/logout | GET/POST | Abmelden | Ja | ## 6. Sicherheits- & Zugriffskonzept ### Authentifizierung - Flask-Login für Session-Management - BCrypt für sichere Passwort-Hashes - Role-Based Access Control (RBAC) mit Admin- und Benutzerrollen - Eigene Decorator für erweiterte Zugriffskontrollen (z.B. job_owner_required) ### Netzwerksicherheit - HTTPS mit selbstsignierten TLS-Zertifikaten - CORS-Konfiguration für sichere Cross-Origin-Requests - Sicherheitsheader im Response (X-Content-Type-Options, X-Frame-Options) - Keine sensiblen Daten in URLs oder Query-Parametern ### Offline-Sicherheit - Selektive Cache-Strategie für sensible Daten - Ausschluss von API-Endpunkten mit vertraulichen Informationen vom Caching - Eingeschränkte Funktionalität im Offline-Modus ## 7. Build- & Deployment-Ablauf ### Installationsprozess Die Installation der MYP-Plattform erfolgt über verschiedene Shell-Skripte: - **setup_myp.sh**: Hauptinstallationsskript (Command Center) - Standardinstallation mit HTTPS-Unterstützung - Kiosk-Modus-Installation (gehärtete Variante) - Netzwerk- und DNS-Konfiguration - Systemüberwachung und Logging - **create_ssl_cert.sh**: Generiert selbstsignierte Zertifikate - Unterstützt Multiple-SAN-Entries (Hostname, IP-Adressen) - Konfigurierbare Zertifikatslaufzeit - Automatische Fehlerbehandlung - **ssl_check.sh**: Prüft SSL-Zertifikatsstatus - Validiert Gültigkeitsdauer - Zeigt Fingerprint und Subject-Details - Warnt vor bald ablaufenden Zertifikaten ### Backend-Deployment - Python 3.11 venv-Umgebung - Konfigurierbare Entwicklungs- und Produktionsumgebungen - Log-Rotation und strukturierte Logging-Hierarchie - SSL/TLS-Unterstützung mit automatischer Zertifikatsgenerierung ### Kiosk-Modus - Basiert auf Raspberry Pi mit Chromium Browser - Automatischer Start im Vollbildmodus nach Boot - Deaktivierung von Fehlerdialogen und Warnungen - Integrierte Überwachung und Watchdog-Funktionalität - Spezielle Konfiguration für öffentliche Informationsdisplays - Ignoriert SSL-Zertifikatswarnungen für selbstsignierte Zertifikate ### Command Center - Zentrales Verwaltungstool mit CLI-Interface - Integrierte Systemdiagnose und -überwachung - Einfache Verwaltung von SSL-Zertifikaten - Fernsteuerung von Kiosk-Displays - Netzwerk- und IP-Konfiguration - Dienst-Management (Start/Stop/Neustart) ### Frontend-Integration - Tailwind CSS für responsive UI - CLI-Befehle für Tailwind-Kompilierung - Service Worker für PWA-Funktionalität - HTTPS-Unterstützung mit Proxy-Konfiguration ### Systemd-Integration - Automatischer Start des Backend-Servers - Überwachung und Neustart bei Fehlern - Logging-Integration in systemd-journal ## 8. Offene Punkte / Verbesserungspotenzial ### Digitale Vernetzung - OPC UA oder MQTT-Integration für direktere Druckerkommunikation - Echtzeit-Statusüberwachung statt Polling - Push-Benachrichtigungen für Fertigstellungs- und Fehlerereignisse - VPN-Unterstützung für Remote-Zugriff außerhalb des lokalen Netzwerks ### Sicherheit - OAuth2-Integration für externe Authentifizierungsquellen - Zwei-Faktor-Authentifizierung - Zertifikatsbasierte Geräteauthentifizierung für SmartPlugs - Letsencrypt-Integration für vertrauenswürdige Zertifikate ### Skalierbarkeit - Migration von SQLite zu einer skalierbaren Datenbank - Containerisierung mit Docker für einfacheres Deployment - Horizontale Skalierung der Backend-Komponenten