132 lines
4.2 KiB
Python
132 lines
4.2 KiB
Python
#!/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") |