jojojojo aua
This commit is contained in:
@@ -1,169 +1,230 @@
|
||||
# Häufige Fehler und Lösungen - Mercedes-Benz MYP Platform
|
||||
# Häufige Fehler und Lösungen
|
||||
|
||||
## JavaScript-Fehler
|
||||
Dieses Dokument enthält häufig auftretende Probleme bei der Einrichtung und Nutzung von MYP im Kiosk-Modus und deren Lösungen.
|
||||
|
||||
### 1. `animateCounters is not defined`
|
||||
**Problem:** Die Funktion `animateCounters` wird in `admin.js` aufgerufen, aber nicht definiert.
|
||||
**Lösung:** Funktion wurde hinzugefügt in `admin.js` mit Intersection Observer für bessere Performance.
|
||||
## Installationsprobleme
|
||||
|
||||
### 2. `showPrinterModal is not defined`
|
||||
**Problem:** Die Funktion `showPrinterModal` wird aufgerufen, aber nicht definiert.
|
||||
**Lösung:** Vollständige Modal-Funktion mit Formular-Handling wurde hinzugefügt.
|
||||
### Fehler: "Paket nicht gefunden"
|
||||
|
||||
### 3. `JSON.parse: unexpected character at line 1 column 1`
|
||||
**Problem:** API-Aufrufe geben HTML statt JSON zurück (404-Fehler).
|
||||
**Ursache:** Frontend läuft auf Port 8443, Backend auf Port 5000.
|
||||
**Lösung:** Dynamische API-URL-Erkennung mit intelligentem Fallback implementiert.
|
||||
**Problem**: Beim Ausführen von `apt install` werden Pakete nicht gefunden.
|
||||
|
||||
## API-Fehler (404 NOT FOUND)
|
||||
**Lösung**:
|
||||
1. Führe zuerst `sudo apt update` aus, um die Paketlisten zu aktualisieren
|
||||
2. Stelle sicher, dass eine Internetverbindung besteht
|
||||
3. Bei älteren Raspberry Pi OS Versionen ggf. Repository hinzufügen:
|
||||
```bash
|
||||
sudo apt-add-repository universe
|
||||
sudo apt update
|
||||
```
|
||||
|
||||
### 1. `/api/admin/stats/live` - 404 Fehler
|
||||
**Problem:** Live-Statistiken API gibt 404 zurück.
|
||||
**Ursache:** Port-Mismatch zwischen Frontend (8443) und Backend (5000).
|
||||
**Lösung:**
|
||||
- Dynamische API-Base-URL-Erkennung implementiert
|
||||
- Automatischer Fallback von HTTPS:8443 zu HTTP:5000
|
||||
- Verbesserte Fehlerbehandlung in der Route
|
||||
- Sichere Admin-Berechtigung-Prüfung
|
||||
### Fehler: "Permission denied" beim Kopieren nach /opt/myp
|
||||
|
||||
### 2. `/api/admin/system/status` - 404 Fehler
|
||||
**Problem:** System-Status API gibt 404 zurück.
|
||||
**Lösung:**
|
||||
- Dynamische URL-Erkennung implementiert
|
||||
- Sichere psutil-Imports mit Fallback
|
||||
- Verbesserte Fehlerbehandlung
|
||||
- Graceful degradation wenn Systemüberwachung nicht verfügbar
|
||||
**Problem**: Beim Kopieren der Dateien nach /opt/myp wird ein Permission-Fehler angezeigt.
|
||||
|
||||
### 3. `/api/admin/database/status` - 404 Fehler
|
||||
**Problem:** Datenbank-Status API gibt 404 zurück.
|
||||
**Lösung:**
|
||||
- Dynamische URL-Erkennung implementiert
|
||||
- Sichere Datenbankpfad-Erkennung
|
||||
- Verbesserte Verbindungstests
|
||||
- Fallback für fehlende Dateien
|
||||
**Lösung**:
|
||||
1. Stelle sicher, dass du die Befehle in der richtigen Reihenfolge ausführst:
|
||||
```bash
|
||||
sudo mkdir -p /opt/myp
|
||||
sudo chown $USER:$USER /opt/myp
|
||||
```
|
||||
2. Falls das nicht hilft, führe den Kopierbefehl mit sudo aus:
|
||||
```bash
|
||||
sudo cp -r ./myp/* /opt/myp/
|
||||
sudo chown -R $USER:$USER /opt/myp/
|
||||
```
|
||||
|
||||
## Modal-Dialog Probleme
|
||||
## Flask-Backend Probleme
|
||||
|
||||
### 1. Automatische Weiterleitung zu 404-Seiten
|
||||
**Problem:** Modal-Formulare submitten automatisch und leiten zu nicht existierenden Routen weiter.
|
||||
**Ursache:** Fehlende `preventDefault()` in Form-Event-Handlers.
|
||||
**Lösung:**
|
||||
- `e.preventDefault()` zu allen Form-Submit-Handlers hinzugefügt
|
||||
- Explizite Event-Handler-Bindung statt onclick-Attribute
|
||||
- Verbesserte Modal-Schließung nach erfolgreichen Aktionen
|
||||
### Fehler: "MYP-Dienst startet nicht"
|
||||
|
||||
### 2. Modal öffnet und schließt sofort
|
||||
**Problem:** Modal-Dialoge erscheinen kurz und verschwinden dann.
|
||||
**Ursache:** Automatische Form-Submission ohne preventDefault.
|
||||
**Lösung:** Korrekte Event-Handler-Implementierung mit preventDefault.
|
||||
**Problem**: Der systemd-Dienst für das Flask-Backend startet nicht.
|
||||
|
||||
## Port-Konfiguration Probleme
|
||||
**Lösung**:
|
||||
1. Überprüfe den Status des Dienstes:
|
||||
```bash
|
||||
sudo systemctl status myp.service
|
||||
```
|
||||
2. Schau in die Logs:
|
||||
```bash
|
||||
sudo journalctl -u myp.service -n 50
|
||||
```
|
||||
3. Häufige Ursachen:
|
||||
- Falscher Pfad in myp.service: Überprüfe WorkingDirectory und ExecStart
|
||||
- Python-Umgebung nicht korrekt: Überprüfe, ob die .venv-Umgebung existiert
|
||||
- Abhängigkeiten fehlen: Führe `pip install -r requirements.txt` aus
|
||||
|
||||
### 1. Server läuft auf Port 5000 statt 8443
|
||||
**Problem:** Logs zeigen Port 5000, aber Frontend erwartet 8443.
|
||||
**Ursache:** SSL-Konfiguration fehlgeschlagen, Fallback auf HTTP.
|
||||
**Lösung:**
|
||||
- Intelligente Port-Erkennung implementiert
|
||||
- Automatischer Fallback von HTTPS:8443 zu HTTP:5000
|
||||
- Dynamische API-Base-URL-Generierung
|
||||
- Detailliertes Logging der URL-Erkennung
|
||||
### Fehler: "ModuleNotFoundError: No module named X"
|
||||
|
||||
### 2. Cross-Origin-Probleme
|
||||
**Problem:** CORS-Fehler bei API-Aufrufen zwischen verschiedenen Ports.
|
||||
**Lösung:** Dynamische URL-Erkennung verhindert Cross-Origin-Requests.
|
||||
**Problem**: Beim Start der Flask-App wird ein Python-Modul nicht gefunden.
|
||||
|
||||
### 3. Favicon 404-Fehler
|
||||
**Problem:** `/favicon.ico` gibt 404 zurück.
|
||||
**Lösung:** Route hinzugefügt die vorhandene PNG-Datei verwendet.
|
||||
**Lösung**:
|
||||
1. Aktiviere die virtuelle Umgebung und installiere das fehlende Paket:
|
||||
```bash
|
||||
cd /opt/myp
|
||||
source .venv/bin/activate
|
||||
pip install <fehlende_module>
|
||||
```
|
||||
2. Überprüfe requirements.txt und installiere alle Abhängigkeiten:
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Debugging-Strategien
|
||||
### Fehler: "Address already in use"
|
||||
|
||||
### 1. Admin-API-Test-Route
|
||||
**Zweck:** Überprüfung ob Admin-API grundsätzlich funktioniert.
|
||||
**Route:** `/api/admin/test`
|
||||
**Verwendung:** Zeigt Benutzer-Status und Admin-Berechtigung an.
|
||||
**Problem**: Flask kann nicht starten, weil Port 5000 bereits verwendet wird.
|
||||
|
||||
### 2. Debug-Routen-Übersicht
|
||||
**Route:** `/debug/routes`
|
||||
**Zweck:** Zeigt alle registrierten Flask-Routen an.
|
||||
**Lösung**:
|
||||
1. Finde den Prozess, der Port 5000 verwendet:
|
||||
```bash
|
||||
sudo lsof -i:5000
|
||||
```
|
||||
2. Beende den Prozess:
|
||||
```bash
|
||||
sudo kill <PID>
|
||||
```
|
||||
3. Falls nötig, ändere den Port in app.py:
|
||||
```python
|
||||
app.run(host="0.0.0.0", port=5001, debug=True)
|
||||
```
|
||||
(Und passe auch die URL im kiosk.sh an)
|
||||
|
||||
### 3. Verbesserte Fehlerbehandlung
|
||||
- Alle Admin-API-Routen haben jetzt try-catch-Blöcke
|
||||
- Detaillierte Fehlermeldungen
|
||||
- Graceful degradation bei fehlenden Abhängigkeiten
|
||||
- Intelligente URL-Erkennung mit Logging
|
||||
## Chromium Kiosk-Modus Probleme
|
||||
|
||||
### 4. URL-Debugging
|
||||
**Konsolen-Logs:** Alle API-Aufrufe loggen jetzt die verwendete URL
|
||||
**Port-Erkennung:** Detaillierte Informationen über erkannte Ports und Protokolle
|
||||
**Fallback-Mechanismus:** Automatische Umschaltung zwischen Ports
|
||||
### Fehler: "Chromium startet nicht im Kiosk-Modus"
|
||||
|
||||
## Präventive Maßnahmen
|
||||
**Problem**: Der Browser startet nicht automatisch oder nicht im Vollbildmodus.
|
||||
|
||||
### 1. JavaScript-Funktionen
|
||||
- Alle aufgerufenen Funktionen sind jetzt definiert
|
||||
- Fallback-Mechanismen für fehlende Elemente
|
||||
- Bessere Fehlerbehandlung in Event-Listenern
|
||||
- Korrekte Form-Event-Handler mit preventDefault
|
||||
**Lösung**:
|
||||
1. Überprüfe den Status des User-Services:
|
||||
```bash
|
||||
systemctl --user status kiosk.service
|
||||
```
|
||||
2. Führe kiosk.sh manuell aus, um Fehlermeldungen zu sehen:
|
||||
```bash
|
||||
/home/pi/kiosk.sh
|
||||
```
|
||||
3. Prüfe, ob die notwendigen Pakete installiert sind:
|
||||
```bash
|
||||
sudo apt install --reinstall chromium-browser unclutter
|
||||
```
|
||||
|
||||
### 2. API-Routen
|
||||
- Konsistente Admin-Berechtigung-Prüfung
|
||||
- Sichere Datenbankzugriffe mit finally-Blöcken
|
||||
- Fallback-Werte für alle Statistiken
|
||||
- Dynamische URL-Erkennung für alle API-Aufrufe
|
||||
### Fehler: "Chromium zeigt Fehlerdialoge statt der MYP-Oberfläche"
|
||||
|
||||
### 3. Template-Handling
|
||||
- Alle Admin-Templates existieren
|
||||
- Korrekte Template-Pfade
|
||||
- Fehlerbehandlung für fehlende Templates
|
||||
**Problem**: Der Browser zeigt Crash-Dialoge oder Warnungen an.
|
||||
|
||||
### 4. Port-Management
|
||||
- Intelligente Port-Erkennung
|
||||
- Automatische Fallback-Mechanismen
|
||||
- Cross-Origin-Problem-Vermeidung
|
||||
- Detailliertes URL-Logging
|
||||
**Lösung**:
|
||||
1. Lösche die Chromium-Einstellungen und starte neu:
|
||||
```bash
|
||||
rm -rf ~/.config/chromium/
|
||||
```
|
||||
2. Füge zusätzliche Parameter zu chromium-browser in kiosk.sh hinzu:
|
||||
```bash
|
||||
chromium-browser --kiosk --noerrdialogs --disable-infobars --disable-session-crashed-bubble \
|
||||
--disable-features=DialMediaRouteProvider --window-position=0,0 \
|
||||
--app=http://localhost:5000/ &
|
||||
```
|
||||
|
||||
## Aktuelle Status
|
||||
### Fehler: "Chromium öffnet sich, aber zeigt nicht die MYP-Seite"
|
||||
|
||||
✅ **Behoben:**
|
||||
- `animateCounters` Funktion hinzugefügt
|
||||
- `showPrinterModal` Funktion implementiert
|
||||
- Admin-API-Routen verbessert
|
||||
- Favicon-Route hinzugefügt
|
||||
- Fehlerbehandlung verstärkt
|
||||
- **Dynamische API-URL-Erkennung implementiert**
|
||||
- **Modal-Dialog preventDefault-Problem behoben**
|
||||
- **Port-Mismatch-Problem gelöst**
|
||||
- **JSON-Parse-Fehler behoben**
|
||||
**Problem**: Der Browser startet, aber die Anwendung wird nicht angezeigt.
|
||||
|
||||
🔄 **In Bearbeitung:**
|
||||
- SSL-Konfiguration optimieren
|
||||
- Live-Updates stabilisieren
|
||||
**Lösung**:
|
||||
1. Überprüfe, ob der Flask-Dienst läuft:
|
||||
```bash
|
||||
systemctl status myp.service
|
||||
```
|
||||
2. Teste, ob die Anwendung im Browser erreichbar ist:
|
||||
```bash
|
||||
curl http://localhost:5000/
|
||||
```
|
||||
3. Prüfe, ob Chromium mit der richtigen URL startet:
|
||||
```bash
|
||||
# In kiosk.sh
|
||||
chromium-browser --kiosk --noerrdialogs --disable-infobars \
|
||||
--window-position=0,0 --app=http://localhost:5000/ &
|
||||
```
|
||||
|
||||
⚠️ **Zu überwachen:**
|
||||
- Admin-Berechtigung-Prüfung
|
||||
- Datenbankverbindung-Stabilität
|
||||
- JavaScript-Performance bei Animationen
|
||||
- **API-URL-Fallback-Mechanismus**
|
||||
## Watchdog-Probleme
|
||||
|
||||
## Nächste Schritte
|
||||
### Fehler: "Watchdog-Script funktioniert nicht"
|
||||
|
||||
1. **Server-Neustart testen** - Die Port-Erkennung sollte jetzt funktionieren
|
||||
2. **Admin-Dashboard-Funktionalität verifizieren** - Alle Modals sollten funktionieren
|
||||
3. **Live-Updates überwachen** - API-Aufrufe sollten erfolgreich sein
|
||||
4. SSL-Konfiguration finalisieren
|
||||
5. Performance-Optimierungen implementieren
|
||||
**Problem**: Der Watchdog-Cronjob scheint nicht zu funktionieren.
|
||||
|
||||
## Technische Details
|
||||
**Lösung**:
|
||||
1. Überprüfe, ob der Cron-Job eingerichtet ist:
|
||||
```bash
|
||||
crontab -l
|
||||
```
|
||||
2. Prüfe die Berechtigungen des Watchdog-Scripts:
|
||||
```bash
|
||||
chmod +x /home/pi/watchdog.sh
|
||||
```
|
||||
3. Führe das Script manuell aus und prüfe auf Fehler:
|
||||
```bash
|
||||
/home/pi/watchdog.sh
|
||||
```
|
||||
4. Überprüfe die Logdatei:
|
||||
```bash
|
||||
cat /home/pi/myp-watchdog.log
|
||||
```
|
||||
|
||||
### Port-Erkennung-Algorithmus
|
||||
1. **Gleicher Port:** Wenn Frontend und Backend auf gleichem Port → relative URLs
|
||||
2. **HTTPS:8443 → HTTP:5000:** Automatischer Fallback für häufigsten Fall
|
||||
3. **Andere Ports:** Standard-Backend-Port basierend auf Protokoll
|
||||
4. **Logging:** Alle Entscheidungen werden in der Konsole geloggt
|
||||
### Fehler: "Watchdog kann systemctl nicht ausführen"
|
||||
|
||||
### Modal-Dialog-Fixes
|
||||
- `e.preventDefault()` in allen Form-Submit-Handlers
|
||||
- Explizite Event-Listener statt onclick-Attribute
|
||||
- Korrekte Modal-Schließung nach erfolgreichen API-Aufrufen
|
||||
- Verbesserte Fehlerbehandlung mit Benutzer-Feedback
|
||||
**Problem**: Der Watchdog kann systemctl-Befehle nicht ausführen.
|
||||
|
||||
**Lösung**:
|
||||
1. Erlaubnis für den pi-Benutzer zum Ausführen von systemctl hinzufügen:
|
||||
```bash
|
||||
echo "pi ALL=NOPASSWD: /bin/systemctl restart myp.service" | sudo tee /etc/sudoers.d/myp-watchdog
|
||||
```
|
||||
|
||||
## Allgemeine Probleme
|
||||
|
||||
### Fehler: "Bildschirm wird nach einiger Zeit schwarz"
|
||||
|
||||
**Problem**: Trotz Konfiguration schaltet sich der Bildschirm nach einiger Zeit aus.
|
||||
|
||||
**Lösung**:
|
||||
1. Stelle sicher, dass die xset-Befehle in kiosk.sh korrekt ausgeführt werden:
|
||||
```bash
|
||||
xset s off
|
||||
xset s noblank
|
||||
xset -dpms
|
||||
```
|
||||
2. Aktualisiere die Autostart-Datei:
|
||||
```bash
|
||||
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
|
||||
```
|
||||
Füge folgende Zeilen hinzu:
|
||||
```
|
||||
@xset s off
|
||||
@xset -dpms
|
||||
@xset s noblank
|
||||
```
|
||||
3. Verwende ein Tool wie Caffeine:
|
||||
```bash
|
||||
sudo apt install caffeine
|
||||
```
|
||||
|
||||
### Fehler: "System bootet nicht automatisch in den Kiosk-Modus"
|
||||
|
||||
**Problem**: Der automatische Start des Kiosk-Modus funktioniert nicht.
|
||||
|
||||
**Lösung**:
|
||||
1. Überprüfe, ob der automatische Login aktiviert ist:
|
||||
```bash
|
||||
sudo raspi-config
|
||||
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
|
||||
```
|
||||
2. Stelle sicher, dass der User-Service aktiviert ist:
|
||||
```bash
|
||||
systemctl --user enable kiosk.service
|
||||
```
|
||||
3. Aktiviere Linger für den pi-Benutzer:
|
||||
```bash
|
||||
sudo loginctl enable-linger pi
|
||||
```
|
||||
4. Reboote das System und überprüfe den Status der Dienste:
|
||||
```bash
|
||||
sudo reboot
|
||||
```
|
||||
@@ -22,3 +22,11 @@ wie wird die verbindung ausgehandelt?
|
||||
|
||||
11.09 : Teile bestellt im internen Technikshop
|
||||
12.09 : DNS Alias festlegen / beantragen
|
||||
|
||||
- kiosk modus installieren -> testen in virtual box -> mercedes root ca zertifikate installieren
|
||||
-> shell skript erstellen zur installation, service datei erstellen für systemd
|
||||
-> openbox als desktop environment, chromium im kiosk modus
|
||||
-> 3 instanzen starten automatisch: eine 443, eine 80 als fallback -> api ; + eine instanz auf 5000 für kiosk modus auf localhost
|
||||
-> zertifikate werden selbst erstellt für https
|
||||
|
||||
-> firewalld als firewall service
|
||||
|
||||
246
docs/KIOSK-SETUP.md
Normal file
246
docs/KIOSK-SETUP.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# MYP im Kiosk-Modus
|
||||
|
||||
Diese Anleitung beschreibt, wie MYP (Manage Your Printer) auf einem Raspberry Pi 4 im Kiosk-Modus eingerichtet wird, sodass das System beim Booten automatisch startet.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Raspberry Pi 4 (oder kompatibel) mit Raspbian/Raspberry Pi OS
|
||||
- Internetverbindung für die Installation (nach der Installation wird keine Verbindung mehr benötigt)
|
||||
- Bildschirm, Tastatur und Maus für die Einrichtung
|
||||
|
||||
## Komponenten des Kiosk-Modus
|
||||
|
||||
Die Kiosk-Einrichtung besteht aus mehreren Komponenten:
|
||||
|
||||
1. **Flask-Backend-Dienst**: Systemd-Service zum Starten der MYP-Anwendung
|
||||
2. **Chromium im Kiosk-Modus**: Browserinstanz, die das Dashboard anzeigt
|
||||
3. **Watchdog**: Überwacht den Browser und das Backend, startet bei Bedarf neu
|
||||
|
||||
## Automatische Installation
|
||||
|
||||
Für die automatische Installation kann das mitgelieferte Setup-Script verwendet werden:
|
||||
|
||||
```bash
|
||||
chmod +x setup.sh
|
||||
./setup.sh
|
||||
```
|
||||
|
||||
Dieses Script führt alle notwendigen Schritte aus:
|
||||
- Installation der benötigten Pakete
|
||||
- Kopieren der MYP-Anwendung nach `/opt/myp`
|
||||
- Einrichtung der Python-Umgebung und Installation der Abhängigkeiten
|
||||
- Konfiguration der Systemd-Dienste
|
||||
- Einrichtung des Kiosk-Modus
|
||||
- Einrichtung des Watchdogs
|
||||
|
||||
Nach der Ausführung des Scripts muss noch der automatische Login aktiviert werden:
|
||||
```bash
|
||||
sudo raspi-config
|
||||
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
|
||||
```
|
||||
|
||||
## Manuelle Installation
|
||||
|
||||
Falls eine manuelle Installation bevorzugt wird, können die folgenden Schritte ausgeführt werden:
|
||||
|
||||
### 1. Pakete installieren
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y python3 python3-pip python3-venv chromium-browser \
|
||||
unclutter xdotool xscreensaver git
|
||||
```
|
||||
|
||||
### 2. MYP nach /opt/myp kopieren
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/myp
|
||||
sudo chown $USER:$USER /opt/myp
|
||||
cp -r ./myp/* /opt/myp
|
||||
cd /opt/myp
|
||||
```
|
||||
|
||||
### 3. Python-Umgebung und Abhängigkeiten einrichten
|
||||
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 4. Systemd-Dienst für das Flask-Backend
|
||||
|
||||
Datei erstellen: `/etc/systemd/system/myp.service`
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=MYP Flask Backend
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
User=pi
|
||||
WorkingDirectory=/opt/myp
|
||||
ExecStart=/opt/myp/.venv/bin/python /opt/myp/app.py
|
||||
Restart=always
|
||||
Environment=PYTHONUNBUFFERED=1
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Dienst aktivieren:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now myp.service
|
||||
```
|
||||
|
||||
### 5. Kiosk-Script einrichten
|
||||
|
||||
Datei erstellen: `/home/pi/kiosk.sh`
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Bildschirm-Blanking verhindern
|
||||
xset s off
|
||||
xset s noblank
|
||||
xset -dpms
|
||||
|
||||
# Mauszeiger ausblenden
|
||||
unclutter -idle 0.5 -root &
|
||||
|
||||
# Chromium-Crash-Dialoge unterdrücken
|
||||
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' \
|
||||
"$HOME/.config/chromium/Default/Preferences" 2>/dev/null || true
|
||||
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' \
|
||||
"$HOME/.config/chromium/Default/Preferences" 2>/dev/null || true
|
||||
|
||||
# Browser starten
|
||||
chromium-browser --kiosk --noerrdialogs --disable-infobars \
|
||||
--window-position=0,0 --app=http://localhost:5000/ &
|
||||
```
|
||||
|
||||
Ausführbar machen:
|
||||
|
||||
```bash
|
||||
chmod +x /home/pi/kiosk.sh
|
||||
```
|
||||
|
||||
### 6. Systemd-User-Dienst für den Browser
|
||||
|
||||
Verzeichnis erstellen:
|
||||
|
||||
```bash
|
||||
mkdir -p /home/pi/.config/systemd/user
|
||||
```
|
||||
|
||||
Datei erstellen: `/home/pi/.config/systemd/user/kiosk.service`
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Chromium Kiosk
|
||||
PartOf=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
ExecStart=/home/pi/kiosk.sh
|
||||
Restart=on-abort
|
||||
|
||||
[Install]
|
||||
WantedBy=xsession.target
|
||||
```
|
||||
|
||||
Dienst aktivieren:
|
||||
|
||||
```bash
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable kiosk.service
|
||||
sudo loginctl enable-linger pi
|
||||
```
|
||||
|
||||
### 7. Watchdog einrichten
|
||||
|
||||
Datei erstellen: `/home/pi/watchdog.sh`
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# MYP Watchdog für Chromium Browser
|
||||
|
||||
# Funktion zum Loggen von Nachrichten
|
||||
log() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> /home/pi/myp-watchdog.log
|
||||
}
|
||||
|
||||
# Prüfen, ob Chromium läuft
|
||||
if ! pgrep -x "chromium-browse" > /dev/null; then
|
||||
log "Chromium nicht gefunden - starte neu"
|
||||
|
||||
# Alle eventuell noch vorhandenen Chromium-Prozesse beenden
|
||||
pkill -f chromium || true
|
||||
|
||||
# Warten bis alle Prozesse beendet sind
|
||||
sleep 2
|
||||
|
||||
# Kiosk-Script neu starten
|
||||
/home/pi/kiosk.sh
|
||||
|
||||
log "Chromium neugestartet"
|
||||
fi
|
||||
|
||||
# Prüfen, ob MYP Flask-Dienst läuft
|
||||
if ! systemctl is-active --quiet myp.service; then
|
||||
log "MYP Flask-Dienst ist nicht aktiv - starte neu"
|
||||
|
||||
# Dienst neustarten
|
||||
sudo systemctl restart myp.service
|
||||
|
||||
log "MYP Flask-Dienst neugestartet"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
```
|
||||
|
||||
Ausführbar machen und Cron-Job einrichten:
|
||||
|
||||
```bash
|
||||
chmod +x /home/pi/watchdog.sh
|
||||
(crontab -l 2>/dev/null || echo "") | grep -v "watchdog.sh" | { cat; echo "*/5 * * * * /home/pi/watchdog.sh > /dev/null 2>&1"; } | crontab -
|
||||
```
|
||||
|
||||
### 8. Automatischen Desktop-Login einschalten
|
||||
|
||||
```bash
|
||||
sudo raspi-config
|
||||
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
|
||||
```
|
||||
|
||||
### 9. Bildschirm nie ausschalten
|
||||
|
||||
```bash
|
||||
sudo sed -i 's/#BLANK_TIME=.*/BLANK_TIME=0/' /etc/xdg/lxsession/LXDE-pi/autostart
|
||||
```
|
||||
|
||||
## Ablauf beim Booten
|
||||
|
||||
1. Der Raspberry Pi startet und fährt bis zum Multi-User-Target hoch
|
||||
2. `myp.service` wird gestartet und das Flask-Backend sowie der Plug-Scheduler laufen
|
||||
3. LightDM startet und meldet den Benutzer `pi` automatisch an
|
||||
4. Nach dem Anmelden wird der User-Scope geladen und `kiosk.service` gestartet
|
||||
5. `kiosk.sh` startet Chromium im Kiosk-Modus und öffnet die MYP-Oberfläche
|
||||
6. Der Watchdog-Cron-Job überwacht alle 5 Minuten, ob alles läuft
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
- **MYP startet nicht**: `systemctl status myp.service` zeigt den Status des Dienstes
|
||||
- **Browser startet nicht**: `systemctl --user status kiosk.service` zeigt den Status des Kiosk-Dienstes
|
||||
- **Watchdog-Logs**: In `/home/pi/myp-watchdog.log` werden Probleme und Neustarts protokolliert
|
||||
|
||||
## Anpassung für andere Benutzer
|
||||
|
||||
Falls ein anderer Benutzer als `pi` verwendet wird, müssen folgende Anpassungen vorgenommen werden:
|
||||
|
||||
1. In `myp.service`: `User=` auf den entsprechenden Benutzer ändern
|
||||
2. Pfade in `kiosk.sh` und `kiosk.service` anpassen
|
||||
3. `loginctl enable-linger` für den entsprechenden Benutzer aktivieren
|
||||
376
docs/README.md
376
docs/README.md
@@ -1,376 +0,0 @@
|
||||
# MYP Reservation Platform
|
||||
|
||||
Mercedes-Benz Werk 040 Berlin - 3D-Drucker Reservierungsplattform
|
||||
|
||||
## 🚀 Schnellstart
|
||||
|
||||
### MYP Control Center (Empfohlen)
|
||||
|
||||
Das zentrale Installationssystem für alle Komponenten:
|
||||
|
||||
```bash
|
||||
# Repository klonen
|
||||
git clone <repository-url>
|
||||
cd Projektarbeit-MYP
|
||||
|
||||
# MYP Control Center starten
|
||||
./myp_installer.sh
|
||||
```
|
||||
|
||||
Das MYP Control Center bietet:
|
||||
- **Schnellstart-Installationen** (Vollständig, Backend-Only, Entwicklung)
|
||||
- **Produktions-Installer** (Integration der v3.2 install.sh Funktionalität)
|
||||
- **Granulare Installation** (Einzelne Komponenten)
|
||||
- **System & Wartung** (Tests, Status, Informationen)
|
||||
|
||||
### Direkter Produktions-Installer
|
||||
|
||||
Für schnelle Produktions-Deployments direkt im MYP Control Center → Option 4:
|
||||
|
||||
```bash
|
||||
./myp_installer.sh
|
||||
# → Wähle Option 4: Produktions-Installer
|
||||
# → Backend installieren (Raspberry Pi)
|
||||
# → Frontend installieren (Docker)
|
||||
```
|
||||
|
||||
### Voraussetzungen
|
||||
|
||||
- **Backend (Raspberry Pi)**: Python 3.11, systemd
|
||||
- **Frontend (m040tbaraspi001)**: Docker, Docker Compose
|
||||
|
||||
## 🌐 Zugriff
|
||||
|
||||
- **Frontend**: https://m040tbaraspi001.de040.corpintra.net
|
||||
- **Backend API**: https://raspberrypi/api
|
||||
|
||||
## 🔧 Konfiguration
|
||||
|
||||
### Netzwerk
|
||||
|
||||
| Komponente | Hostname | IP | Port |
|
||||
|------------|----------|----|----- |
|
||||
| Frontend | m040tbaraspi001.de040.corpintra.net | 192.168.0.109 | 443 |
|
||||
| Backend | raspberrypi | 192.168.0.105 | 443 |
|
||||
|
||||
### TLS-Zertifikate
|
||||
|
||||
Selbstsignierte Zertifikate werden automatisch generiert:
|
||||
- Backend: `backend/app/certs/`
|
||||
- Frontend: `frontend/certs/`
|
||||
|
||||
## 📊 Health Checks
|
||||
|
||||
```bash
|
||||
# Backend
|
||||
curl -k https://raspberrypi/api/test
|
||||
|
||||
# Frontend
|
||||
curl -k https://m040tbaraspi001.de040.corpintra.net/health
|
||||
```
|
||||
|
||||
## 🛠️ Entwicklung
|
||||
|
||||
### MYP Control Center (Entwicklungs-Setup)
|
||||
```bash
|
||||
./myp_installer.sh
|
||||
# → Option 3: Entwicklungs-Setup
|
||||
```
|
||||
|
||||
### MYP Kiosk-Modus (Produktions-bereit)
|
||||
|
||||
Das Backend bietet parallel zur API auch ein **vollständiges Web-Interface** für Kiosk-Betrieb:
|
||||
|
||||
```bash
|
||||
./myp_installer.sh
|
||||
# → Option 2: Backend-Only Installation (mit Kiosk Web Interface)
|
||||
# oder
|
||||
# → Option 5: Granulare Installation → Kiosk-Modus installieren
|
||||
```
|
||||
|
||||
**Kiosk-Features:**
|
||||
- ✅ **Web-Interface parallel zur API** - Kein separates Frontend nötig
|
||||
- ✅ **Touch-optimierte Bedienung** - Ideal für Raspberry Pi Touchscreens
|
||||
- ✅ **Automatischer Browser-Start** - Vollbild-Modus beim Boot
|
||||
- ✅ **systemd Integration** - Service-basierte Kiosk-Verwaltung
|
||||
- ✅ **Produktions-bereit** - SSL, Logging, Monitoring
|
||||
|
||||
**Kiosk URLs:**
|
||||
- Hauptinterface: `https://raspberrypi/`
|
||||
- Dashboard: `https://raspberrypi/dashboard`
|
||||
- Drucker-Verwaltung: `https://raspberrypi/printers`
|
||||
- Job-Verwaltung: `https://raspberrypi/jobs`
|
||||
- Admin-Panel: `https://raspberrypi/admin`
|
||||
|
||||
### Manuelle Installation
|
||||
|
||||
#### Backend Debug-Modus
|
||||
```bash
|
||||
cd backend/app
|
||||
python3.11 app.py --debug
|
||||
```
|
||||
|
||||
#### Frontend Development
|
||||
```bash
|
||||
cd frontend
|
||||
npm run dev
|
||||
```
|
||||
|
||||
#### Kiosk-Modus manuell starten
|
||||
```bash
|
||||
# Backend starten
|
||||
cd backend/app && python app.py
|
||||
|
||||
# Kiosk-Browser starten (separates Terminal)
|
||||
./backend/app/start_kiosk.sh
|
||||
```
|
||||
|
||||
## 📁 Projektstruktur
|
||||
|
||||
```
|
||||
Projektarbeit-MYP/
|
||||
├── myp_installer.sh # 🎯 HAUPT-INSTALLER (Control Center)
|
||||
├── backend/
|
||||
│ ├── app/
|
||||
│ │ ├── certs/ # TLS-Zertifikate
|
||||
│ │ ├── database/ # SQLite-Datenbank
|
||||
│ │ ├── logs/ # Anwendungslogs
|
||||
│ │ └── app.py # Hauptanwendung
|
||||
│ ├── myp.service # systemd Service
|
||||
│ ├── requirements.txt # Python-Abhängigkeiten
|
||||
│ └── legacy_setup_raspberry_pi.sh # Legacy Skript
|
||||
├── frontend/
|
||||
│ ├── certs/ # TLS-Zertifikate
|
||||
│ ├── docker/
|
||||
│ │ ├── caddy/
|
||||
│ │ │ └── Caddyfile # Reverse Proxy Konfiguration
|
||||
│ │ └── legacy_deploy.sh # Legacy Skript
|
||||
│ ├── src/ # Next.js Anwendung
|
||||
│ └── docker-compose.yml
|
||||
├── scripts/
|
||||
│ └── legacy_generate_certs.sh # Legacy Skript
|
||||
├── archiv/
|
||||
│ └── myp_installer_legacy.sh # Archivierte Version
|
||||
└── docs/ # Dokumentation
|
||||
```
|
||||
|
||||
### Script-Status
|
||||
|
||||
| Skript | Status | Verwendung |
|
||||
|--------|--------|------------|
|
||||
| `myp_installer.sh` | ✅ **AKTIV** | Haupt-Control-Center |
|
||||
| `*legacy_*.sh` | 📦 Legacy | Historische Versionen |
|
||||
| `archiv/myp_installer_legacy.sh` | 📦 Archiv | Alte Version 4.0 |
|
||||
|
||||
## 🔒 Sicherheit
|
||||
|
||||
- HTTPS-only (Port 443)
|
||||
- Selbstsignierte TLS-Zertifikate
|
||||
- HTTP → HTTPS Redirect
|
||||
- Security Headers (HSTS, CSP, etc.)
|
||||
|
||||
## 📝 Logs
|
||||
|
||||
### Backend
|
||||
```bash
|
||||
# systemd Journal
|
||||
sudo journalctl -u myp.service -f
|
||||
|
||||
# Anwendungslogs
|
||||
tail -f backend/app/logs/app/app.log
|
||||
```
|
||||
|
||||
### Frontend
|
||||
```bash
|
||||
# Docker Logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Caddy Logs
|
||||
docker-compose logs caddy
|
||||
```
|
||||
|
||||
### Kiosk-Modus
|
||||
```bash
|
||||
# Backend Service
|
||||
sudo systemctl status myp.service
|
||||
|
||||
# Kiosk-Browser Service
|
||||
sudo systemctl status myp-kiosk-browser.service
|
||||
|
||||
# Kiosk-Browser Logs
|
||||
sudo journalctl -u myp-kiosk-browser.service -f
|
||||
```
|
||||
|
||||
## 🔧 Services
|
||||
|
||||
### Backend Services
|
||||
```bash
|
||||
# Backend starten/stoppen
|
||||
sudo systemctl start myp.service
|
||||
sudo systemctl stop myp.service
|
||||
sudo systemctl restart myp.service
|
||||
|
||||
# Kiosk-Browser starten/stoppen (falls installiert)
|
||||
sudo systemctl start myp-kiosk-browser.service
|
||||
sudo systemctl stop myp-kiosk-browser.service
|
||||
|
||||
# Automatischen Start aktivieren/deaktivieren
|
||||
sudo systemctl enable myp.service
|
||||
sudo systemctl enable myp-kiosk-browser.service
|
||||
```
|
||||
|
||||
## 🆘 Troubleshooting
|
||||
|
||||
### MYP Control Center verwenden
|
||||
```bash
|
||||
./myp_installer.sh
|
||||
# → Option 6: Systemvoraussetzungen prüfen
|
||||
# → Option 7: Anwendung starten
|
||||
```
|
||||
|
||||
### Backend startet nicht
|
||||
```bash
|
||||
# Service Status prüfen
|
||||
sudo systemctl status myp.service
|
||||
|
||||
# Logs prüfen
|
||||
sudo journalctl -u myp.service --no-pager
|
||||
|
||||
# Zertifikate prüfen
|
||||
ls -la backend/app/certs/
|
||||
```
|
||||
|
||||
### Frontend nicht erreichbar
|
||||
```bash
|
||||
# Container Status prüfen
|
||||
docker-compose ps
|
||||
|
||||
# Netzwerk prüfen
|
||||
docker network ls
|
||||
|
||||
# Zertifikate prüfen
|
||||
ls -la frontend/certs/
|
||||
```
|
||||
|
||||
### Verbindungsprobleme
|
||||
```bash
|
||||
# DNS auflösen
|
||||
nslookup raspberrypi
|
||||
nslookup m040tbaraspi001.de040.corpintra.net
|
||||
|
||||
# Ports prüfen
|
||||
netstat -tlnp | grep :443
|
||||
```
|
||||
|
||||
## 📋 Version
|
||||
|
||||
- **Version**: 3.2-final
|
||||
- **Control Center**: v4.0 mit v3.2 Integration
|
||||
- **Build**: Production
|
||||
- **Installer**: MYP Control Center
|
||||
|
||||
## 👥 Support
|
||||
|
||||
Bei Problemen verwenden Sie das MYP Control Center oder wenden Sie sich an das IT-Team des Mercedes-Benz Werk 040 Berlin.
|
||||
|
||||
## 🖥️ Zwei-Server-Setup (Produktions-Architektur)
|
||||
|
||||
Das MYP-System ist für eine **Zwei-Server-Architektur** optimiert:
|
||||
|
||||
### Server-Architektur
|
||||
|
||||
| Server | Hostname | Komponenten | URL |
|
||||
|--------|----------|-------------|-----|
|
||||
| **Frontend-Server** | `m040tbaraspi001.de040.corpintra.net` | Next.js + Docker + Caddy | `https://m040tbaraspi001.de040.corpintra.net` |
|
||||
| **Backend-Server** | `raspberrypi` | Flask API + Web Interface + Kiosk | `https://raspberrypi` |
|
||||
|
||||
### 🚀 Server-spezifische Installation (Empfohlen)
|
||||
|
||||
Der `myp_installer.sh` erkennt automatisch den Server-Typ und bietet passende Installationsoptionen:
|
||||
|
||||
```bash
|
||||
./myp_installer.sh
|
||||
# Wählen Sie: "1. Server-spezifische Installation (Empfohlen)"
|
||||
```
|
||||
|
||||
#### Frontend-Server (m040tbaraspi001)
|
||||
```bash
|
||||
# Automatische Erkennung: m040tbaraspi001.de040.corpintra.net
|
||||
# Verfügbare Optionen:
|
||||
# 1. Frontend installieren (Next.js + Docker)
|
||||
# 2. Frontend Produktions-Deployment (Port 443 mit SSL)
|
||||
# 3. Nur Docker & Dependencies installieren
|
||||
```
|
||||
|
||||
#### Backend-Server (Raspberry Pi)
|
||||
```bash
|
||||
# Automatische Erkennung: raspberrypi
|
||||
# Verfügbare Optionen:
|
||||
# 1. Backend installieren (Flask API + Web Interface)
|
||||
# 2. Kiosk-Modus installieren (Touch-Interface)
|
||||
# 3. Produktions-Setup (Backend + Kiosk + Services)
|
||||
# 4. Nur Python & Dependencies installieren
|
||||
```
|
||||
|
||||
### 🔧 Manuelle Installation
|
||||
|
||||
#### Frontend-Server Setup
|
||||
```bash
|
||||
# Auf m040tbaraspi001.de040.corpintra.net
|
||||
cd frontend/
|
||||
npm install
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Backend-Server Setup
|
||||
```bash
|
||||
# Auf raspberrypi
|
||||
cd backend/app/
|
||||
python3.11 -m pip install -r requirements.txt
|
||||
sudo systemctl start myp.service
|
||||
sudo systemctl start myp-kiosk-browser.service # Optional: Kiosk-Modus
|
||||
```
|
||||
|
||||
### 🌐 URLs & Zugriff
|
||||
|
||||
#### Frontend (m040tbaraspi001)
|
||||
- **Haupt-URL**: `https://m040tbaraspi001.de040.corpintra.net`
|
||||
- **Entwicklung**: `http://localhost:3000` (npm run dev)
|
||||
- **Produktion**: `https://localhost:443` (Docker)
|
||||
|
||||
#### Backend (Raspberry Pi)
|
||||
- **API**: `https://raspberrypi/api`
|
||||
- **Web Interface**: `https://raspberrypi`
|
||||
- **Kiosk-Modus**: `https://raspberrypi` (Vollbild-Touch-Interface)
|
||||
|
||||
### 🔗 Server-Kommunikation
|
||||
|
||||
Die Server kommunizieren über HTTPS:
|
||||
- **Frontend → Backend**: `https://raspberrypi/api`
|
||||
- **OAuth Callbacks**: `https://m040tbaraspi001.de040.corpintra.net/auth/login/callback`
|
||||
- **Cross-Origin**: Automatisch konfiguriert für beide Domains
|
||||
|
||||
### 🛠️ Konfiguration
|
||||
|
||||
#### Frontend (.env.local)
|
||||
```bash
|
||||
# Backend-Verbindung
|
||||
NEXT_PUBLIC_API_URL=https://raspberrypi
|
||||
NEXT_PUBLIC_BACKEND_HOST=raspberrypi
|
||||
|
||||
# Frontend-URLs
|
||||
NEXT_PUBLIC_FRONTEND_URL=https://m040tbaraspi001.de040.corpintra.net
|
||||
NEXTAUTH_URL=https://m040tbaraspi001.de040.corpintra.net
|
||||
```
|
||||
|
||||
#### Backend (config/settings.py)
|
||||
```python
|
||||
# Frontend-Verbindung
|
||||
FRONTEND_URL = "https://m040tbaraspi001.de040.corpintra.net"
|
||||
CORS_ORIGINS = ["https://m040tbaraspi001.de040.corpintra.net"]
|
||||
|
||||
# Kiosk-Konfiguration
|
||||
KIOSK_MODE = True
|
||||
KIOSK_AUTO_LOGIN = True
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user