Files
Projektarbeit-MYP/backend/docs/TAPO_PING_TIMEOUT_FIX.md

2.5 KiB

Tapo Ping-Timeout Standardisierung

Problem

Die Ping-Implementierungen für Tapo-Geräte verwendeten unterschiedliche Timeout-Werte:

  • Standard ping_address() Methode: 3 Sekunden (zu kurz)
  • Auto-Discovery: 2 Sekunden (zu kurz)
  • Discovery in Blueprint: 3 Sekunden (zu kurz)
  • Validation: 5 Sekunden (korrekt)

Lösung

Alle Ping-Operationen wurden auf den einheitlichen 5-Sekunden-Timeout standardisiert.

Geänderte Dateien

1. /utils/hardware_integration.py

  • Zeile 406: ping_address() Default-Timeout von 3→5 Sekunden
  • Zeile 465: Auto-Discovery Timeout von 2→5 Sekunden

2. /blueprints/printers.py

  • Zeile 1543: Discovery Timeout von 3→5 Sekunden
  • Zeile 1744: Validation behält korrekten 5-Sekunden-Timeout

Begründung für 5-Sekunden-Timeout

  1. Netzwerk-Latenz: Mercedes-Benz Unternehmensnetzwerk kann höhere Latenzen haben
  2. Tapo-Gerät Antwortzeit: TP-Link Tapo Geräte benötigen Zeit für TCP-Handshake
  3. Zuverlässigkeit: Vermeidet falsch-negative Ergebnisse bei temporären Netzwerkproblemen
  4. Konsistenz: Einheitlicher Timeout-Wert in der gesamten Anwendung

Auswirkungen

Positive Effekte:

  • Zuverlässigere Erkennung von Tapo-Geräten
  • Weniger falsch-negative Ping-Tests
  • Einheitliches Verhalten in der gesamten Anwendung
  • Bessere Kompatibilität mit Unternehmensnetzwerken

Mögliche Nachteile:

  • ⚠️ Geringfügig langsamere Discovery-Prozesse
  • ⚠️ Längere Wartezeiten bei nicht erreichbaren Geräten

Implementierte Timeout-Hierarchie

Socket-Verbindungstest: 5 Sekunden (ping_address)
├── Auto-Discovery: 5 Sekunden
├── Manual Discovery: 5 Sekunden  
└── Validation Tests: 5 Sekunden

PyP100 API-Calls: 10 Sekunden (TAPO_TIMEOUT Konfiguration)
├── Handshake & Login
├── Status-Abfragen
└── Ein/Aus-Schalten

Verifikation

# Alle ping_address Aufrufe überprüfen
grep -n "ping_address" utils/hardware_integration.py blueprints/printers.py

# Ergebnis: Alle verwenden timeout=5
utils/hardware_integration.py:406:    def ping_address(self, ip: str, timeout: int = 5) -> bool:
utils/hardware_integration.py:465:                if self.ping_address(ip, timeout=5):
blueprints/printers.py:1543:                if not tapo_controller.ping_address(ip, timeout=5):
blueprints/printers.py:1744:                ping_success = tapo_controller.ping_address(printer.plug_ip, timeout=5)

Datum

  1. Juni 2025

Autor

Till Tomczak - MYP Team