2.5 KiB
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
- Netzwerk-Latenz: Mercedes-Benz Unternehmensnetzwerk kann höhere Latenzen haben
- Tapo-Gerät Antwortzeit: TP-Link Tapo Geräte benötigen Zeit für TCP-Handshake
- Zuverlässigkeit: Vermeidet falsch-negative Ergebnisse bei temporären Netzwerkproblemen
- 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
- Juni 2025
Autor
Till Tomczak - MYP Team