#!/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")