- Added SSL configuration to the backend, including self-signed certificate generation and management. - Updated `setup_myp.sh` to create SSL certificates during installation. - Enhanced `app.py` to support SSL context for secure communication. - Introduced a new SSL management menu in the setup script for easier certificate handling. - Updated frontend API calls to use HTTPS for secure data transmission. - Implemented kiosk mode features, including automatic browser launch with SSL support. - Improved documentation in `SUMMARY.md` to reflect new features and network topology changes.
10 KiB
10 KiB
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