📝 Commit Details:
This commit is contained in:
132
backend/utils/test_tapo_sofort.py
Normal file
132
backend/utils/test_tapo_sofort.py
Normal file
@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
SOFORT-TEST für TP-Link Tapo P110-Steckdosen
|
||||
Nutzt direkt PyP100 mit hardkodierten Anmeldedaten
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
# TAPO Anmeldedaten direkt hardkodiert (wie in den funktionierenden Versionen)
|
||||
os.environ["TAPO_USERNAME"] = "till.tomczak@mercedes-benz.com"
|
||||
os.environ["TAPO_PASSWORD"] = "744563017196A" # Das 'A' am Ende ist wichtig
|
||||
|
||||
# IPs der Steckdosen
|
||||
TAPO_IPS = [
|
||||
"192.168.0.103",
|
||||
"192.168.0.104",
|
||||
"192.168.0.100",
|
||||
"192.168.0.101",
|
||||
"192.168.0.102"
|
||||
]
|
||||
|
||||
def log(msg):
|
||||
"""Protokolliert eine Nachricht mit Zeitstempel"""
|
||||
timestamp = datetime.now().strftime("%H:%M:%S")
|
||||
print(f"[{timestamp}] {msg}")
|
||||
|
||||
def test_connection():
|
||||
"""Teste Verbindung zu den Steckdosen"""
|
||||
log("🔄 Teste PyP100-Import...")
|
||||
|
||||
try:
|
||||
from PyP100 import PyP100
|
||||
log("✅ PyP100-Modul erfolgreich importiert")
|
||||
except ImportError:
|
||||
log("❌ PyP100-Modul nicht gefunden. Installiere es...")
|
||||
try:
|
||||
import subprocess
|
||||
subprocess.run([sys.executable, "-m", "pip", "install", "PyP100==0.0.12"], check=True)
|
||||
from PyP100 import PyP100
|
||||
log("✅ PyP100-Modul installiert")
|
||||
except Exception as e:
|
||||
log(f"❌ Fehler bei Installation: {str(e)}")
|
||||
return False
|
||||
|
||||
# Anmeldedaten aus Umgebungsvariablen lesen
|
||||
username = os.environ.get("TAPO_USERNAME")
|
||||
password = os.environ.get("TAPO_PASSWORD")
|
||||
|
||||
log(f"👤 Benutzername: {username}")
|
||||
log(f"🔑 Passwort: {password}")
|
||||
|
||||
# Teste jede IP
|
||||
success = False
|
||||
|
||||
for ip in TAPO_IPS:
|
||||
log(f"🔄 Teste Steckdose mit IP: {ip}")
|
||||
|
||||
try:
|
||||
# Wichtig: Verwende PyP100 (nicht PyP110) wie in den funktionierenden Versionen
|
||||
p100 = PyP100.P100(ip, username, password)
|
||||
|
||||
# Handshake und Login
|
||||
log(" 🔄 Handshake...")
|
||||
p100.handshake()
|
||||
|
||||
log(" 🔄 Login...")
|
||||
p100.login()
|
||||
|
||||
# Status abfragen
|
||||
log(" 🔄 Status abfragen...")
|
||||
device_info = p100.getDeviceInfo()
|
||||
|
||||
# Erfolg!
|
||||
state = "Eingeschaltet" if device_info.get("device_on", False) else "Ausgeschaltet"
|
||||
log(f"✅ ERFOLG! Steckdose {ip} erfolgreich verbunden")
|
||||
log(f" 📱 Name: {device_info.get('nickname', 'Unbekannt')}")
|
||||
log(f" ⚡ Status: {state}")
|
||||
|
||||
# Steckdose ein-/ausschalten wenn gewünscht
|
||||
if "--toggle" in sys.argv:
|
||||
if device_info.get("device_on", False):
|
||||
log(" 🔄 Schalte Steckdose AUS...")
|
||||
p100.turnOff()
|
||||
else:
|
||||
log(" 🔄 Schalte Steckdose EIN...")
|
||||
p100.turnOn()
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
# Neuen Status abrufen
|
||||
device_info = p100.getDeviceInfo()
|
||||
state = "Eingeschaltet" if device_info.get("device_on", False) else "Ausgeschaltet"
|
||||
log(f" ⚡ Neuer Status: {state}")
|
||||
|
||||
success = True
|
||||
|
||||
# Konfiguration für settings.py ausgeben
|
||||
log("\n✅ KONFIGURATION FÜR SETTINGS.PY:")
|
||||
log(f"""
|
||||
# TP-Link Tapo Standard-Anmeldedaten
|
||||
TAPO_USERNAME = "{username}"
|
||||
TAPO_PASSWORD = "{password}"
|
||||
|
||||
# Standard-Steckdosen-IPs
|
||||
DEFAULT_TAPO_IPS = ["{ip}"]
|
||||
""")
|
||||
|
||||
# Nur die erste erfolgreiche Steckdose testen
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
log(f"❌ Fehler bei Steckdose {ip}: {str(e)}")
|
||||
|
||||
if not success:
|
||||
log("\n❌ Keine Tapo-Steckdose konnte verbunden werden!")
|
||||
log("Prüfen Sie folgende mögliche Ursachen:")
|
||||
log("1. Steckdosen sind nicht eingesteckt oder mit dem WLAN verbunden")
|
||||
log("2. IP-Adressen sind falsch")
|
||||
log("3. Anmeldedaten sind falsch (prüfen Sie das 'A' am Ende des Passworts)")
|
||||
log("4. Netzwerkprobleme verhindern den Zugriff")
|
||||
|
||||
return success
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("\n====== TAPO P110 SOFORT-TEST ======\n")
|
||||
test_connection()
|
||||
print("\n====== TEST BEENDET ======\n")
|
Reference in New Issue
Block a user