175 lines
5.7 KiB
Python
175 lines
5.7 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
P110-TAPO-TEST - Speziell für TP-Link Tapo P110-Steckdosen
|
||
Testet verschiedene Versionen des PyP100-Moduls
|
||
"""
|
||
|
||
import sys
|
||
import time
|
||
import socket
|
||
import subprocess
|
||
from datetime import datetime
|
||
|
||
# Anmeldedaten
|
||
TAPO_USERNAME = "till.tomczak@mercedes-benz.com"
|
||
TAPO_PASSWORD = "744563017196"
|
||
|
||
# Standard-IP-Adressen zum Testen (anpassen an tatsächliche IPs)
|
||
TEST_IPS = [
|
||
"192.168.0.103", # Diese IPs waren erreichbar im vorherigen Test
|
||
"192.168.0.104"
|
||
]
|
||
|
||
def log(message):
|
||
"""Logge eine Nachricht mit Zeitstempel"""
|
||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||
print(f"[{timestamp}] {message}")
|
||
|
||
def check_connection(ip, port=80, timeout=1):
|
||
"""Prüft eine TCP-Verbindung"""
|
||
try:
|
||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
sock.settimeout(timeout)
|
||
result = sock.connect_ex((ip, port))
|
||
sock.close()
|
||
return result == 0
|
||
except:
|
||
return False
|
||
|
||
def install_package(package):
|
||
"""Installiert ein Python-Paket"""
|
||
try:
|
||
log(f"Installiere {package}...")
|
||
subprocess.run([sys.executable, "-m", "pip", "install", package, "--force-reinstall"], check=True)
|
||
log(f"✅ {package} erfolgreich installiert")
|
||
return True
|
||
except Exception as e:
|
||
log(f"❌ Fehler bei Installation von {package}: {e}")
|
||
return False
|
||
|
||
def test_p110_connection():
|
||
"""Testet verschiedene Möglichkeiten, um mit P110-Steckdosen zu kommunizieren"""
|
||
|
||
log("🚀 TAPO P110 TEST - STARTER")
|
||
log(f"👤 Benutzername: {TAPO_USERNAME}")
|
||
log(f"🔑 Passwort: {TAPO_PASSWORD}")
|
||
|
||
# Verfügbare Module testen
|
||
log("\n1️⃣ SCHRITT 1: Teste verfügbare Module")
|
||
|
||
try:
|
||
from PyP100 import PyP110
|
||
log("✅ PyP100 Modul gefunden")
|
||
except ImportError:
|
||
log("❌ PyP100 Modul nicht gefunden")
|
||
install_package("PyP100==0.1.2")
|
||
|
||
try:
|
||
from PyP100 import PyP110
|
||
log("✅ PyP100 Modul jetzt installiert")
|
||
except ImportError:
|
||
log("❌ Konnte PyP100 nicht importieren")
|
||
return
|
||
|
||
# Erreichbare Steckdosen finden
|
||
log("\n2️⃣ SCHRITT 2: Suche erreichbare IPs")
|
||
|
||
available_ips = []
|
||
for ip in TEST_IPS:
|
||
if check_connection(ip):
|
||
log(f"✅ IP {ip} ist erreichbar")
|
||
available_ips.append(ip)
|
||
else:
|
||
log(f"❌ IP {ip} nicht erreichbar")
|
||
|
||
if not available_ips:
|
||
log("❌ Keine erreichbaren IPs gefunden!")
|
||
return
|
||
|
||
# P110-Verbindung testen
|
||
log("\n3️⃣ SCHRITT 3: Teste PyP100 Bibliothek")
|
||
|
||
for ip in available_ips:
|
||
try:
|
||
log(f"🔄 Verbinde zu Steckdose {ip} mit PyP100.PyP110...")
|
||
|
||
# Neue Instanz erstellen
|
||
from PyP100 import PyP110
|
||
p110 = PyP110.P110(ip, TAPO_USERNAME, TAPO_PASSWORD)
|
||
|
||
# Handshake und Login
|
||
log(" Handshake...")
|
||
p110.handshake()
|
||
log(" Login...")
|
||
p110.login()
|
||
|
||
# Geräteinformationen abrufen
|
||
log(" Geräteinformationen abrufen...")
|
||
device_info = p110.getDeviceInfo()
|
||
|
||
# Erfolg!
|
||
log(f"✅ ERFOLG! Steckdose {ip} gefunden")
|
||
log(f" Name: {device_info.get('nickname', 'Unbekannt')}")
|
||
log(f" Status: {'Eingeschaltet' if device_info.get('device_on', False) else 'Ausgeschaltet'}")
|
||
|
||
# Ein-/Ausschalten testen
|
||
if "--toggle" in sys.argv:
|
||
current_state = device_info.get('device_on', False)
|
||
|
||
if current_state:
|
||
log(" Schalte AUS...")
|
||
p110.turnOff()
|
||
else:
|
||
log(" Schalte EIN...")
|
||
p110.turnOn()
|
||
|
||
time.sleep(1)
|
||
|
||
# Status prüfen
|
||
device_info = p110.getDeviceInfo()
|
||
new_state = device_info.get('device_on', False)
|
||
log(f" Neuer Status: {'Eingeschaltet' if new_state else 'Ausgeschaltet'}")
|
||
|
||
return True
|
||
|
||
except Exception as e:
|
||
log(f"❌ Fehler bei Verbindung zu {ip}: {e}")
|
||
|
||
# Alternative Bibliothek testen
|
||
log("\n4️⃣ SCHRITT 4: Teste PyP100 mit alternativer Version")
|
||
|
||
if install_package("pytapo==1.1.2"):
|
||
try:
|
||
import pytapo
|
||
from pytapo.tapo import Tapo
|
||
|
||
for ip in available_ips:
|
||
try:
|
||
log(f"🔄 Verbinde zu Steckdose {ip} mit pytapo...")
|
||
|
||
# Neue Verbindung
|
||
tapo = Tapo(ip, TAPO_USERNAME, TAPO_PASSWORD)
|
||
|
||
# Geräteinformationen abrufen
|
||
device_info = tapo.get_device_info()
|
||
|
||
# Erfolg!
|
||
log(f"✅ ERFOLG mit pytapo! Steckdose {ip} gefunden")
|
||
log(f" Name: {device_info.get('nickname', 'Unbekannt')}")
|
||
|
||
return True
|
||
|
||
except Exception as e:
|
||
log(f"❌ Fehler bei pytapo-Verbindung zu {ip}: {e}")
|
||
except Exception as e:
|
||
log(f"❌ Fehler beim Import von pytapo: {e}")
|
||
|
||
log("\n❌ Keine funktionierenden Tapo-Steckdosen gefunden!")
|
||
log("Bitte überprüfen Sie die Anmeldedaten und IP-Adressen")
|
||
|
||
if __name__ == "__main__":
|
||
print("\n======= TAPO P110 TEST =======\n")
|
||
test_p110_connection()
|
||
print("\n======= TEST BEENDET =======\n") |