"Refactor configuration settings and tests"
This commit is contained in:
@@ -1 +1,175 @@
|
||||
|
||||
#!/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")
|
Reference in New Issue
Block a user