2025-06-04 10:03:22 +02:00

16 KiB

MYP Druckerverwaltung

Ein umfassendes Druckerverwaltungssystem für Mercedes-Benz, optimiert für Debian/Linux-Systeme mit HTTPS-Kiosk-Modus.

🚀 Schnellstart

Debian/Linux Kiosk-Installation (Empfohlen)

# Repository klonen
git clone <repository-url>
cd backend

# Konsolidiertes Setup-Skript ausführen
sudo ./setup.sh

Installationsoptionen:

  1. Abhängigkeiten installieren - System für manuelles Testen vorbereiten
  2. Vollständige Kiosk-Installation - Automatischer Kiosk-Modus mit Remote-Zugang

Nach der Installation: System mit sudo reboot neustarten für automatischen Kiosk-Modus.

Entwicklungsumgebung (Windows)

# Abhängigkeiten installieren
pip install -r requirements.txt
npm install

# Entwicklungsserver starten
python app.py --debug

📋 Systemanforderungen

Produktionsumgebung (Kiosk)

  • Debian/Raspbian (Raspberry Pi OS empfohlen)
  • Raspberry Pi 4 mit 2GB+ RAM
  • 16GB+ SD-Karte
  • HDMI-Monitor
  • Netzwerkverbindung

Entwicklungsumgebung

  • Windows 10/11 (nur für Entwicklung)
  • Python 3.8+
  • Node.js 18+
  • Git

🔧 Features

Kern-Funktionalitäten

  • Druckerverwaltung mit Smart-Plug-Integration (TP-Link Tapo)
  • Job-Management mit Warteschlangen-System
  • Benutzerverwaltung mit Rollen und Berechtigungen
  • Gast-Anfragen für temporären Zugriff
  • Echtzeit-Dashboard mit Live-Statistiken
  • Automatische Backups und Wartung

Kiosk-Modus Features

  • HTTPS auf Port 443 mit automatischen SSL-Zertifikaten
  • Chromium-Vollbildmodus ohne Desktop-Environment
  • Automatischer Login und Browser-Start
  • Watchdog-Überwachung für Systemstabilität
  • Remote-Zugang via SSH und RDP mit Firewall-Schutz
  • Responsive Design für Desktop-Nutzung

Sicherheit

  • SSL/TLS-Verschlüsselung (selbstsignierte Zertifikate)
  • CSRF-Schutz und Session-Management
  • Rate-Limiting und Eingabevalidierung
  • Systemd-Service-Isolation
  • IPv6 vollständig deaktiviert für erhöhte Sicherheit
  • IP-Spoofing-Schutz und DDoS-Abwehr
  • TCP-Optimierungen und RFC-Compliance

🏗️ Architektur

Backend

  • Flask 3.1.1 - Web-Framework
  • SQLAlchemy 2.0.36 - ORM und Datenbankzugriff
  • SQLite - Eingebettete Datenbank
  • Gunicorn - WSGI-Server für Produktion

Frontend

  • TailwindCSS - Utility-First CSS Framework
  • Chart.js - Datenvisualisierung
  • FontAwesome - Icons
  • Vanilla JavaScript - Interaktivität

System-Integration

  • systemd - Service-Management
  • OpenSSL - SSL-Zertifikat-Generierung
  • Chromium - Kiosk-Browser
  • X11 - Minimale Grafikumgebung

📁 Projektstruktur

backend/
├── app.py                 # Hauptanwendung mit HTTPS-Support
├── models.py              # Datenbankmodelle
├── setup.sh               # Konsolidiertes Setup-Skript
├── requirements.txt       # Python-Abhängigkeiten
├── package.json           # Node.js-Abhängigkeiten
├── 
├── systemd/               # Systemd-Service-Dateien
│   ├── myp-https.service  # HTTPS-Backend-Service
│   ├── myp-kiosk.service  # Kiosk-Browser-Service
│   ├── kiosk-watchdog.service # Überwachungsservice
│   └── kiosk-watchdog-python.service # Python-Watchdog
├── 
├── blueprints/            # Flask-Blueprints
│   ├── auth.py           # Authentifizierung
│   ├── users.py          # Benutzerverwaltung
│   ├── printers.py       # Druckerverwaltung
│   ├── jobs.py           # Job-Management
│   └── guest.py          # Gast-Anfragen
├── 
├── config/               # Konfigurationsdateien
│   └── settings.py       # Hauptkonfiguration
├── 
├── utils/                # Hilfsfunktionen
│   ├── ssl_config.py     # SSL-Zertifikat-Management
│   ├── logging_config.py # Logging-Konfiguration
│   ├── queue_manager.py  # Job-Warteschlange
│   └── printer_monitor.py # Drucker-Überwachung
├── 
├── static/               # Statische Dateien
│   ├── css/             # Stylesheets
│   ├── js/              # JavaScript
│   └── icons/           # Icons und Bilder
├── 
├── templates/            # Jinja2-Templates
├── docs/                 # Dokumentation
├── logs/                 # Log-Dateien
└── uploads/              # Hochgeladene Dateien

🔧 Installation

Option 1: Automatische Installation mit setup.sh (Empfohlen)

# Als Root ausführen
sudo ./setup.sh

# Menüoptionen:
# 1. Abhängigkeiten installieren für manuelles Testen
# 2. Vollständige Kiosk-Installation mit Remote-Zugang
# 3. Beenden

Installationsmodi:

  • Option 1: Ideal für Entwicklung, manuelle Tests und Debugging
  • Option 2: Vollständige Produktionsinstallation mit automatischem Kiosk-Start

Option 2: Manuelle Installation

Schritt 1: System vorbereiten

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y python3 python3-pip nodejs npm git

Schritt 2: Abhängigkeiten installieren

# Python-Pakete (ohne virtuelles Environment)
pip3 install -r requirements.txt --break-system-packages

# Node.js-Pakete
npm install

# TailwindCSS kompilieren
npm run build:css

Schritt 3: SSL-Zertifikate generieren

python3 -c "
import sys; sys.path.insert(0, '.')
from utils.ssl_config import ensure_ssl_certificates
ensure_ssl_certificates('.', True)
"

Schritt 4: Services einrichten

# Services aus systemd/ Verzeichnis kopieren
sudo cp systemd/*.service /etc/systemd/system/
sudo systemctl daemon-reload

# HTTPS-Service aktivieren
sudo systemctl enable myp-https.service
sudo systemctl start myp-https.service

# Kiosk-Service aktivieren (optional)
sudo systemctl enable myp-kiosk.service

🌐 Zugriff

Lokaler Zugriff

  • HTTPS: https://localhost:443
  • HTTP (Entwicklung): http://localhost:5000

Netzwerk-Zugriff

  • HTTPS: https://<raspberry-pi-ip>:443

Remote-Zugang (falls konfiguriert)

  • SSH: ssh user@<raspberry-pi-ip> (Passwort: raspberry)
  • RDP: <raspberry-pi-ip>:3389 (Benutzer: root, Passwort: 744563017196A)

Standard-Anmeldedaten

  • Benutzername: admin
  • Passwort: admin123

⚠️ Wichtig: Ändern Sie das Standard-Passwort nach der ersten Anmeldung!

🔧 Konfiguration

Umgebungsvariablen

# Produktionsumgebung
export FLASK_ENV=production
export FLASK_HOST=0.0.0.0
export FLASK_PORT=443

# Entwicklungsumgebung
export FLASK_ENV=development
export FLASK_HOST=127.0.0.1
export FLASK_PORT=5000

SSL-Konfiguration

# Automatische Zertifikat-Generierung
python3 utils/ssl_config.py /opt/myp

# Manuelle Zertifikat-Erneuerung
python3 utils/ssl_config.py /opt/myp --force

Drucker-Konfiguration

  1. Admin-PanelDruckerNeuer Drucker
  2. IP-Adresse und TP-Link Tapo-Zugangsdaten eingeben
  3. Drucker-Test durchführen
  4. Smart-Plug-Integration aktivieren

📊 Überwachung

Service-Status

# HTTPS-Service
sudo systemctl status myp-https.service
sudo journalctl -u myp-https -f

# Kiosk-Service
sudo systemctl status myp-kiosk.service
sudo journalctl -u myp-kiosk -f

# Watchdog-Service
sudo systemctl status kiosk-watchdog.service
sudo tail -f /var/log/kiosk-watchdog.log

System-Tests

# HTTPS-Erreichbarkeit
curl -k https://localhost:443

# SSL-Zertifikat prüfen
openssl s_client -connect localhost:443 -servername localhost

# Automatische Tests mit setup.sh
sudo ./setup.sh # Option 5: System-Test

Log-Dateien

# Anwendungslogs
tail -f logs/app/app.log
tail -f logs/auth/auth.log
tail -f logs/printers/printers.log

# Systemlogs
sudo journalctl -u myp-https -f
sudo tail -f /var/log/kiosk-watchdog.log

# Installationslog
sudo tail -f /var/log/myp-install.log

🛠️ Entwicklung

Entwicklungsserver starten

# HTTP-Entwicklungsserver (Port 5000)
python app.py --debug

# HTTPS-Produktionsserver (Port 443)
python app.py

Frontend-Entwicklung

# TailwindCSS im Watch-Modus
npm run watch:css

# CSS kompilieren
npm run build:css

# Alle Assets bauen
npm run build

Datenbank-Management

# Datenbank initialisieren
python -c "from models import init_database; init_database()"

# Backup erstellen
python -c "from utils.backup_manager import BackupManager; BackupManager().create_backup()"

🔒 Sicherheit

SSL/TLS

  • TLS 1.2+ erforderlich
  • Starke Cipher-Suites konfiguriert
  • Selbstsignierte Zertifikate für localhost
  • Automatische Erneuerung bei Ablauf

Anwendungssicherheit

  • CSRF-Schutz aktiviert
  • Session-Management mit Timeout
  • Rate-Limiting für API-Endpunkte
  • Eingabevalidierung und Sanitization

System-Sicherheit

  • Minimale X11-Umgebung ohne Desktop
  • Kiosk-User ohne Sudo-Rechte
  • Systemd-Service-Isolation
  • Read-only Systempartitionen (optional)

📚 Dokumentation

Detaillierte Anleitungen

API-Endpunkte

  • Authentifizierung: /auth/login, /auth/logout
  • Drucker: /api/printers, /api/printers/{id}
  • Jobs: /api/jobs, /api/jobs/{id}
  • Benutzer: /api/users, /api/users/{id}
  • Dashboard: /api/dashboard/refresh, /api/stats

🐛 Fehlerbehebung

Häufige Probleme

HTTPS nicht erreichbar

# Service-Status prüfen
sudo systemctl status myp-https.service

# SSL-Zertifikate neu generieren
sudo python3 utils/ssl_config.py /opt/myp --force
sudo systemctl restart myp-https.service

# Oder mit setup.sh
sudo ./setup.sh # Option 1 für Zertifikat-Neugenerierung

Kiosk-Browser startet nicht

# X-Server prüfen
ps aux | grep X

# Browser manuell starten
sudo su - kiosk
DISPLAY=:0 chromium --kiosk https://localhost:443

# Service-Status prüfen
sudo systemctl status myp-kiosk.service

Hohe Speichernutzung

# Browser-Cache leeren
sudo rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/*

# System-Cache leeren
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches

# Watchdog überwacht automatisch Speichernutzung
sudo journalctl -u kiosk-watchdog -f

Support

Bei Problemen:

  1. System-Test durchführen: sudo ./setup.sh → Option 5
  2. Log-Bundle erstellen:
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
  logs/ \
  /var/log/kiosk-watchdog.log \
  /var/log/myp-install.log

🔄 Updates

Anwendungs-Updates

cd /opt/myp
git pull origin main
sudo pip3 install -r requirements.txt --break-system-packages --upgrade
sudo npm install

# Services mit setup.sh aktualisieren
sudo ./setup.sh # Option 3: Nur Services installieren

sudo systemctl restart myp-https.service

System-Updates

sudo apt-get update && sudo apt-get upgrade -y
sudo reboot

📄 Lizenz

Dieses Projekt ist für den internen Gebrauch bei Mercedes-Benz entwickelt.

🤝 Beitragen

  1. Fork des Repositories erstellen
  2. Feature-Branch erstellen (git checkout -b feature/AmazingFeature)
  3. Änderungen committen (git commit -m 'Add some AmazingFeature')
  4. Branch pushen (git push origin feature/AmazingFeature)
  5. Pull Request erstellen

📞 Support

  • Dokumentation: docs/ Verzeichnis
  • Setup-Anleitung: docs/SETUP_ANLEITUNG.md
  • Issues: GitHub Issues für Bug-Reports
  • Logs: Automatische Log-Sammlung mit setup.sh

🆕 Version 4.1.0 - Erweiterte Konfliktbehandlung (2025-01-06)

Neue Features

  • 🔧 Intelligente Druckerkonflikt-Management-Engine: Automatische Erkennung und Lösung von Zeitüberschneidungen
  • 🎯 Smart-Empfehlungssystem: KI-basierte Druckerzuweisung mit Scoring-Algorithmus basierend auf:
    • Verfügbarkeit und Auslastung
    • Prioritätsstufen (urgent, high, normal, low)
    • Zeitfenster-Optimierung (Tag-/Nachtschicht)
    • Job-Dauer-Eignung (Express vs. Langzeit-Jobs)
  • 📊 Echtzeit-Verfügbarkeitsanzeige: Live-Dashboard mit Druckerstatus und Auslastung
  • ⚠️ Proaktive Konfliktprävention: Echzeit-Validierung während Formulareingabe
  • 🚀 Automatische Konfliktlösung: Ein-Klick-Lösung für erkannte Konflikte

🔧 Technische Verbesserungen

  • Neue API-Endpunkte:
    • /api/calendar/check-conflicts - Detaillierte Konfliktanalyse
    • /api/calendar/resolve-conflicts - Automatische Konfliktlösung
    • /api/calendar/printer-availability - Echtzeit-Verfügbarkeit
  • ConflictManager-Klasse mit umfassender Konfliktbehandlung
  • Erweiterte Frontend-Integration mit modalen Dialogen und Toast-Benachrichtigungen
  • Smart-Assignment-Algorithmus mit gewichteter Bewertung

📋 Konfliktarten und Behandlung

  1. Zeitüberschneidungen - Automatische Alternative oder Zeitverschiebung
  2. Druckerausfälle - Sofortige Neuzuweisung auf verfügbare Drucker
  3. Prioritätskonflikte - Intelligente Umplanung bei höherprioren Jobs
  4. Ressourcenkonflikte - Warteschlange mit automatischer Reaktivierung

🎨 Benutzeroberfläche

  • Konflikt-Benachrichtigungsmodal mit detaillierten Lösungsvorschlägen
  • Verfügbarkeits-Dashboard mit visuellen Status-Indikatoren
  • Smart-Empfehlungs-Widget mit Confidence-Scores
  • "Konflikte prüfen" Button für manuelle Validierung
  • Echtzeit-Verfügbarkeitsanzeige mit Aktualisierungsbutton

📚 Dokumentation

  • docs/DRUCKERKONFLIKT_MANAGEMENT.md - Umfassende Dokumentation des Konfliktsystems
  • Detaillierte API-Referenz für alle neuen Endpunkte
  • Scoring-Algorithmus-Dokumentation mit Beispielen
  • Troubleshooting-Guide für Konfliktbehandlung

🔄 Migration

# Keine Datenbankmigrationen erforderlich
# Frontend-Assets aktualisieren
npm run build:css

# Neue JavaScript-Module laden
# (Automatisch über Template-Integration)

🔄 Version 4.0.4 - Setup-Korrekturen (2025-01-12)

Behobene Probleme

  • Python-Import-Fehler behoben: Flask-App kann jetzt korrekt importiert werden
  • Requirements.txt korrigiert: Alle Versionskonflikte beseitigt (Werkzeug + Flask)
  • Internetverbindung-Erkennung: Multi-Methoden-Prüfung (HTTP/DNS/ICMP/Gateway)
  • PYTHONPATH-Konflikte behoben: Robuste Umgebungsvariablen-Behandlung
  • Robuste Installation: Mehrstufige Validierung und Fallback-Mechanismen
  • Python-Umgebung: Automatische PYTHONPATH-Konfiguration implementiert

🔧 Verbesserungen

  • Erweiterte Fehlerbehandlung im Setup-Skript
  • Sichere Test-Umgebung für Flask-App-Validierung
  • Performance-Optimierungen für pip-Installation
  • Robuste Netzwerk-Erkennung für Firewalls/Proxys/VirtualBox
  • Umfassende Dokumentation der Korrekturen

📋 Nach Update empfohlen

# Setup-Skript erneut ausführen für korrigierte Installation
sudo ./setup.sh  # Option 1 zum Testen der Korrekturen

# Das Setup sollte jetzt reibungslos durchlaufen ohne:
# - Python-Import-Fehler
# - PYTHONPATH-Konflikte  
# - Internetverbindung-Fehlmeldungen

Details: Siehe docs/SETUP_KORREKTUREN.md


Version: 4.0.4 (Korrigiert) Plattform: Debian/Linux (Raspberry Pi OS) Modus: HTTPS Kiosk (Port 443) Setup: Konsolidiertes setup.sh System Entwickelt für: Mercedes-Benz MYP