🎉 Refactored backend structure: Removed unused files including app_cleaned.py, admin_api.py, admin.py, user.py, and others. Updated settings.local.json to include additional Bash commands. Enhanced admin templates for better navigation and functionality. Improved logging and error handling across various modules.
This commit is contained in:
266
backend/docs/TAPO_CONTROL.md
Normal file
266
backend/docs/TAPO_CONTROL.md
Normal file
@ -0,0 +1,266 @@
|
||||
# Tapo-Steckdosen-Steuerung - MYP Platform
|
||||
|
||||
## Übersicht
|
||||
|
||||
Die Tapo-Steckdosen-Steuerung ist eine eigenständige Web-Interface für die direkte Kontrolle aller TP-Link Tapo-Steckdosen (P100/P110) über die MYP Platform. Diese Funktion ermöglicht es Benutzern, Smart-Steckdosen unabhängig von den Druckern zu verwalten und zu steuern.
|
||||
|
||||
## Features
|
||||
|
||||
### 🔌 Hauptfunktionen
|
||||
- **Live-Status-Überwachung**: Echtzeit-Status aller konfigurierten Tapo-Steckdosen
|
||||
- **Direkte Steuerung**: Ein- und Ausschalten einzelner Steckdosen
|
||||
- **Automatische Erkennung**: Suche nach neuen Tapo-Steckdosen im Netzwerk
|
||||
- **Batch-Operationen**: Gleichzeitiges Steuern mehrerer Steckdosen
|
||||
- **Verbindungstest**: Testen der Erreichbarkeit einzelner Geräte
|
||||
|
||||
### 🛡️ Sicherheit & Berechtigungen
|
||||
- **Rollenbasierte Zugriffskontrolle**: Nur Benutzer mit `CONTROL_PRINTER` Berechtigung haben Zugriff
|
||||
- **Admin-Funktionen**: Erweiterte Funktionen nur für Administratoren
|
||||
- **Audit-Logging**: Alle Aktionen werden protokolliert
|
||||
- **CSRF-Schutz**: Schutz vor Cross-Site Request Forgery
|
||||
|
||||
### 📱 Benutzeroberfläche
|
||||
- **Responsive Design**: Optimiert für Desktop und Mobile
|
||||
- **Live-Updates**: Automatische Status-Aktualisierung alle 30 Sekunden
|
||||
- **Moderne UI**: Glassmorphism-Design mit Dark-Mode-Unterstützung
|
||||
- **Intuitive Bedienung**: Einfache Ein-Klick-Steuerung
|
||||
|
||||
## Zugriff & Navigation
|
||||
|
||||
### Haupt-Dashboard
|
||||
```
|
||||
URL: /tapo/
|
||||
Berechtigung: CONTROL_PRINTER
|
||||
```
|
||||
|
||||
Das Haupt-Dashboard zeigt alle konfigurierten Tapo-Steckdosen mit:
|
||||
- Live-Status (Online/Offline, Ein/Aus)
|
||||
- Zugehöriger Drucker-Name
|
||||
- IP-Adresse
|
||||
- Standort-Information
|
||||
- Direkte Steuerungsbuttons
|
||||
|
||||
### Manuelle Steuerung (Admin)
|
||||
```
|
||||
URL: /tapo/manual-control
|
||||
Berechtigung: ADMIN
|
||||
```
|
||||
|
||||
Erweiterte Funktionen für Administratoren:
|
||||
- Steuerung beliebiger IP-Adressen
|
||||
- Verbindungstests
|
||||
- Notaus-Funktion (alle Steckdosen ausschalten)
|
||||
- Status-Abfrage ohne Drucker-Zuordnung
|
||||
|
||||
## API-Endpunkte
|
||||
|
||||
### Steckdosen-Steuerung
|
||||
```http
|
||||
POST /tapo/control
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"ip": "192.168.1.100",
|
||||
"action": "on|off"
|
||||
}
|
||||
```
|
||||
|
||||
### Status abfragen
|
||||
```http
|
||||
GET /tapo/status/{ip}
|
||||
```
|
||||
|
||||
### Alle Status abrufen
|
||||
```http
|
||||
GET /tapo/all-status
|
||||
```
|
||||
|
||||
### Automatische Erkennung
|
||||
```http
|
||||
POST /tapo/discover
|
||||
```
|
||||
|
||||
### Verbindungstest
|
||||
```http
|
||||
POST /tapo/test/{ip}
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Tapo-Anmeldedaten
|
||||
Die globalen Tapo-Anmeldedaten werden in `utils/settings.py` konfiguriert:
|
||||
|
||||
```python
|
||||
TAPO_USERNAME = "ihr_tapo_username"
|
||||
TAPO_PASSWORD = "ihr_tapo_passwort"
|
||||
```
|
||||
|
||||
### Standard-IP-Bereiche
|
||||
Für die automatische Erkennung können Standard-IP-Adressen definiert werden:
|
||||
|
||||
```python
|
||||
DEFAULT_TAPO_IPS = [
|
||||
"192.168.0.100",
|
||||
"192.168.0.101",
|
||||
"192.168.0.102",
|
||||
# weitere IPs...
|
||||
]
|
||||
```
|
||||
|
||||
### Timeout-Einstellungen
|
||||
```python
|
||||
TAPO_TIMEOUT = 5 # Sekunden
|
||||
TAPO_RETRY_COUNT = 3 # Wiederholungsversuche
|
||||
```
|
||||
|
||||
## Installation & Setup
|
||||
|
||||
### 1. Abhängigkeiten installieren
|
||||
```bash
|
||||
pip install PyP100
|
||||
```
|
||||
|
||||
### 2. Tapo-Steckdosen konfigurieren
|
||||
1. Steckdosen über Tapo-App einrichten
|
||||
2. Statische IP-Adressen zuweisen
|
||||
3. Anmeldedaten in der Plattform konfigurieren
|
||||
|
||||
### 3. Drucker-Zuordnung
|
||||
Steckdosen werden automatisch erkannt wenn sie in den Drucker-Einstellungen konfiguriert sind:
|
||||
- Admin → Drucker verwalten → Drucker bearbeiten
|
||||
- IP-Adresse der Tapo-Steckdose eingeben
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
#### Steckdose nicht erreichbar
|
||||
1. **Netzwerk-Verbindung prüfen**
|
||||
```bash
|
||||
ping 192.168.1.100
|
||||
```
|
||||
|
||||
2. **Tapo-App-Konfiguration überprüfen**
|
||||
- Steckdose in Tapo-App sichtbar?
|
||||
- WLAN-Verbindung stabil?
|
||||
- Remote-Zugriff aktiviert?
|
||||
|
||||
3. **Anmeldedaten verifizieren**
|
||||
- Username/Passwort korrekt?
|
||||
- Account nicht gesperrt?
|
||||
|
||||
#### Verbindung funktioniert, aber keine Steuerung
|
||||
1. **Berechtigungen prüfen**
|
||||
- Hat der Benutzer `CONTROL_PRINTER` Berechtigung?
|
||||
- Ist die Steckdose einem aktiven Drucker zugeordnet?
|
||||
|
||||
2. **Firewall/Router-Einstellungen**
|
||||
- Port 9999 (Tapo-Standard) offen?
|
||||
- Keine Blockierung zwischen Subnets?
|
||||
|
||||
#### Performance-Probleme
|
||||
1. **Timeout-Werte anpassen**
|
||||
```python
|
||||
TAPO_TIMEOUT = 10 # Erhöhen bei langsamen Verbindungen
|
||||
```
|
||||
|
||||
2. **Anzahl gleichzeitiger Verbindungen reduzieren**
|
||||
3. **WLAN-Signal der Steckdosen verbessern**
|
||||
|
||||
### Debug-Logging
|
||||
Für detaillierte Fehlermeldungen Debug-Logging aktivieren:
|
||||
|
||||
```python
|
||||
# In utils/logging_config.py
|
||||
TAPO_LOG_LEVEL = "DEBUG"
|
||||
```
|
||||
|
||||
Logs finden Sie unter:
|
||||
```
|
||||
backend/logs/tapo_controller/tapo_controller.log
|
||||
```
|
||||
|
||||
## Sicherheitshinweise
|
||||
|
||||
### Netzwerk-Sicherheit
|
||||
- **VLAN-Isolation**: Tapo-Steckdosen in separates VLAN
|
||||
- **Firewalling**: Nur notwendige Ports öffnen
|
||||
- **Monitoring**: Ungewöhnliche Aktivitäten überwachen
|
||||
|
||||
### Zugriffskontrolle
|
||||
- **Starke Passwörter**: Für Tapo-Accounts verwenden
|
||||
- **Berechtigungen**: Minimale notwendige Rechte vergeben
|
||||
- **Audit-Logs**: Regelmäßig überprüfen
|
||||
|
||||
### Physische Sicherheit
|
||||
- **Steckdosen-Zugang**: Physischen Zugang beschränken
|
||||
- **Reset-Buttons**: Vor unbefugtem Zugriff schützen
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Zeitgesteuerte Schaltungen
|
||||
```python
|
||||
# Beispiel für geplante Abschaltung
|
||||
from utils.tapo_controller import tapo_controller
|
||||
import schedule
|
||||
|
||||
def shutdown_all_outlets():
|
||||
results = tapo_controller.initialize_all_outlets()
|
||||
print(f"Alle Steckdosen ausgeschaltet: {results}")
|
||||
|
||||
# Jeden Tag um 22:00 alle ausschalten
|
||||
schedule.every().day.at("22:00").do(shutdown_all_outlets)
|
||||
```
|
||||
|
||||
### Energiemonitoring (P110)
|
||||
```python
|
||||
# P110-spezifische Funktionen für Energiemessung
|
||||
device_info = tapo_controller._collect_device_info(p100, device_info)
|
||||
power_consumption = device_info.get('power_consumption')
|
||||
voltage = device_info.get('voltage')
|
||||
current = device_info.get('current')
|
||||
```
|
||||
|
||||
### Integration mit anderen Systemen
|
||||
Die API-Endpunkte können auch von externen Systemen genutzt werden:
|
||||
|
||||
```bash
|
||||
# cURL-Beispiele
|
||||
curl -X POST http://localhost:5000/tapo/control \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"ip": "192.168.1.100", "action": "on"}'
|
||||
|
||||
curl http://localhost:5000/tapo/status/192.168.1.100
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Performance
|
||||
1. **Caching nutzen**: Status-Abfragen werden automatisch gecacht
|
||||
2. **Batch-Operationen**: Mehrere Steckdosen gleichzeitig steuern
|
||||
3. **Timeout-Optimierung**: Für lokale Netzwerke niedrigere Werte
|
||||
|
||||
### Zuverlässigkeit
|
||||
1. **Retry-Mechanismus**: Automatische Wiederholung bei Fehlern
|
||||
2. **Fallback-Strategien**: Alternative Steuerungsmethoden vorbereiten
|
||||
3. **Monitoring**: Kontinuierliche Überwachung der Verfügbarkeit
|
||||
|
||||
### Wartung
|
||||
1. **Regelmäßige Updates**: Tapo-Firmware aktuell halten
|
||||
2. **Log-Rotation**: Große Log-Dateien vermeiden
|
||||
3. **Backup**: Konfigurationen sichern
|
||||
|
||||
## Lizenz & Credits
|
||||
|
||||
Diese Implementierung basiert auf:
|
||||
- **PyP100**: Python-Library für TP-Link Tapo-Geräte
|
||||
- **Flask**: Web-Framework
|
||||
- **MYP Platform**: 3D-Druck-Management-System
|
||||
|
||||
Entwickelt für die IHK-Abschlussprüfung 2025.
|
||||
|
||||
---
|
||||
|
||||
**Autor**: MYP Development Team
|
||||
**Version**: 1.0.0
|
||||
**Datum**: Juni 2025
|
Reference in New Issue
Block a user