282 lines
9.1 KiB
Markdown

# Mercedes-Benz TBA Marienfelde - 3D-Drucker Management System
## Übersicht
Ein umfassendes Management-System für 3D-Drucker in der Mercedes-Benz Technischen Berufsausbildung (TBA) Marienfelde. Das System ermöglicht die zentrale Verwaltung, Überwachung und Steuerung von 3D-Druckern und deren Stromversorgung.
## Hauptfunktionen
### 🖨️ Drucker-Management
- Zentrale Verwaltung aller 3D-Drucker
- Echtzeit-Statusüberwachung
- Druckjob-Verwaltung und -Scheduling
- Benutzer- und Rechteverwaltung
### ⚡ **NEU: Steckdosen-Test-System**
Sichere Testfunktion für Ausbilder und Administratoren zur Steuerung der Druckerstromversorgung:
- **Sicherheitsprüfungen**: Automatische Warnungen bei aktiven Druckjobs
- **Risikobewertung**: Intelligente Analyse basierend auf Stromverbrauch und Gerätestatus
- **Force-Modus**: Notfallsteuerung mit erweiterten Sicherheitsabfragen
- **Audit-Trail**: Vollständige Protokollierung aller Testaktivitäten
- **Echtzeit-Monitoring**: Live-Status aller konfigurierten Steckdosen
**Zugriff:** `/socket-test` (nur für Administratoren)
### 📊 Monitoring & Analytics
- Live-Dashboard mit Druckerstatus
- Energieverbrauchsüberwachung
- Statistiken und Berichte
- Fehlerprotokollierung
### 👤 Benutzer-System
- Rollenbasierte Zugriffskontrolle
- Gastanfragen für externe Nutzer
- Admin-Bereich für Systemverwaltung
- Session-Management mit automatischem Logout
## Technische Spezifikationen
### Backend
- **Framework:** Flask (Python)
- **Datenbank:** SQLite mit WAL-Modus
- **ORM:** SQLAlchemy
- **Authentifizierung:** Flask-Login
- **API:** RESTful JSON-API
### ⚡ **NEU: Sofort-Shutdown-System**
Aggressiver Signal-Handler für sofortiges und sicheres Herunterfahren:
- **Strg+C Unterstützung**: Sofortiges Shutdown bei SIGINT/SIGTERM
- **Datenbank-Schutz**: Automatischer WAL-Checkpoint vor Beendigung
- **Session-Cleanup**: Alle DB-Sessions werden ordnungsgemäß geschlossen
- **Plattform-übergreifend**: Windows (SIGBREAK) und Unix/Linux (SIGHUP) Support
- **Fehlerresistent**: Robuste Behandlung auch bei Cleanup-Fehlern
- **Sofortiger Exit**: Verwendet `os._exit(0)` für garantierte Beendigung
**Funktion:** Drücken Sie `Strg+C` um die Anwendung sofort und sicher zu beenden.
**Dokumentation:** [`docs/STRG_C_SHUTDOWN.md`](docs/STRG_C_SHUTDOWN.md)
### Frontend
- **Framework:** Vanilla JavaScript + Tailwind CSS
- **Design:** Mercedes-Benz Corporate Design
- **Responsive:** Mobile-first Design
- **Interaktion:** AJAX-basierte Real-time Updates
### Hardware-Integration
- **Steckdosen:** TP-Link Tapo P110 Smart Plugs
- **Protokoll:** PyP100 für Tapo-Kommunikation
- **Netzwerk:** Lokales Subnetz für Geräte-Kommunikation
## Installation
### Voraussetzungen
- Python 3.8+
- Node.js 16+ (für Frontend-Build)
- Netzwerkzugang zu den Steckdosen
### Setup
```bash
# Repository klonen
git clone <repository-url>
cd backend
# Python-Abhängigkeiten installieren
pip install -r requirements.txt
# Frontend-Abhängigkeiten installieren
npm install
# CSS kompilieren
npm run build-css
# Datenbank initialisieren
python -c "from models import init_database; init_database()"
# Anwendung starten
python app.py
```
### Erste Schritte
1. **Admin-Account erstellen**: Beim ersten Start wird automatisch ein Admin-Account erstellt
2. **Drucker hinzufügen**: Über das Admin-Panel Drucker und Steckdosen konfigurieren
3. **Benutzer verwalten**: Weitere Benutzer und Rollen zuweisen
4. **Steckdosen testen**: Über `/socket-test` die neue Testfunktionalität nutzen
## Konfiguration
### Umgebungsvariablen
```bash
# Grundkonfiguration
SECRET_KEY=<sicherheitsschlüssel>
DATABASE_PATH=database/app.db
ENVIRONMENT=production
# Steckdosen-Konfiguration
TAPO_USERNAME=<steckdosen-benutzername>
TAPO_PASSWORD=<steckdosen-passwort>
```
### Drucker-Steckdosen-Zuordnung
Jeder Drucker kann mit einer Steckdose verknüpft werden:
- **IP-Adresse** der Steckdose
- **Benutzername/Passwort** für Authentifizierung
- **MAC-Adresse** für eindeutige Identifikation
## Sicherheit
### Zugriffskontrolle
- **CSRF-Schutz** für alle Formulare
- **Session-basierte Authentifizierung**
- **Rollenbasierte Berechtigungen** (Admin/User)
- **Automatisches Session-Timeout**
### Steckdosen-Sicherheit
- **Risikobewertung** vor jeder Aktion
- **Automatische Warnungen** bei aktiven Jobs
- **Force-Modus** nur mit expliziter Bestätigung
- **Vollständige Audit-Logs** aller Aktionen
## API-Dokumentation
### Steckdosen-Test-Endpunkte
```http
GET /api/printers/test/socket/{printer_id}
```
Detaillierter Status einer Steckdose mit Sicherheitsbewertung
```http
POST /api/printers/test/socket/{printer_id}/control
```
Steckdose für Tests ein-/ausschalten mit Sicherheitsprüfungen
```http
GET /api/printers/test/all-sockets
```
Übersicht aller Steckdosen mit Zusammenfassung
Vollständige API-Dokumentation: [docs/STECKDOSEN_TEST_DOKUMENTATION.md](docs/STECKDOSEN_TEST_DOKUMENTATION.md)
## Projektstruktur
```
backend/
├── app.py # Hauptanwendung
├── models.py # Datenmodelle
├── requirements.txt # Python-Abhängigkeiten
├── blueprints/ # Modulare Routen
│ ├── printers.py # Drucker-Management (inkl. Steckdosen-Tests)
│ ├── users.py # Benutzerverwaltung
│ ├── guest.py # Gastanfragen
│ └── calendar.py # Terminplanung
├── templates/ # HTML-Templates
│ ├── base.html # Basis-Template
│ ├── socket_test.html # Steckdosen-Test-Interface
│ └── ...
├── static/ # Statische Dateien
├── utils/ # Hilfsfunktionen
├── config/ # Konfigurationsdateien
├── docs/ # Dokumentation
│ └── STECKDOSEN_TEST_DOKUMENTATION.md
└── database/ # Datenbankdateien
```
## Wartung
### Regelmäßige Aufgaben
- **Backup** der Datenbank erstellen
- **Log-Rotation** für Speicherplatz-Management
- **Steckdosen-Konnektivität** prüfen
- **Updates** für Sicherheits-Patches
### Monitoring
- **Anwendungs-Logs** in `logs/` Verzeichnis
- **Datenbank-Größe** und Performance überwachen
- **Netzwerk-Verbindungen** zu Steckdosen prüfen
## Support
### Fehlerbehebung
1. **Logs prüfen**: `logs/app/` für Anwendungsfehler
2. **Netzwerk testen**: Erreichbarkeit der Steckdosen prüfen
3. **Datenbank-Status**: SQLite-Datei auf Korruption prüfen
### Häufige Probleme
- **Steckdose nicht erreichbar**: IP-Adresse und Netzwerk prüfen
- **Admin-Zugriff verweigert**: Benutzerrolle in Datenbank kontrollieren
- **Session-Timeout**: Einstellungen in `config/settings.py` anpassen
## Entwicklung
### Lokale Entwicklung
```bash
# Development Server
export FLASK_ENV=development
python app.py
# CSS Watch Mode
npm run watch-css
# Tests ausführen
python -m pytest tests/
```
### Deployment
Das System läuft produktiv in der Mercedes-Benz TBA Marienfelde und ist für Windows-Umgebungen optimiert.
## Changelog
### Version 1.2 (2025-01-06)
- 🚨 **NEU**: Strg+C Sofort-Shutdown-System implementiert
- 🔒 **Sicherheit**: Aggressiver Signal-Handler für SIGINT/SIGTERM/SIGBREAK
- 💾 **Datenbank**: Automatischer WAL-Checkpoint vor Programmende
- 🧹 **Cleanup**: Ordnungsgemäßer Session- und Engine-Cleanup
- 🌍 **Plattform**: Unterstützung für Windows und Unix/Linux Signale
-**Performance**: Sofortiger Exit mit `os._exit(0)`
### Version 1.1 (2025-01-05)
-**NEU**: Steckdosen-Test-System für Administratoren
- 🔒 **Sicherheit**: Erweiterte Risikobewertung und Warnungen
- 📊 **Monitoring**: Live-Status aller Steckdosen
- 📝 **Audit**: Vollständige Protokollierung aller Testaktivitäten
- 🎨 **UI**: Dedizierte Steckdosen-Test-Oberfläche
### Version 1.0
- Grundlegendes Drucker-Management-System
- Benutzer- und Rechteverwaltung
- Dashboard und Monitoring
- Gastanfragen-System
## Lizenz
Internes Projekt der Mercedes-Benz AG für die TBA Marienfelde.
---
**Entwickelt für:** Mercedes-Benz Technische Berufsausbildung Marienfelde
**Letzte Aktualisierung:** 2025-01-05
**Version:** 1.1
## Kürzlich behobene Probleme
### Shutdown- und Cleanup-Verbesserungen ✅
**Problem**: Die Anwendung hatte Probleme beim ordnungsgemäßen Herunterfahren mit hängenden Prozessen und inkonsistenten Zuständen.
**Lösung**: Implementierung eines zentralen Shutdown-Managers mit:
-**Koordiniertes Shutdown**: Alle Komponenten werden in der richtigen Reihenfolge gestoppt
-**Timeout-Management**: Verhindert hängende Cleanup-Operationen
-**Prioritäts-basierte Ausführung**: Kritische Komponenten werden zuerst gestoppt
-**Robuste Fehlerbehandlung**: Einzelfehler stoppen nicht das gesamte Shutdown
-**Plattform-spezifisch**: Optimiert für Windows und Unix/Linux
**Technische Details**:
- Neuer `utils/shutdown_manager.py` koordiniert alle Cleanup-Operationen
- Queue Manager, Scheduler und Datenbank-Cleanup werden zentral verwaltet
- Reduzierte Shutdown-Zeit von >30s auf <10s in normalen Fällen
- Detaillierte Logs für besseres Debugging
**Dokumentation**: Siehe [`docs/SHUTDOWN_VERBESSERUNGEN.md`](docs/SHUTDOWN_VERBESSERUNGEN.md) für vollständige Details.
---