Die Dateien wurden in mehreren Log- und Cache-Ordnern geändert:
This commit is contained in:
@ -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()
|
||||
|
||||
|
Reference in New Issue
Block a user