"feat: Integrate printer monitor for enhanced logging in backend"

This commit is contained in:
2025-05-29 22:35:00 +02:00
parent 81c2b2ab88
commit 482e04723d
2 changed files with 556 additions and 8 deletions

View File

@@ -138,8 +138,15 @@ class PrinterMonitor:
monitor_logger.error("⚠️ PyP100-Modul nicht verfügbar - kann Tapo-Steckdose nicht schalten")
return False
# Fallback zu globalen Anmeldedaten wenn keine lokalen vorhanden
if not username or not password:
username = TAPO_USERNAME
password = TAPO_PASSWORD
monitor_logger.debug(f"🔧 Verwende globale Tapo-Anmeldedaten für {ip_address}")
try:
# TP-Link Tapo P100 Verbindung herstellen (P100 statt P110 verwenden)
from PyP100 import PyP100
p100 = PyP100.P100(ip_address, username, password)
p100.handshake() # Authentifizierung
p100.login() # Login
@@ -342,7 +349,7 @@ class PrinterMonitor:
def _ping_address(self, ip_address: str, timeout: int = 3) -> bool:
"""
Führt einen Konnektivitätstest zu einer IP-Adresse durch.
Verwendet TCP-Verbindung statt Ping, um Encoding-Probleme zu vermeiden.
Verwendet ausschließlich TCP-Verbindung statt Ping, um Encoding-Probleme zu vermeiden.
Args:
ip_address: Zu testende IP-Adresse
@@ -355,10 +362,18 @@ class PrinterMonitor:
# IP-Adresse validieren
ipaddress.ip_address(ip_address.strip())
# TCP-Verbindung zu Port 80 (HTTP) oder 443 (HTTPS) versuchen
import socket
# Erst Port 80 versuchen (HTTP)
# Erst Port 9999 versuchen (Tapo-Standard)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
result = sock.connect_ex((ip_address.strip(), 9999))
sock.close()
if result == 0:
return True
# Falls Port 9999 nicht erfolgreich, Port 80 versuchen (HTTP)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
result = sock.connect_ex((ip_address.strip(), 80))
@@ -481,15 +496,16 @@ class PrinterMonitor:
for ip in DEFAULT_TAPO_IPS:
try:
# Ping-Test für Grundkonnektivität
ping_success = self._ping_address(ip, timeout=2)
# TCP-Verbindungstest für Grundkonnektivität
ping_success = self._ping_address(ip, timeout=3)
if ping_success:
monitor_logger.info(f"✅ Steckdose mit IP {ip} ist pingbar")
monitor_logger.info(f"✅ Steckdose mit IP {ip} ist erreichbar")
# Tapo-Verbindung testen
if TAPO_AVAILABLE:
try:
from PyP100 import PyP100
p100 = PyP100.P100(ip, TAPO_USERNAME, TAPO_PASSWORD)
p100.handshake()
p100.login()
@@ -506,7 +522,7 @@ class PrinterMonitor:
self._ensure_tapo_in_database(ip, nickname)
except Exception as e:
monitor_logger.debug(f"❌ IP {ip} ist pingbar, aber keine Tapo-Steckdose: {str(e)}")
monitor_logger.debug(f"❌ IP {ip} ist erreichbar, aber keine Tapo-Steckdose: {str(e)}")
results[ip] = False
else:
monitor_logger.warning("⚠️ PyP100-Modul nicht verfügbar - kann Tapo-Verbindung nicht testen")