Die Dateien wurden in mehreren Log- und Cache-Ordnern geändert:

This commit is contained in:
Tomczak
2025-06-19 13:08:47 +02:00
parent 07acd2840b
commit 43d12fdf11
394 changed files with 3013 additions and 284 deletions

View File

@ -60,10 +60,13 @@ monitor_logger = get_logger("printer_monitor") # Rückwärtskompatibilität
# Hardware-Verfügbarkeit prüfen
try:
from PyP100.PyP100 import P100 as PyP100
from PyP100.PyP110 import P110 as PyP110
TAPO_AVAILABLE = True
hardware_logger.info("✅ PyP100 (TP-Link Tapo) verfügbar")
except ImportError:
TAPO_AVAILABLE = False
PyP100 = None
PyP110 = None
hardware_logger.warning("⚠️ PyP100 nicht verfügbar - Tapo-Funktionen eingeschränkt")
# Exportierte Funktionen für Legacy-Kompatibilität
@ -143,7 +146,7 @@ class TapoController:
tapo_logger.debug(f"🔌 Versuch {attempt+1}/{self.retry_count}: Verbinde zu Tapo-Steckdose {ip}")
# P100-Verbindung herstellen
p100 = PyP100.P100(ip, username, password)
p100 = PyP100(ip, username, password)
if debug:
tapo_logger.debug(f"🤝 Handshake mit {ip}...")
@ -244,7 +247,7 @@ class TapoController:
try:
# TP-Link Tapo P100 Verbindung herstellen
p100 = PyP100.P100(ip, username, password)
p100 = PyP100(ip, username, password)
p100.handshake()
p100.login()
@ -308,7 +311,7 @@ class TapoController:
tapo_logger.debug(f"🔍 Status-Check für Tapo-Steckdose {ip} gestartet")
# TP-Link Tapo P100 Verbindung herstellen
p100 = PyP100.P100(ip, username, password)
p100 = PyP100(ip, username, password)
if debug:
tapo_logger.debug(f"🤝 Handshake mit {ip}...")
@ -404,7 +407,7 @@ class TapoController:
try:
# TP-Link Tapo P100 Verbindung herstellen
p100 = PyP100.P100(ip, username, password)
p100 = PyP100(ip, username, password)
p100.handshake()
p100.login()
@ -568,42 +571,40 @@ class TapoController:
results = {}
try:
db_session = get_db_session()
printers = db_session.query(Printer).filter(Printer.active == True).all()
if not printers:
tapo_logger.warning("⚠️ keine aktiven drucker zur initialisierung gefunden")
db_session.close()
return results
# Alle Steckdosen ausschalten
for printer in printers:
try:
if printer.plug_ip:
success = self.turn_off(
printer.plug_ip,
printer_id=printer.id
)
results[printer.name] = success
if success:
tapo_logger.info(f"{printer.name}: steckdose ausgeschaltet")
printer.status = "offline"
printer.last_checked = datetime.now()
with get_db_session() as db_session:
printers = db_session.query(Printer).filter(Printer.active == True).all()
if not printers:
tapo_logger.warning("⚠️ keine aktiven drucker zur initialisierung gefunden")
return results
# Alle Steckdosen ausschalten
for printer in printers:
try:
if printer.plug_ip:
success = self.turn_off(
printer.plug_ip,
printer_id=printer.id
)
results[printer.name] = success
if success:
tapo_logger.info(f"{printer.name}: steckdose ausgeschaltet")
printer.status = "offline"
printer.last_checked = datetime.now()
else:
tapo_logger.warning(f"{printer.name}: steckdose konnte nicht ausgeschaltet werden")
else:
tapo_logger.warning(f" {printer.name}: steckdose konnte nicht ausgeschaltet werden")
else:
tapo_logger.warning(f"⚠️ {printer.name}: keine steckdosen-ip konfiguriert")
tapo_logger.warning(f"⚠️ {printer.name}: keine steckdosen-ip konfiguriert")
results[printer.name] = False
except Exception as e:
tapo_logger.error(f"❌ fehler bei initialisierung von {printer.name}: {str(e)}")
results[printer.name] = False
except Exception as e:
tapo_logger.error(f"❌ fehler bei initialisierung von {printer.name}: {str(e)}")
results[printer.name] = False
# Änderungen speichern
db_session.commit()
db_session.close()
# Änderungen speichern
db_session.commit()
success_count = sum(1 for success in results.values() if success)
total_count = len(results)
@ -625,16 +626,15 @@ class TapoController:
status_dict = {}
try:
db_session = get_db_session()
printers = db_session.query(Printer).filter(
Printer.active == True,
Printer.plug_ip.isnot(None)
).all()
if not printers:
tapo_logger.info(" keine drucker mit tapo-steckdosen konfiguriert")
db_session.close()
return status_dict
with get_db_session() as db_session:
printers = db_session.query(Printer).filter(
Printer.active == True,
Printer.plug_ip.isnot(None)
).all()
if not printers:
tapo_logger.info(" keine drucker mit tapo-steckdosen konfiguriert")
return status_dict
tapo_logger.info(f"🔍 prüfe status von {len(printers)} tapo-steckdosen...")
@ -673,8 +673,7 @@ class TapoController:
"last_checked": datetime.now().isoformat()
}
db_session.close()
tapo_logger.info(f"✅ status-update abgeschlossen für {len(status_dict)} steckdosen")
tapo_logger.info(f"✅ status-update abgeschlossen für {len(status_dict)} steckdosen")
except Exception as e:
tapo_logger.error(f"❌ kritischer fehler beim abrufen des steckdosen-status: {str(e)}")
@ -754,28 +753,29 @@ class TapoController:
**kwargs: Zusätzliche Informationen für das Log
"""
try:
db_session = get_db_session()
log_entry = PlugStatusLog(
printer_id=printer_id,
status=status,
ip_address=ip_address,
response_time_ms=kwargs.get('response_time_ms'),
power_consumption=kwargs.get('power_consumption'),
voltage=kwargs.get('voltage'),
current=kwargs.get('current'),
error_message=kwargs.get('error_message'),
firmware_version=kwargs.get('firmware_version'),
notes=kwargs.get('notes'),
timestamp=datetime.now()
)
db_session.add(log_entry)
db_session.commit()
db_session.close()
with get_db_session() as db_session:
log_entry = PlugStatusLog(
printer_id=printer_id,
status=status,
ip_address=ip_address,
response_time_ms=kwargs.get('response_time_ms'),
power_consumption=kwargs.get('power_consumption'),
voltage=kwargs.get('voltage'),
current=kwargs.get('current'),
error_message=kwargs.get('error_message'),
firmware_version=kwargs.get('firmware_version'),
notes=kwargs.get('notes'),
timestamp=datetime.now(),
source='system',
user_id=None
)
db_session.add(log_entry)
db_session.commit()
except Exception as e:
tapo_logger.debug(f"Fehler beim Loggen des Plug-Status: {e}")
# Session wird automatisch mit rollback geschlossen durch context manager
def _ensure_outlet_in_database(self, ip_address: str, nickname: str = None) -> bool:
"""
@ -789,40 +789,37 @@ class TapoController:
bool: True wenn erfolgreich in Datenbank gespeichert/aktualisiert
"""
try:
db_session = get_db_session()
with get_db_session() as db_session:
# Prüfen, ob bereits ein Drucker mit dieser Steckdosen-IP existiert
existing_printer = db_session.query(Printer).filter(
Printer.plug_ip == ip_address
).first()
if existing_printer:
tapo_logger.debug(f"Steckdose {ip_address} bereits mit Drucker {existing_printer.name} verknüpft")
return True
# Prüfen, ob bereits ein Drucker mit dieser Steckdosen-IP existiert
existing_printer = db_session.query(Printer).filter(
Printer.plug_ip == ip_address
).first()
if existing_printer:
tapo_logger.debug(f"Steckdose {ip_address} bereits mit Drucker {existing_printer.name} verknüpft")
db_session.close()
# Neuen Drucker-Eintrag für die Steckdose erstellen
printer_name = nickname or f"Tapo Plug {ip_address}"
new_printer = Printer(
name=printer_name,
ip_address=ip_address, # Gleiche IP für Drucker und Steckdose
plug_ip=ip_address,
location="Automatisch erkannt",
active=True,
status="offline",
plug_username=self.username,
plug_password=self.password,
last_checked=datetime.now()
)
db_session.add(new_printer)
db_session.commit()
tapo_logger.info(f"✅ Neue Tapo-Steckdose '{printer_name}' ({ip_address}) in Datenbank gespeichert")
return True
# Neuen Drucker-Eintrag für die Steckdose erstellen
printer_name = nickname or f"Tapo Plug {ip_address}"
new_printer = Printer(
name=printer_name,
ip_address=ip_address, # Gleiche IP für Drucker und Steckdose
plug_ip=ip_address,
location="Automatisch erkannt",
active=True,
status="offline",
plug_username=self.username,
plug_password=self.password,
last_checked=datetime.now()
)
db_session.add(new_printer)
db_session.commit()
tapo_logger.info(f"✅ Neue Tapo-Steckdose '{printer_name}' ({ip_address}) in Datenbank gespeichert")
db_session.close()
return True
except Exception as e:
tapo_logger.error(f"❌ Fehler beim Speichern der Steckdose {ip_address} in Datenbank: {str(e)}")
return False
@ -879,7 +876,7 @@ class TapoController:
try:
# P110 Energiedaten abrufen
p110 = PyP100.P110(printer.plug_ip, self.username, self.password)
p110 = PyP110(printer.plug_ip, self.username, self.password)
p110.handshake()
p110.login()