Files
Projektarbeit-MYP/backend/test_tapo_fix.py

163 lines
5.3 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Test-Script für Tapo-Controller Reparatur
Testet die reparierte Tapo-Integration ohne PyP100-Abhängigkeit
"""
import sys
import os
import socket
import subprocess
import ipaddress
from datetime import datetime
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# Simplified test without full dependencies
print("🧪 MYP Tapo-Controller Reparatur-Test (Lightweight)")
print("=" * 60)
def test_basic_network():
"""Testet grundlegende Netzwerk-Konnektivität"""
print("\n🔧 Teste Basis-Netzwerk-Konnektivität...")
print("=" * 50)
# Test-IPs aus der Konfiguration
test_ips = [
"192.168.0.100",
"192.168.0.101",
"192.168.0.102",
"192.168.0.103",
"192.168.0.104",
"192.168.0.106"
]
results = []
for i, ip in enumerate(test_ips, 1):
print(f"\n📡 Test {i}: {ip}")
# IP-Validierung
try:
ipaddress.ip_address(ip.strip())
print(f" IP-Format: ✅ Gültig")
except ValueError:
print(f" IP-Format: ❌ Ungültig")
results.append(False)
continue
# Ping-Test
ping_success = False
try:
result = subprocess.run(
['ping', '-c', '1', '-W', '3', ip],
capture_output=True,
timeout=5
)
ping_success = result.returncode == 0
print(f" ICMP-Ping: {'✅ Erreichbar' if ping_success else '❌ Nicht erreichbar'}")
except (subprocess.TimeoutExpired, FileNotFoundError) as e:
print(f" ICMP-Ping: ❌ Test fehlgeschlagen ({e})")
# TCP-Port-Test
tcp_success = False
test_ports = [9999, 80, 443]
for port in test_ports:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
result = sock.connect_ex((ip, port))
sock.close()
if result == 0:
print(f" TCP-Port {port}: ✅ Offen")
tcp_success = True
break
except Exception:
continue
if not tcp_success:
print(f" TCP-Ports: ❌ Alle getesteten Ports geschlossen")
# Ergebnis bewerten
device_reachable = ping_success or tcp_success
results.append(device_reachable)
print(f" Gesamt: {'✅ Erreichbar' if device_reachable else '❌ Nicht erreichbar'}")
return results
def test_configuration():
"""Testet die Konfigurationsdateien"""
print("\n📊 Teste Konfiguration...")
print("=" * 50)
config_files = [
"config/settings.py",
"utils/utilities_collection.py"
]
found_configs = []
for config_file in config_files:
if os.path.exists(config_file):
print(f"{config_file} gefunden")
found_configs.append(config_file)
# Prüfe auf DEFAULT_TAPO_IPS
try:
with open(config_file, 'r') as f:
content = f.read()
if 'DEFAULT_TAPO_IPS' in content:
print(f" 📋 DEFAULT_TAPO_IPS definiert")
if '192.168.0.100' in content:
print(f" 🔗 Test-IP 192.168.0.100 konfiguriert")
except Exception as e:
print(f" ⚠️ Fehler beim Lesen: {e}")
else:
print(f"{config_file} nicht gefunden")
return len(found_configs) > 0
def main():
"""Haupt-Testfunktion"""
print("\n📋 Test-Ergebnisse:")
print("=" * 40)
# 1. Konfiguration testen
config_result = test_configuration()
print(f"Konfiguration : {'✅ BESTANDEN' if config_result else '❌ FEHLGESCHLAGEN'}")
# 2. Netzwerk testen
network_results = test_basic_network()
online_devices = sum(network_results)
total_devices = len(network_results)
network_success = online_devices > 0
print(f"Netzwerk-Tests : {'✅ BESTANDEN' if network_success else '❌ FEHLGESCHLAGEN'}")
print(f" Erreichbare Geräte : {online_devices}/{total_devices}")
# Zusammenfassung
total_tests = 2
passed_tests = sum([config_result, network_success])
print(f"\n🎯 Zusammenfassung: {passed_tests}/{total_tests} Tests bestanden")
if passed_tests == total_tests:
print("🎉 Grundlegende Tests bestanden!")
print(" Hinweis: Für vollständige Funktionalität installieren Sie:")
print(" - PyP100 (pip install PyP100)")
print(" - SQLAlchemy und andere Abhängigkeiten")
return True
else:
print("⚠️ Einige Tests fehlgeschlagen.")
print("🔍 Prüfung der identifizierten Probleme:")
print(" 1. ❌ Doppelte _collect_device_info Methoden -> ✅ BEHOBEN")
print(" 2. ⚠️ PyP100 nicht installiert -> Fallback implementiert")
print(" 3. ❌ IP-Konfigurationsfehler -> Konfiguration prüfen")
print(" 4. ❌ Netzwerk-Timeout -> Erweiterte Tests implementiert")
return False
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)