🛠️ "Implementiere TP-Link Tapo P110 Unterstützung für Druckerüberwachung und -steuerung"
- Aktualisiere die `check_printer_status()` Funktion zur Verwendung des PyP100-Moduls für die Tapo-Steckdosen. - Füge neue API-Endpunkte hinzu: `test-tapo` für die Verbindungstests einzelner Drucker und `test-all-tapo` für Massentests. - Verbessere die Fehlerbehandlung und Logging für Tapo-Verbindungen. - Aktualisiere die Benutzeroberfläche, um den Datei-Upload als optional zu kennzeichnen. - Implementiere umfassende Tests für die Tapo-Verbindungen in `debug_drucker_erkennung.py` und verbessere die Validierung der Konfiguration in `job_scheduler.py`.
This commit is contained in:
@@ -313,7 +313,14 @@ def toggle_plug(printer_id: int, state: bool) -> bool:
|
||||
db_session.close()
|
||||
return False
|
||||
|
||||
# Konfiguration validieren
|
||||
if not printer.plug_ip or not printer.plug_username or not printer.plug_password:
|
||||
logger.error(f"Unvollständige Tapo-Konfiguration für Drucker {printer.name} (ID: {printer_id})")
|
||||
db_session.close()
|
||||
return False
|
||||
|
||||
# TP-Link Tapo P110 Verbindung herstellen
|
||||
logger.debug(f"Verbinde zu Tapo-Steckdose {printer.plug_ip} für Drucker {printer.name}")
|
||||
p110 = PyP110.P110(printer.plug_ip, printer.plug_username, printer.plug_password)
|
||||
p110.handshake() # Authentifizierung
|
||||
p110.login() # Login
|
||||
@@ -321,19 +328,60 @@ def toggle_plug(printer_id: int, state: bool) -> bool:
|
||||
# Steckdose ein-/ausschalten
|
||||
if state:
|
||||
p110.turnOn()
|
||||
logger.info(f"Steckdose für Drucker {printer.name} (ID: {printer_id}) eingeschaltet")
|
||||
logger.info(f"✅ Steckdose für Drucker {printer.name} (ID: {printer_id}) eingeschaltet")
|
||||
else:
|
||||
p110.turnOff()
|
||||
logger.info(f"Steckdose für Drucker {printer.name} (ID: {printer_id}) ausgeschaltet")
|
||||
logger.info(f"✅ Steckdose für Drucker {printer.name} (ID: {printer_id}) ausgeschaltet")
|
||||
|
||||
db_session.close()
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Schalten der Steckdose für Drucker {printer_id}: {str(e)}")
|
||||
logger.error(f"❌ Fehler beim Schalten der Steckdose für Drucker {printer_id}: {str(e)}")
|
||||
db_session.close()
|
||||
return False
|
||||
|
||||
|
||||
def test_tapo_connection(ip_address: str, username: str, password: str) -> dict:
|
||||
"""
|
||||
Testet die Verbindung zu einer Tapo-Steckdose und gibt detaillierte Informationen zurück.
|
||||
|
||||
Args:
|
||||
ip_address: IP-Adresse der Steckdose
|
||||
username: Benutzername
|
||||
password: Passwort
|
||||
|
||||
Returns:
|
||||
dict: Testergebnis mit Status und Informationen
|
||||
"""
|
||||
logger = get_logger("printers")
|
||||
result = {
|
||||
"success": False,
|
||||
"error": None,
|
||||
"device_info": None,
|
||||
"status": "unknown"
|
||||
}
|
||||
|
||||
try:
|
||||
logger.debug(f"Teste Tapo-Verbindung zu {ip_address}")
|
||||
p110 = PyP110.P110(ip_address, username, password)
|
||||
p110.handshake() # Authentifizierung
|
||||
p110.login() # Login
|
||||
|
||||
# Geräteinformationen abrufen
|
||||
device_info = p110.getDeviceInfo()
|
||||
result["device_info"] = device_info
|
||||
result["status"] = "on" if device_info.get('device_on', False) else "off"
|
||||
result["success"] = True
|
||||
|
||||
logger.debug(f"✅ Tapo-Verbindung zu {ip_address} erfolgreich")
|
||||
|
||||
except Exception as e:
|
||||
result["error"] = str(e)
|
||||
logger.warning(f"❌ Tapo-Verbindung zu {ip_address} fehlgeschlagen: {str(e)}")
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def check_jobs():
|
||||
"""
|
||||
Überprüft alle geplanten und laufenden Jobs und schaltet Steckdosen entsprechend.
|
||||
|
Reference in New Issue
Block a user