Remove deprecated backend files and documentation, including Docker configurations, environment variables, and various scripts, to streamline the project structure and eliminate unused components.
This commit is contained in:
@@ -1,189 +1,118 @@
|
||||
# MYP Backend-Steuerungsplattform
|
||||
# MYP - Manage Your Printer
|
||||
|
||||
Dies ist das Backend für das MYP (Manage Your Printer) Projekt, ein IHK-Abschlussprojekt für Fachinformatiker für digitale Vernetzung. Die Plattform ist mit Python und Flask implementiert und stellt eine RESTful API zur Verfügung, die es ermöglicht, 3D-Drucker zu verwalten, zu reservieren und über WLAN-Steckdosen (Tapo P115) zu steuern.
|
||||
Ein System zur Verwaltung und Steuerung von 3D-Druckern über TP-Link Tapo P110 Smart Plugs.
|
||||
|
||||
## Funktionen
|
||||
## Funktionsumfang
|
||||
|
||||
- Lokales Authentifizierungssystem (Offline-fähig)
|
||||
- Rollen-basierte Zugriffskontrolle (Admin/User/Guest)
|
||||
- Druckerverwaltung (Hinzufügen, Bearbeiten, Löschen)
|
||||
- Reservierungsverwaltung (Erstellen, Abbrechen, Verlängern)
|
||||
- Fernsteuerung von WLAN-Steckdosen (Tapo P115)
|
||||
- Statistikerfassung und -anzeige
|
||||
- RESTful API für die Kommunikation mit dem Frontend
|
||||
- Benutzer- und Rechteverwaltung (Admin/User)
|
||||
- Verwaltung von Druckern und Smart Plugs
|
||||
- Reservierungssystem für Drucker (Zeitplanung)
|
||||
- Automatisches Ein-/Ausschalten der Drucker über Smart Plugs
|
||||
- Statistikerfassung für Druckaufträge
|
||||
- **NEU**: Kiosk-Modus für automatischen Start auf Raspberry Pi
|
||||
|
||||
## Technologie-Stack
|
||||
## Systemvoraussetzungen
|
||||
|
||||
- **Python**: Programmiersprache
|
||||
- **Flask**: Web-Framework
|
||||
- **SQLite**: Integrierte Datenbank (kann für Produktion durch PostgreSQL ersetzt werden)
|
||||
- **PyP100**: Python-Bibliothek zur Steuerung der Tapo P115 WLAN-Steckdosen
|
||||
- **Gunicorn**: WSGI HTTP Server für die Produktionsumgebung
|
||||
- **Docker**: Containerisierung der Anwendung
|
||||
- Raspberry Pi 4 (oder kompatibel)
|
||||
- Python 3.11+
|
||||
- Internetzugang für die Installation (danach offline nutzbar)
|
||||
- TP-Link Tapo P110 Smart Plugs im lokalen Netzwerk
|
||||
|
||||
## Projekt-Struktur
|
||||
## Installation
|
||||
|
||||
- `app.py`: Hauptanwendungsdatei mit allen Routen und Modellen
|
||||
- `requirements.txt`: Liste aller Python-Abhängigkeiten
|
||||
- `Dockerfile`: Docker-Konfiguration
|
||||
- `docker-compose.yml`: Docker Compose Konfiguration für einfaches Deployment
|
||||
- `.env.example`: Beispiel für die Umgebungsvariablen
|
||||
- `logs/`: Logdateien (automatisch erstellt)
|
||||
- `instance/`: SQLite-Datenbank (automatisch erstellt)
|
||||
### Standardinstallation
|
||||
|
||||
## Installation und Ausführung
|
||||
1. Repository klonen oder Dateien auf den Raspberry Pi kopieren
|
||||
|
||||
### Lokal (Entwicklung)
|
||||
2. Abhängigkeiten installieren:
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
1. Python 3.8 oder höher installieren
|
||||
2. Repository klonen
|
||||
3. Ins Projektverzeichnis wechseln
|
||||
4. Virtuelle Umgebung erstellen (optional, aber empfohlen)
|
||||
```
|
||||
python -m venv venv
|
||||
source venv/bin/activate # Unter Windows: venv\Scripts\activate
|
||||
```
|
||||
5. Abhängigkeiten installieren
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
6. `.env.example` nach `.env` kopieren und anpassen
|
||||
```
|
||||
cp .env.example .env
|
||||
```
|
||||
7. Anwendung starten
|
||||
```
|
||||
python app.py
|
||||
```
|
||||
3. Anwendung starten:
|
||||
```bash
|
||||
python app.py
|
||||
```
|
||||
|
||||
Die Anwendung ist dann unter http://localhost:5000 erreichbar.
|
||||
Die Anwendung läuft dann unter http://localhost:5000 oder unter der IP-Adresse des Raspberry Pi.
|
||||
|
||||
### Mit Docker
|
||||
### Kiosk-Modus Installation
|
||||
|
||||
1. Docker und Docker Compose installieren
|
||||
2. Ins Projektverzeichnis wechseln
|
||||
3. `.env.example` nach `.env` kopieren und anpassen
|
||||
```
|
||||
cp .env.example .env
|
||||
```
|
||||
4. Anwendung starten
|
||||
```
|
||||
docker-compose up -d
|
||||
```
|
||||
Für den vollautomatischen Start im Kiosk-Modus (z.B. für IHK-Prüfungen):
|
||||
|
||||
Die Anwendung ist dann unter http://localhost:5000 erreichbar.
|
||||
```bash
|
||||
chmod +x setup.sh
|
||||
./setup.sh
|
||||
```
|
||||
|
||||
## API-Endpunkte
|
||||
Detaillierte Anweisungen finden sich in der [Kiosk-Setup Anleitung](KIOSK-SETUP.md).
|
||||
|
||||
## Erster Start
|
||||
|
||||
Beim ersten Start wird eine leere Datenbank angelegt. Es muss ein erster Administrator angelegt werden:
|
||||
|
||||
```
|
||||
POST /api/create-initial-admin
|
||||
```
|
||||
|
||||
Mit folgendem JSON-Body:
|
||||
```json
|
||||
{
|
||||
"email": "admin@example.com",
|
||||
"password": "sicheres-passwort",
|
||||
"name": "Administrator"
|
||||
}
|
||||
```
|
||||
|
||||
## API-Dokumentation
|
||||
|
||||
Die Anwendung stellt folgende REST-API-Endpunkte bereit:
|
||||
|
||||
### Authentifizierung
|
||||
|
||||
- `POST /auth/register`: Neuen Benutzer registrieren
|
||||
- `POST /auth/login`: Benutzer anmelden
|
||||
- `POST /auth/logout`: Abmelden und Session beenden
|
||||
- `POST /api/create-initial-admin`: Initialen Administrator erstellen
|
||||
- `GET /api/me`: Aktuelle Benutzerinformationen abrufen
|
||||
|
||||
### Benutzer
|
||||
|
||||
- `GET /api/users`: Liste aller Benutzer (Admin)
|
||||
- `GET /api/users/<id>`: Details zu einem Benutzer (Admin)
|
||||
- `PUT /api/users/<id>`: Benutzer aktualisieren (Admin)
|
||||
- `DELETE /api/users/<id>`: Benutzer löschen (Admin)
|
||||
- `POST /auth/register` - Neuen Benutzer registrieren
|
||||
- `POST /auth/login` - Anmelden (erstellt eine Session für 7 Tage)
|
||||
|
||||
### Drucker
|
||||
|
||||
- `GET /api/printers`: Liste aller Drucker
|
||||
- `POST /api/printers`: Drucker hinzufügen (Admin)
|
||||
- `GET /api/printers/<id>`: Details zu einem Drucker
|
||||
- `PUT /api/printers/<id>`: Drucker aktualisieren (Admin)
|
||||
- `DELETE /api/printers/<id>`: Drucker löschen (Admin)
|
||||
- `GET /api/printers` - Alle Drucker auflisten
|
||||
- `GET /api/printers/<printerId>` - Einzelnen Drucker abrufen
|
||||
- `POST /api/printers` - Neuen Drucker anlegen
|
||||
- `DELETE /api/printers/<printerId>` - Drucker löschen
|
||||
|
||||
### Druckaufträge
|
||||
### Jobs/Reservierungen
|
||||
|
||||
- `GET /api/jobs`: Liste aller Druckaufträge (Admin) oder eigener Druckaufträge (Benutzer)
|
||||
- `POST /api/jobs`: Druckauftrag erstellen
|
||||
- `GET /api/jobs/<id>`: Details zu einem Druckauftrag
|
||||
- `POST /api/jobs/<id>/abort`: Druckauftrag abbrechen
|
||||
- `POST /api/jobs/<id>/finish`: Druckauftrag vorzeitig beenden
|
||||
- `POST /api/jobs/<id>/extend`: Druckauftrag verlängern
|
||||
- `PUT /api/jobs/<id>/comments`: Kommentare aktualisieren
|
||||
- `GET /api/job/<id>/remaining-time`: Verbleibende Zeit für einen aktiven Druckauftrag
|
||||
- `GET /api/jobs` - Alle Reservierungen abrufen
|
||||
- `POST /api/jobs` - Neue Reservierung anlegen
|
||||
- `GET /api/jobs/<jobId>` - Reservierungsdetails abrufen
|
||||
- `POST /api/jobs/<jobId>/finish` - Job beenden (Plug ausschalten)
|
||||
- `POST /api/jobs/<jobId>/abort` - Job abbrechen (Plug ausschalten)
|
||||
- `POST /api/jobs/<jobId>/extend` - Endzeit verschieben
|
||||
- `GET /api/jobs/<jobId>/status` - Aktuellen Plug-Status abrufen
|
||||
- `GET /api/jobs/<jobId>/remaining-time` - Restzeit in Sekunden abrufen
|
||||
- `DELETE /api/jobs/<jobId>` - Job löschen
|
||||
|
||||
### Statistiken
|
||||
### Benutzer
|
||||
|
||||
- `GET /api/stats`: Statistiken zu Druckern, Aufträgen und Benutzern (Admin)
|
||||
- `GET /api/users` - Alle Benutzer auflisten (nur Admin)
|
||||
- `GET /api/users/<userId>` - Einzelnen Benutzer abrufen
|
||||
- `DELETE /api/users/<userId>` - Benutzer löschen (nur Admin)
|
||||
|
||||
## Datenmodell
|
||||
### Sonstiges
|
||||
|
||||
### Benutzer (User)
|
||||
- `GET /api/stats` - Globale Statistik (Druckzeit, etc.)
|
||||
- `GET /api/test` - Health-Check
|
||||
|
||||
- id (String UUID, Primary Key)
|
||||
- username (String, Unique)
|
||||
- password_hash (String)
|
||||
- display_name (String)
|
||||
- email (String, Unique)
|
||||
- role (String, 'admin', 'user' oder 'guest')
|
||||
## Sicherheitshinweise
|
||||
|
||||
### Session
|
||||
- Diese Anwendung speichert alle Zugangsdaten direkt im Code und in der Datenbank.
|
||||
- Die Anwendung sollte ausschließlich in einem geschützten, lokalen Netzwerk betrieben werden.
|
||||
- Es wird keine Verschlüsselung für die API-Kommunikation verwendet.
|
||||
|
||||
- id (String UUID, Primary Key)
|
||||
- user_id (String UUID, Foreign Key zu User)
|
||||
- expires_at (DateTime)
|
||||
## Wartung und Troubleshooting
|
||||
|
||||
### Drucker (Printer)
|
||||
- Die Logdatei `myp.log` enthält alle wichtigen Ereignisse und Fehler
|
||||
- Die Datenbank wird in `database/myp.db` gespeichert
|
||||
- Häufig auftretende Probleme und Lösungen finden sich in [COMMON_ERRORS.md](COMMON_ERRORS.md)
|
||||
- Zukünftige Entwicklungspläne sind in [ROADMAP.md](ROADMAP.md) dokumentiert
|
||||
|
||||
- id (String UUID, Primary Key)
|
||||
- name (String)
|
||||
- description (Text)
|
||||
- status (Integer, 0=available, 1=busy, 2=maintenance)
|
||||
- ip_address (String, IP-Adresse der Tapo-Steckdose)
|
||||
|
||||
### Druckauftrag (PrintJob)
|
||||
|
||||
- id (String UUID, Primary Key)
|
||||
- printer_id (String UUID, Foreign Key zu Printer)
|
||||
- user_id (String UUID, Foreign Key zu User)
|
||||
- start_at (DateTime)
|
||||
- duration_in_minutes (Integer)
|
||||
- comments (Text)
|
||||
- aborted (Boolean)
|
||||
- abort_reason (Text)
|
||||
|
||||
## Steckdosensteuerung
|
||||
|
||||
Die Anwendung steuert Tapo P115 WLAN-Steckdosen, um die Drucker basierend auf Reservierungen ein- und auszuschalten:
|
||||
|
||||
- Bei Erstellung eines Druckauftrags wird die Steckdose des zugehörigen Druckers automatisch eingeschaltet
|
||||
- Bei Abbruch oder vorzeitiger Beendigung eines Druckauftrags wird die Steckdose ausgeschaltet
|
||||
- Nach Ablauf der Reservierungszeit wird die Steckdose automatisch ausgeschaltet
|
||||
- Ein CLI-Befehl `flask check-jobs` überprüft regelmäßig abgelaufene Jobs und schaltet Steckdosen aus
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Die Anwendung verwendet ein lokales Authentifizierungssystem mit Passwort-Hashing
|
||||
- Sitzungsdaten werden in Server-Side-Sessions gespeichert
|
||||
- Zugriffskontrollen sind implementiert, um sicherzustellen, dass Benutzer nur auf ihre eigenen Daten zugreifen können
|
||||
- Admin-Benutzer haben Zugriff auf alle Daten und können Systemkonfigurationen ändern
|
||||
- Der erste registrierte Benutzer wird automatisch zum Administrator
|
||||
|
||||
## Logging
|
||||
|
||||
Die Anwendung protokolliert Aktivitäten in rotierenden Logdateien in einem `logs` Verzeichnis. Dies hilft bei der Fehlersuche und Überwachung der Anwendung im Betrieb.
|
||||
|
||||
## Umgebungsvariablen
|
||||
|
||||
Die folgenden Umgebungsvariablen müssen konfiguriert werden:
|
||||
|
||||
- `SECRET_KEY`: Geheimer Schlüssel für die Session-Verschlüsselung
|
||||
- `DATABASE_PATH`: Pfad zur Datenbank (Standard: SQLite-Datenbank im Instance-Verzeichnis)
|
||||
- `TAPO_USERNAME`: Benutzername für die Tapo-Steckdosen
|
||||
- `TAPO_PASSWORD`: Passwort für die Tapo-Steckdosen
|
||||
- `PRINTERS`: JSON-Objekt mit der Zuordnung von Drucker-Namen zu IP-Adressen der Steckdosen im Format: `{"Printer 1": {"ip": "192.168.1.100"}, "Printer 2": {"ip": "192.168.1.101"}, ...}`
|
||||
|
||||
## Automatisierung
|
||||
|
||||
Die Anwendung beinhaltet einen CLI-Befehl `flask check-jobs`, der regelmäßig ausgeführt werden sollte (z.B. als Cron-Job), um abgelaufene Druckaufträge zu überprüfen und die zugehörigen Steckdosen auszuschalten.
|
||||
|
||||
## Kompatibilität mit dem Frontend
|
||||
|
||||
Das Backend wurde speziell für die Kompatibilität mit dem bestehenden Frontend entwickelt, welches in `/frontend` zu finden ist. Die API-Endpunkte und Datenstrukturen sind so gestaltet, dass sie nahtlos mit dem Frontend zusammenarbeiten.
|
||||
|
Reference in New Issue
Block a user