483 lines
14 KiB
Markdown
483 lines
14 KiB
Markdown
# MYP Platform - Benutzerhandbuch
|
|
|
|
## Inhaltsverzeichnis
|
|
|
|
1. [Übersicht](#übersicht)
|
|
2. [Admin-Funktionen](#admin-funktionen)
|
|
3. [Gastauftrag-System mit OTP](#gastauftrag-system-mit-otp)
|
|
4. [Warteschlangen-System](#warteschlangen-system)
|
|
5. [Benutzerinterface](#benutzerinterface)
|
|
6. [Drucker-Management](#drucker-management)
|
|
7. [Job-Verwaltung](#job-verwaltung)
|
|
8. [Sicherheit und Berechtigungen](#sicherheit-und-berechtigungen)
|
|
|
|
## Übersicht
|
|
|
|
Die MYP Platform ist ein umfassendes 3D-Drucker-Verwaltungssystem, das speziell für Mercedes-Benz entwickelt wurde. Es ermöglicht die effiziente Verwaltung von 3D-Druckaufträgen, Benutzern und Druckern in einer sicheren, webbasierten Umgebung.
|
|
|
|
### Hauptfunktionen
|
|
|
|
- **Benutzer- und Rollenverwaltung** mit granularen Berechtigungen
|
|
- **3D-Drucker-Management** mit Smart-Plug-Integration
|
|
- **Job-Planung und -Überwachung** mit Konfliktmanagement
|
|
- **Gastauftrag-System** mit sicherem OTP-Code-System
|
|
- **Warteschlangen-Management** für Offline-Drucker
|
|
- **Admin-Dashboard** mit umfassenden Verwaltungsfunktionen
|
|
|
|
## Admin-Funktionen
|
|
|
|
### Zugriff auf das Admin-Dashboard
|
|
|
|
Das Admin-Dashboard ist unter `/admin` verfügbar und erfordert Admin-Berechtigung.
|
|
|
|
#### Benutzer-Verwaltung
|
|
|
|
**CRUD-Operationen für Benutzer:**
|
|
- **Erstellen**: Neue Benutzer mit E-Mail, Name und Rolle
|
|
- **Bearbeiten**: Benutzerdaten und Berechtigungen ändern
|
|
- **Löschen**: Benutzer aus dem System entfernen
|
|
- **Rollen zuweisen**: Admin, Benutzer, Gast-Rollen verwalten
|
|
|
|
**Suchfunktionen:**
|
|
```javascript
|
|
// Benutzer nach Name, E-Mail oder Rolle filtern
|
|
filterUsers(searchTerm)
|
|
editUser(userId) // Benutzer bearbeiten
|
|
deleteUser(userId) // Benutzer löschen
|
|
createUser() // Neuen Benutzer erstellen
|
|
```
|
|
|
|
#### Drucker-Management
|
|
|
|
**Drucker-Konfiguration:**
|
|
- Drucker hinzufügen/bearbeiten
|
|
- Status-Überwachung (Online/Offline)
|
|
- Smart-Plug-Integration mit TP-Link Tapo
|
|
- Wartungsplanung und -historie
|
|
|
|
**API-Endpunkte:**
|
|
```
|
|
GET /api/admin/printers # Alle Drucker auflisten
|
|
POST /api/admin/printers # Drucker hinzufügen
|
|
PUT /api/admin/printers/<id> # Drucker aktualisieren
|
|
DELETE /api/admin/printers/<id> # Drucker löschen
|
|
POST /api/admin/printers/update-all # Status aktualisieren
|
|
```
|
|
|
|
#### Job-Verwaltung
|
|
|
|
**Job-Operationen:**
|
|
- Alle aktiven und abgeschlossenen Jobs anzeigen
|
|
- Jobs abbrechen, löschen oder abschließen
|
|
- Warteschlangen-Management mit Prioritäten
|
|
- Performance-Analytics und Trends
|
|
|
|
#### System-Administration
|
|
|
|
**Verfügbare Funktionen:**
|
|
```javascript
|
|
showSystemSettings() // System-Einstellungen Modal
|
|
saveSystemSettings() // Einstellungen speichern
|
|
updateAllPrinters() // Drucker-Status aktualisieren
|
|
restartSystem() // System-Neustart (Development)
|
|
clearCache() // System-Cache leeren
|
|
```
|
|
|
|
**API-Endpunkte:**
|
|
```
|
|
POST /api/admin/cache/clear # System-Cache leeren
|
|
GET /api/admin/system/status # System-Status abrufen
|
|
POST /api/admin/backup/create # System-Backup erstellen
|
|
GET /api/admin/logs/export # System-Logs exportieren
|
|
```
|
|
|
|
### Gastanfragen-Verwaltung
|
|
|
|
#### Genehmigungsworkflow
|
|
|
|
**Schritt-für-Schritt-Prozess:**
|
|
|
|
1. **Drucker-Zuweisung**: Automatische oder manuelle Drucker-Auswahl
|
|
2. **Genehmigungsnotizen**: Zusätzliche Anweisungen für den Gast
|
|
3. **Job-Erstellung**: Automatische Erstellung mit OTP-Generierung
|
|
4. **Admin-Tracking**: Vollständige Nachverfolgung der Genehmigung
|
|
|
|
**API für Gastanfragen:**
|
|
```
|
|
GET /api/admin/requests # Alle Gastanfragen mit Filterung
|
|
GET /api/admin/requests/<id> # Detaillierte Anfrage-Informationen
|
|
PUT /api/admin/requests/<id> # Anfrage aktualisieren
|
|
POST /api/requests/<id>/approve # Anfrage genehmigen
|
|
POST /api/requests/<id>/deny # Anfrage ablehnen
|
|
```
|
|
|
|
#### Ablehnungsworkflow
|
|
|
|
**Verpflichtende Begründung:**
|
|
- Detaillierter Ablehnungsgrund erforderlich
|
|
- Transparenz: Begründung wird dem Gast mitgeteilt
|
|
- Admin-Tracking: Nachverfolgung der Ablehnung
|
|
- Audit-Log: Vollständige Dokumentation
|
|
|
|
#### Benutzeroberfläche
|
|
|
|
**Filter und Suche:**
|
|
- Status-Filter: Alle, Wartend, Genehmigt, Abgelehnt
|
|
- Such-Funktion: Nach Name, E-Mail, Begründung
|
|
- Dringlichkeitskennzeichnung: Anfragen älter als 24h
|
|
- Pagination: Effiziente Darstellung großer Datenmengen
|
|
|
|
**Interaktive Features:**
|
|
- Ein-Klick-Aktionen für schnelle Genehmigung/Ablehnung
|
|
- Detail-Modals mit vollständigen Anfrage-Informationen
|
|
- Echtzeit-Updates nach Aktionen
|
|
- Responsive Design für Desktop und Mobile
|
|
|
|
## Gastauftrag-System mit OTP
|
|
|
|
### Übersicht
|
|
|
|
Das OTP (One-Time Password) System ermöglicht es Gästen, den Status ihrer Druckaufträge sicher und ohne Anmeldung zu prüfen. Jeder Gast erhält bei der Antragsstellung einen eindeutigen 16-stelligen hexadezimalen Code.
|
|
|
|
### OTP-Generierung und Sicherheit
|
|
|
|
**Automatische Code-Erstellung:**
|
|
- **Bei Antragstellung**: Jeder neue Gastauftrag erhält sofort einen OTP-Code
|
|
- **Sichere Speicherung**: Code wird mit bcrypt gehasht gespeichert
|
|
- **Gültigkeitsdauer**: 72 Stunden ab Erstellung
|
|
- **Format**: 16-stelliger hexadezimaler Code (z.B. "A1B2C3D4E5F67890")
|
|
|
|
**Sicherheitsfeatures:**
|
|
- **Bcrypt-Hashing**: Sichere Speicherung der OTP-Codes
|
|
- **Salt**: Jeder Hash verwendet einen eindeutigen Salt
|
|
- **One-Time-Use**: Code wird nach erfolgreicher Verifikation als verwendet markiert
|
|
- **E-Mail-Verifikation**: Optional für erhöhte Sicherheit
|
|
- **Zeitliche Begrenzung**: Codes laufen nach 72 Stunden ab
|
|
|
|
### Status-Abfrage
|
|
|
|
**Webinterface:**
|
|
- **URL**: `/guest/status-check`
|
|
- **Zugang**: Öffentlich zugänglich
|
|
- OTP-Code-Eingabe mit Formatierung
|
|
- Optionale E-Mail-Verifikation
|
|
- Detaillierte Status-Anzeige
|
|
|
|
**API-Endpunkt:**
|
|
```http
|
|
POST /guest/api/guest/status
|
|
```
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"otp_code": "A1B2C3D4E5F67890",
|
|
"email": "gast@example.com" // Optional
|
|
}
|
|
```
|
|
|
|
### Status-Informationen
|
|
|
|
**Pending (In Bearbeitung):**
|
|
```json
|
|
{
|
|
"status": "pending",
|
|
"message": "Ihr Auftrag wird bearbeitet. Wartezeit: 3 Stunden.",
|
|
"hours_waiting": 3
|
|
}
|
|
```
|
|
|
|
**Approved (Genehmigt):**
|
|
```json
|
|
{
|
|
"status": "approved",
|
|
"message": "Ihr Auftrag wurde genehmigt! Sie können mit dem Drucken beginnen.",
|
|
"can_start_job": true,
|
|
"approved_at": "2025-01-07T12:15:00Z",
|
|
"approval_notes": "Auftrag genehmigt - Drucker B verfügbar"
|
|
}
|
|
```
|
|
|
|
**Rejected (Abgelehnt):**
|
|
```json
|
|
{
|
|
"status": "rejected",
|
|
"message": "Ihr Auftrag wurde leider abgelehnt.",
|
|
"rejected_at": "2025-01-07T12:15:00Z",
|
|
"rejection_reason": "Datei nicht kompatibel mit verfügbaren Druckern"
|
|
}
|
|
```
|
|
|
|
### Benutzer-Workflow für Gäste
|
|
|
|
**1. Antrag stellen:**
|
|
```
|
|
Gast füllt Antragsformular aus
|
|
↓
|
|
System generiert automatisch OTP-Code
|
|
↓
|
|
Gast erhält Code angezeigt/per E-Mail
|
|
```
|
|
|
|
**2. Status prüfen:**
|
|
```
|
|
Gast besucht /guest/status-check
|
|
↓
|
|
Gibt 16-stelligen OTP-Code ein
|
|
↓
|
|
Optional: E-Mail zur Verifikation
|
|
↓
|
|
System zeigt aktuellen Status an
|
|
```
|
|
|
|
**3. Job starten (bei Genehmigung):**
|
|
```
|
|
Status zeigt "Genehmigt" an
|
|
↓
|
|
Link zu "Jetzt drucken" erscheint
|
|
↓
|
|
Gast kann Job mit anderem Code starten
|
|
```
|
|
|
|
## Warteschlangen-System
|
|
|
|
### Übersicht
|
|
|
|
Das Warteschlangen-System ermöglicht es Benutzern, Druckjobs auch für offline Drucker zu erstellen. Diese Jobs werden automatisch aktiviert, sobald die entsprechenden Drucker wieder online sind.
|
|
|
|
### Universelle Drucker-Anzeige
|
|
|
|
**Alle Drucker sichtbar:**
|
|
- **Online-Drucker**: ✅ Grüner Hintergrund, "ONLINE - Sofortiger Start"
|
|
- **Offline-Drucker**: 🔄 Oranger Hintergrund, "OFFLINE - Warteschlange"
|
|
- **Status-Informationen**: Letzte Überprüfungszeit wird angezeigt
|
|
|
|
### Intelligente Job-Erstellung
|
|
|
|
**Automatische Status-Erkennung:**
|
|
- System erkennt automatisch Drucker-Status bei Job-Erstellung
|
|
- **Adaptive Job-Status**:
|
|
- `scheduled` - für online Drucker (sofortiger Start)
|
|
- `waiting_for_printer` - für offline Drucker (Warteschlange)
|
|
|
|
### Background-Überwachung (Queue-Manager)
|
|
|
|
**Automatische Funktionen:**
|
|
- **Überwachung** alle 2 Minuten
|
|
- **Status-Checks** für alle Drucker mit wartenden Jobs
|
|
- **Automatische Aktivierung** von Jobs bei Online-Statuswechsel
|
|
- **Thread-sichere Implementierung** mit Daemon-Thread
|
|
|
|
**Queue-Manager-API:**
|
|
```
|
|
/api/queue/status # GET - Queue-Status abrufen
|
|
/api/queue/check-now # POST - Manuelle Queue-Überprüfung
|
|
/api/jobs/check-waiting # POST - Wartende Jobs prüfen
|
|
```
|
|
|
|
### Benutzer-Workflow für Warteschlangen
|
|
|
|
**1. Job für Online-Drucker erstellen:**
|
|
1. Benutzer wählt **Online-Drucker** (✅ grün markiert)
|
|
2. Job wird mit Status `scheduled` erstellt
|
|
3. Job startet **sofort** zur geplanten Zeit
|
|
|
|
**2. Job für Offline-Drucker erstellen:**
|
|
1. Benutzer wählt **Offline-Drucker** (🔄 orange markiert)
|
|
2. **Ausführliche Warnung** wird angezeigt
|
|
3. Benutzer bestätigt **bewusst** die Warteschlangen-Erstellung
|
|
4. Job wird mit Status `waiting_for_printer` erstellt
|
|
5. **Automatische Überwachung** startet
|
|
|
|
**3. Automatische Job-Aktivierung:**
|
|
1. **Queue-Manager** überwacht Drucker-Status alle 2 Minuten
|
|
2. Sobald Drucker **online** geht:
|
|
- Job-Status wechselt zu `scheduled`
|
|
- **Benachrichtigung** wird an Benutzer gesendet
|
|
- Job startet zur **geplanten Zeit**
|
|
|
|
### Benachrichtigungssystem
|
|
|
|
**Sofortige Benachrichtigungen:**
|
|
- Nachrichten wenn Drucker online gehen
|
|
- **Anti-Spam-Schutz** mit 5-Minuten-Cooldown
|
|
- **Strukturierte Nachrichten** mit Job- und Drucker-Details
|
|
|
|
## Benutzerinterface
|
|
|
|
### Frontend-Architektur
|
|
|
|
**TailwindCSS-basiertes Design:**
|
|
- Utility-first CSS mit angepassten Optimierungen für Raspberry Pi
|
|
- Responsive Design für Desktop und Mobile
|
|
- Dark/Light Mode mit Premium-Animationen
|
|
- Mercedes-Benz Corporate Design
|
|
|
|
**JavaScript-Framework:**
|
|
- Vanilla JavaScript ohne schwere Frameworks
|
|
- Progressive Enhancement: Funktioniert ohne JavaScript, verbessert mit JavaScript
|
|
- Service Workers für Offline-Fähigkeit und Performance
|
|
|
|
### Glassmorphism UI-Features
|
|
|
|
**Premium Flash Messages:**
|
|
```css
|
|
.flash-message {
|
|
backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
|
|
background: linear-gradient(135deg, rgba(colors) 0%, 50%, 100%);
|
|
box-shadow:
|
|
0 32px 64px rgba(0, 0, 0, 0.25),
|
|
0 12px 24px rgba(0, 0, 0, 0.15),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
|
}
|
|
```
|
|
|
|
**Do Not Disturb System:**
|
|
- Zeitgesteuerte Modi (30min bis dauerhaft)
|
|
- Intelligente Nachrichtenfilterung
|
|
- Navbar-Integration mit Visual Feedback
|
|
- Persistente Einstellungen über Browser-Neustarts
|
|
- Vollständige Keyboard-Accessibility
|
|
|
|
### Performance-Optimierungen
|
|
|
|
**Raspberry Pi-spezifische Optimierungen:**
|
|
- Reduzierte Animationen und Glassmorphism-Effekte
|
|
- Minifizierte Assets mit gzip-Kompression
|
|
- Optimierte SQLite-Einstellungen für SD-Karten
|
|
- Memory-effiziente Session-Behandlung
|
|
|
|
**Caching-Strategie:**
|
|
- Statische Datei-Caching (1 Jahr)
|
|
- Database Query Caching
|
|
- Session-basiertes Caching für teure Operationen
|
|
|
|
## Drucker-Management
|
|
|
|
### Smart-Plug-Integration
|
|
|
|
**TP-Link Tapo-Unterstützung:**
|
|
- PyP100-Bibliothek für Gerätesteuerung
|
|
- Status-Überwachung und Terminplanung
|
|
- Automatisches Energiemanagement
|
|
|
|
**Drucker-Status-Überwachung:**
|
|
```python
|
|
# Drucker-Status-Check
|
|
def check_printer_status(printer_ip):
|
|
try:
|
|
response = requests.get(f"http://{printer_ip}/status", timeout=5)
|
|
return response.status_code == 200
|
|
except:
|
|
return False
|
|
```
|
|
|
|
### Konflikt-Management
|
|
|
|
**Intelligente Drucker-Zuweisung:**
|
|
- Verfügbarkeitsfenster berücksichtigen
|
|
- Prioritätsstufen (dringend, hoch, normal, niedrig)
|
|
- Job-Dauer-Kompatibilität
|
|
- Echtzeit-Konflikterkennung
|
|
|
|
## Job-Verwaltung
|
|
|
|
### Job-Status-System
|
|
|
|
**Status-Definitionen:**
|
|
- `pending` - Warten auf Genehmigung
|
|
- `approved` - Genehmigt, bereit zum Start
|
|
- `scheduled` - Geplant und aktiv
|
|
- `waiting_for_printer` - Warten auf Drucker (Warteschlange)
|
|
- `in_progress` - Aktuell in Bearbeitung
|
|
- `completed` - Erfolgreich abgeschlossen
|
|
- `cancelled` - Abgebrochen
|
|
- `failed` - Fehlgeschlagen
|
|
|
|
### Unterstützte Dateiformate
|
|
|
|
**3D-Dateien:**
|
|
- STL (Standard Tessellation Language)
|
|
- OBJ (Wavefront OBJ)
|
|
- 3MF (3D Manufacturing Format)
|
|
- AMF (Additive Manufacturing File)
|
|
- GCODE (G-Code für direkten Druck)
|
|
|
|
**Datei-Upload-System:**
|
|
- Sichere Dateibehandlung mit Validierung
|
|
- Organisierte Speicherung im uploads/-Verzeichnis
|
|
- Automatische Dateigrößen-Limits
|
|
- Virus-Scanning (falls konfiguriert)
|
|
|
|
## Sicherheit und Berechtigungen
|
|
|
|
### Berechtigungssystem
|
|
|
|
**Rollen-Hierarchie:**
|
|
- **Super Admin**: Vollzugriff auf alle Funktionen
|
|
- **Admin**: Standard-Admin-Funktionen
|
|
- **Moderator**: Eingeschränkte Admin-Rechte
|
|
- **Approver**: Nur Gastanfragen-Genehmigung
|
|
- **User**: Standard-Benutzer-Funktionen
|
|
- **Guest**: Eingeschränkter Zugang
|
|
|
|
**Spezielle Berechtigungen:**
|
|
```python
|
|
class UserPermission:
|
|
can_manage_users = True # Benutzer verwalten
|
|
can_manage_printers = True # Drucker verwalten
|
|
can_approve_jobs = True # Jobs genehmigen
|
|
can_view_analytics = True # Analytics einsehen
|
|
can_manage_system = True # System-Administration
|
|
can_access_admin = True # Admin-Bereich zugreifen
|
|
```
|
|
|
|
### Sicherheitsmaßnahmen
|
|
|
|
**Implementierte Features:**
|
|
- **SSL/TLS**: Selbstsignierte Zertifikate mit automatischer Generierung
|
|
- **CSRF-Schutz**: Global aktiviert mit Flask-WTF
|
|
- **Session-Sicherheit**: Sichere Cookies, HTTPOnly, SameSite=Lax
|
|
- **Rate Limiting**: Eingebaut für API-Endpunkte
|
|
- **Input-Validierung**: WTForms für alle Benutzereingaben
|
|
|
|
**CSRF-Schutz in JavaScript:**
|
|
```javascript
|
|
// Automatische CSRF-Token-Integration
|
|
function getCSRFToken() {
|
|
return document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
|
}
|
|
|
|
async function secureApiCall(url, method, data) {
|
|
const response = await fetch(url, {
|
|
method: method,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRFToken': getCSRFToken()
|
|
},
|
|
body: JSON.stringify(data)
|
|
});
|
|
return response.json();
|
|
}
|
|
```
|
|
|
|
### Audit-Logging
|
|
|
|
**Admin-Aktivitäten-Log:**
|
|
```python
|
|
@admin_required
|
|
def log_admin_action(action, details):
|
|
admin_logger.info(f"Admin {current_user.id} ({current_user.name}) - {action}: {details}")
|
|
|
|
# Beispiele
|
|
log_admin_action("USER_CREATED", f"Created user {new_user.email}")
|
|
log_admin_action("REQUEST_APPROVED", f"Approved guest request {request_id}")
|
|
log_admin_action("SYSTEM_RESTART", "System restart initiated")
|
|
```
|
|
|
|
---
|
|
|
|
**Status**: ✅ Vollständig funktional
|
|
**Letzte Aktualisierung**: Januar 2025
|
|
**Version**: 3.1.3
|
|
**Kompatibilität**: Python 3.9+, Flask 3.1+, SQLAlchemy 2.0+ |