"Update file structure and tests for job scheduler integration"
This commit is contained in:
@@ -1283,76 +1283,85 @@ def kiosk_restart_system():
|
||||
@measure_execution_time(logger=printers_logger, task_name="Drucker-Status-Prüfung")
|
||||
def check_printer_status(ip_address: str, timeout: int = 7) -> Tuple[str, bool]:
|
||||
"""
|
||||
Überprüft den Status eines Druckers über TP-Link Tapo P110-Steckdosenabfrage.
|
||||
|
||||
Überprüft den Status eines Druckers anhand der IP-Adresse.
|
||||
Gibt den Status und die Erreichbarkeit zurück.
|
||||
|
||||
Args:
|
||||
ip_address: IP-Adresse der Drucker-Steckdose
|
||||
timeout: Timeout in Sekunden (Standard: 7)
|
||||
|
||||
ip_address: IP-Adresse des Druckers oder der Steckdose
|
||||
timeout: Timeout in Sekunden
|
||||
|
||||
Returns:
|
||||
Tuple[str, bool]: (Status, Aktiv) - Status ist "online" oder "offline", Aktiv ist True/False
|
||||
Tuple[str, bool]: (Status, Erreichbarkeit)
|
||||
"""
|
||||
if not ip_address or ip_address.strip() == "":
|
||||
printers_logger.debug(f"Keine IP-Adresse angegeben")
|
||||
return "offline", False
|
||||
status = "offline"
|
||||
reachable = False
|
||||
|
||||
try:
|
||||
# TCP-Verbindung zu Port 80 oder 443 testen (statt Ping)
|
||||
try:
|
||||
import socket
|
||||
# Zuerst Port 80 versuchen
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(timeout)
|
||||
result = sock.connect_ex((ip_address.strip(), 80))
|
||||
sock.close()
|
||||
|
||||
connection_ok = result == 0
|
||||
|
||||
# Falls Port 80 nicht erfolgreich, Port 443 testen
|
||||
if not connection_ok:
|
||||
# Überprüfen, ob die Steckdose online ist
|
||||
import socket
|
||||
|
||||
# Erst Port 9999 versuchen (Tapo-Standard)
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(timeout)
|
||||
result = sock.connect_ex((ip_address, 9999))
|
||||
sock.close()
|
||||
|
||||
if result == 0:
|
||||
reachable = True
|
||||
try:
|
||||
# TP-Link Tapo Steckdose mit PyP100 überprüfen
|
||||
from PyP100 import PyP100
|
||||
p100 = PyP100.P100(ip_address, TAPO_USERNAME, TAPO_PASSWORD)
|
||||
p100.handshake() # Authentifizierung
|
||||
p100.login() # Login
|
||||
|
||||
# Geräteinformationen abrufen
|
||||
device_info = p100.getDeviceInfo()
|
||||
|
||||
# Status auswerten
|
||||
if device_info.get('device_on', False):
|
||||
status = "online"
|
||||
else:
|
||||
status = "standby"
|
||||
|
||||
printers_logger.info(f"✅ Tapo-Steckdose {ip_address}: Status = {status}")
|
||||
except Exception as e:
|
||||
printers_logger.error(f"❌ Fehler bei Tapo-Status-Check für {ip_address}: {str(e)}")
|
||||
reachable = False
|
||||
status = "error"
|
||||
else:
|
||||
# Alternativ HTTP/HTTPS versuchen
|
||||
try:
|
||||
# HTTP auf Port 80
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(timeout)
|
||||
result = sock.connect_ex((ip_address.strip(), 443))
|
||||
result = sock.connect_ex((ip_address, 80))
|
||||
sock.close()
|
||||
connection_ok = result == 0
|
||||
except:
|
||||
connection_ok = False
|
||||
|
||||
if not connection_ok:
|
||||
printers_logger.debug(f"Keine Verbindung zu {ip_address} möglich")
|
||||
return "offline", False
|
||||
|
||||
# TP-Link Tapo P100-Verbindung aufbauen
|
||||
try:
|
||||
# Passwort aus config/settings.py (mit 'A' am Ende)
|
||||
from config.settings import TAPO_USERNAME, TAPO_PASSWORD
|
||||
|
||||
# Verbindung aufbauen
|
||||
from PyP100 import PyP100
|
||||
p100 = PyP100.P100(ip_address, TAPO_USERNAME, TAPO_PASSWORD)
|
||||
p100.handshake() # Authentifizierung
|
||||
p100.login() # Login
|
||||
|
||||
# Geräteinformationen abrufen
|
||||
device_info = p100.getDeviceInfo()
|
||||
|
||||
# Status auswerten
|
||||
device_on = device_info.get('device_on', False)
|
||||
|
||||
if device_on:
|
||||
printers_logger.debug(f"Steckdose {ip_address} ist eingeschaltet")
|
||||
return "online", True
|
||||
else:
|
||||
printers_logger.debug(f"Steckdose {ip_address} ist ausgeschaltet")
|
||||
return "offline", False
|
||||
|
||||
except Exception as e:
|
||||
printers_logger.debug(f"Fehler bei Tapo-Verbindung zu {ip_address}: {str(e)}")
|
||||
return "offline", False
|
||||
|
||||
|
||||
if result == 0:
|
||||
reachable = True
|
||||
status = "online" # Standarddrucker ohne Tapo-Steckdose
|
||||
else:
|
||||
# HTTPS auf Port 443
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(timeout)
|
||||
result = sock.connect_ex((ip_address, 443))
|
||||
sock.close()
|
||||
|
||||
if result == 0:
|
||||
reachable = True
|
||||
status = "online"
|
||||
except Exception as e:
|
||||
printers_logger.error(f"❌ Fehler bei Socket-Check für {ip_address}: {str(e)}")
|
||||
reachable = False
|
||||
status = "error"
|
||||
|
||||
except Exception as e:
|
||||
printers_logger.error(f"Fehler bei Status-Check für {ip_address}: {str(e)}")
|
||||
return "offline", False
|
||||
printers_logger.error(f"❌ Fehler bei Verbindungsprüfung zu {ip_address}: {str(e)}")
|
||||
status = "error"
|
||||
reachable = False
|
||||
|
||||
return status, reachable
|
||||
|
||||
@measure_execution_time(logger=printers_logger, task_name="Mehrere-Drucker-Status-Prüfung")
|
||||
def check_multiple_printers_status(printers: List[Dict], timeout: int = 7) -> Dict[int, Tuple[str, bool]]:
|
||||
@@ -4541,7 +4550,7 @@ def upload_asset():
|
||||
}
|
||||
|
||||
# Datei speichern
|
||||
result = file_manager.save_file(file, 'assets', current_user.id, 'asset', metadata)
|
||||
result = save_asset_file(file, current_user.id, metadata)
|
||||
|
||||
if result:
|
||||
relative_path, absolute_path, file_metadata = result
|
||||
@@ -4593,7 +4602,7 @@ def upload_log():
|
||||
}
|
||||
|
||||
# Datei speichern
|
||||
result = file_manager.save_file(file, 'logs', current_user.id, 'log', metadata)
|
||||
result = save_log_file(file, current_user.id, metadata)
|
||||
|
||||
if result:
|
||||
relative_path, absolute_path, file_metadata = result
|
||||
@@ -4645,7 +4654,7 @@ def upload_backup():
|
||||
}
|
||||
|
||||
# Datei speichern
|
||||
result = file_manager.save_file(file, 'backups', current_user.id, 'backup', metadata)
|
||||
result = save_backup_file(file, current_user.id, metadata)
|
||||
|
||||
if result:
|
||||
relative_path, absolute_path, file_metadata = result
|
||||
@@ -4696,7 +4705,7 @@ def upload_temp_file():
|
||||
}
|
||||
|
||||
# Datei speichern
|
||||
result = file_manager.save_file(file, 'temp', current_user.id, 'temp', metadata)
|
||||
result = save_temp_file(file, current_user.id, metadata)
|
||||
|
||||
if result:
|
||||
relative_path, absolute_path, file_metadata = result
|
||||
|
Reference in New Issue
Block a user