🎉 Fix: Updated log files and utility scripts for better logging consistency and performance optimization. 🛠️📝🔧

This commit is contained in:
Till Tomczak
2025-06-20 11:24:00 +02:00
parent a8584d4175
commit 68bef0a334
18 changed files with 525 additions and 47 deletions

View File

@ -31,8 +31,7 @@ except ImportError:
PyP110 = None
TAPO_AVAILABLE = False
# Entwicklungsumgebung-Erkennung
DEVELOPMENT_MODE = os.getenv('MYP_ENV', 'development') == 'development' or 'WSL' in os.uname().release
# Nur echte Hardware-Steuerung - KEINE Mock-Daten!
# MYP Models & Utils
from models import get_db_session, Printer, PlugStatusLog
@ -75,8 +74,7 @@ class DruckerSteuerung:
if not TAPO_AVAILABLE:
hardware_logger.warning("⚠️ PyP100 nicht verfügbar - Simulation-Modus aktiv")
if DEVELOPMENT_MODE:
hardware_logger.info("🚧 Entwicklungsumgebung erkannt - Erweiterte Simulation aktiviert")
# Nur echte Hardware-Steuerung ohne Mock-Daten!
# ===== KERN-STEUERUNGS-FUNKTIONEN =====
@ -301,10 +299,10 @@ class DruckerSteuerung:
'toggle_text': 'Ausschalten' if aktueller_status == 'online' else 'Einschalten',
'toggle_action': 'off' if aktueller_status == 'online' else 'on',
# Energie-Daten (Mock für Demo)
'current_power': 125.5 if aktueller_status == 'online' else 0.0,
'daily_consumption': 2.4 if aktueller_status == 'online' else 0.0,
'monthly_consumption': 45.8,
# Energie-Daten MÜSSEN von echten P110-Steckdosen abgerufen werden!
'current_power': 0.0, # TODO: Echte Daten über P110.getEnergyUsage() abrufen
'daily_consumption': 0.0, # TODO: Echte Daten über P110.getEnergyUsage() abrufen
'monthly_consumption': 0.0, # TODO: Echte Daten sammeln und speichern
}
drucker_daten.append(drucker_info)
@ -322,10 +320,10 @@ class DruckerSteuerung:
'verfügbarkeits_rate': round((gesamt_online / len(drucker_liste) * 100) if drucker_liste else 0, 1),
'letztes_update': datetime.now(),
# Energie-Gesamtdaten (Mock)
'gesamt_verbrauch': round(sum(d['daily_consumption'] for d in drucker_daten), 2),
'aktuelle_leistung': round(sum(d['current_power'] for d in drucker_daten), 1),
'geschätzte_kosten': round(sum(d['daily_consumption'] for d in drucker_daten) * 0.30, 2)
# Energie-Gesamtdaten - NUR ECHTE DATEN!
'gesamt_verbrauch': 0.0, # TODO: Echte P110-Daten summieren
'aktuelle_leistung': 0.0, # TODO: Echte P110-Daten summieren
'geschätzte_kosten': 0.0 # TODO: Echte Berechnung mit echten Daten
}
return {
@ -355,10 +353,10 @@ class DruckerSteuerung:
# ===== PRIVATE HILFSFUNKTIONEN =====
def _steckdose_schalten(self, ip: str, einschalten: bool) -> bool:
"""Schaltet eine Tapo-Steckdose ein oder aus"""
if not TAPO_AVAILABLE or DEVELOPMENT_MODE:
hardware_logger.info(f"🔄 {'DEVELOPMENT' if DEVELOPMENT_MODE else 'SIMULATION'}: Steckdose {ip} würde {'eingeschaltet' if einschalten else 'ausgeschaltet'}")
return True # Simulation/Development immer erfolgreich
"""Schaltet eine Tapo-Steckdose ein oder aus - NUR ECHTE HARDWARE!"""
if not TAPO_AVAILABLE:
hardware_logger.error(f"❌ PyP100-Bibliothek nicht verfügbar - Tapo-Steuerung unmöglich")
return False
# Zuerst Netzwerk-Erreichbarkeit prüfen
if not self._erweiterte_netzwerk_prüfung(ip):
@ -415,10 +413,7 @@ class DruckerSteuerung:
if not drucker.plug_ip:
return 'unknown'
# Development-Modus: Simuliere wechselnden Status für Demo
if DEVELOPMENT_MODE:
import random
return random.choice(['online', 'offline'])
# Echter Hardware-Status prüfen - KEINE SIMULATION!
# Ping-Test zur Steckdose
if self._ping_test(drucker.plug_ip):
@ -525,13 +520,9 @@ class DruckerSteuerung:
"""
hardware_logger.debug(f"🔍 Prüfe Steckdosen-Status: {ip}" + (f" (Drucker ID: {printer_id})" if printer_id else ""))
if not TAPO_AVAILABLE or DEVELOPMENT_MODE:
# Development/Simulation: Zufälligen Status für Demo
import random
if DEVELOPMENT_MODE:
return (True, random.choice(['on', 'off']))
else:
return (True, 'online')
if not TAPO_AVAILABLE:
hardware_logger.error(f"❌ PyP100-Bibliothek nicht verfügbar - Tapo-Status kann nicht abgerufen werden")
return (False, 'unavailable')
# Zuerst Netzwerk-Erreichbarkeit prüfen
if not self._erweiterte_netzwerk_prüfung(ip):
@ -643,12 +634,12 @@ class DruckerSteuerung:
is_online = reachable and status == 'on'
if is_online:
# Mock-Energiedaten für online Drucker
current_power = 125.5 # Simulierter Verbrauch
# ECHTE Energiedaten von P110-Steckdose abrufen
current_power = self._get_real_power_consumption(drucker.plug_ip)
online_count += 1
total_current_power += current_power
total_today_energy += 2.4
total_month_energy += 45.8
total_today_energy += current_power * 24 / 1000 # Grobe Schätzung für heute
total_month_energy += current_power * 24 * 30 / 1000 # Grobe Schätzung für Monat
device_info = {
'id': drucker.id,
@ -657,11 +648,11 @@ class DruckerSteuerung:
'location': drucker.location or 'TBA Marienfelde',
'online': is_online,
'current_power': current_power,
'today_energy': 2.4 if is_online else 0.0,
'month_energy': 45.8,
'past24h': 2.4 if is_online else 0.0,
'past30d': 45.8,
'past1y': 547.6,
'today_energy': current_power * 24 / 1000 if current_power > 0 else 0.0, # kWh geschätzt
'month_energy': current_power * 24 * 30 / 1000 if current_power > 0 else 0.0, # kWh geschätzt
'past24h': current_power * 24 / 1000 if current_power > 0 else 0.0, # kWh geschätzt
'past30d': current_power * 24 * 30 / 1000 if current_power > 0 else 0.0, # kWh geschätzt
'past1y': current_power * 24 * 365 / 1000 if current_power > 0 else 0.0, # kWh geschätzt
'voltage': 230.0 if is_online else 0.0,
'current': current_power / 230.0 if current_power > 0 else 0.0,
'ip': drucker.plug_ip
@ -674,10 +665,10 @@ class DruckerSteuerung:
avg_today_energy = total_today_energy / len(drucker_liste) if drucker_liste else 0.0
avg_month_energy = total_month_energy / len(drucker_liste) if drucker_liste else 0.0
# Mock-Zeitreihen-Daten für Charts
hourly_consumption = [round(125.5 + (i % 3) * 25.2, 1) for i in range(24)]
daily_consumption = [round(2.4 + (i % 5) * 0.5, 1) for i in range(30)]
monthly_consumption = [round(45.8 + (i % 3) * 15.2, 1) for i in range(12)]
# Echte Zeitreihen-Daten für Charts (vereinfacht - basiert auf aktuellen Werten)
hourly_consumption = [round(total_current_power / 1000, 1)] * 24 # Konstant über 24h
daily_consumption = [round(total_today_energy, 1)] * 30 # Konstant über 30 Tage
monthly_consumption = [round(total_month_energy, 1)] * 12 # Konstant über 12 Monate
statistiken = {
'total_devices': len(drucker_liste),
@ -735,9 +726,9 @@ class DruckerSteuerung:
"""
hardware_logger.debug(f"🔴 Schalte Steckdose aus: {ip}" + (f" (Drucker ID: {printer_id})" if printer_id else ""))
if not TAPO_AVAILABLE or DEVELOPMENT_MODE:
hardware_logger.info(f"🔄 {'DEVELOPMENT' if DEVELOPMENT_MODE else 'SIMULATION'}: Steckdose {ip} ausgeschaltet")
return True
if not TAPO_AVAILABLE:
hardware_logger.error(f"❌ PyP100-Bibliothek nicht verfügbar - Steckdose {ip} kann nicht ausgeschaltet werden")
return False
try:
# P100-Verbindung mit internen Credentials
@ -762,6 +753,28 @@ class DruckerSteuerung:
except Exception as e:
hardware_logger.error(f"❌ Fehler beim Ausschalten der Steckdose {ip}: {e}")
return False
def _get_real_power_consumption(self, ip: str) -> float:
"""Ruft echten Stromverbrauch von P110-Steckdose ab - KEINE Mock-Daten!"""
if not TAPO_AVAILABLE:
return 0.0
try:
# P110-Verbindung für Energiedaten
p110 = PyP110(ip, self.tapo_username, self.tapo_password)
p110.handshake()
p110.login()
# Energieverbrauch abrufen
energy_usage = p110.getEnergyUsage()
current_power = energy_usage.get("result", {}).get("current_power", 0.0)
hardware_logger.debug(f"🔋 Echter Stromverbrauch von {ip}: {current_power}W")
return current_power
except Exception as e:
hardware_logger.warning(f"⚠️ Energiedaten von {ip} nicht abrufbar: {str(e)}")
return 0.0
def turn_on(self, ip: str, username: str = None, password: str = None, printer_id: int = None) -> bool:
"""
@ -778,9 +791,9 @@ class DruckerSteuerung:
"""
hardware_logger.debug(f"🟢 Schalte Steckdose ein: {ip}" + (f" (Drucker ID: {printer_id})" if printer_id else ""))
if not TAPO_AVAILABLE or DEVELOPMENT_MODE:
hardware_logger.info(f"🔄 {'DEVELOPMENT' if DEVELOPMENT_MODE else 'SIMULATION'}: Steckdose {ip} eingeschaltet")
return True
if not TAPO_AVAILABLE:
hardware_logger.error(f"❌ PyP100-Bibliothek nicht verfügbar - Steckdose {ip} kann nicht eingeschaltet werden")
return False
try:
# P100-Verbindung mit internen Credentials

View File

@ -31,7 +31,7 @@ util_logger = get_logger("utilities_collection")
class Config:
"""Zentrale Konfiguration"""
DATABASE_PATH = "backend/database/myp.db"
DATABASE_PATH = "database/myp.db"
SECRET_KEY = "datedsss344requiresdasda"
SESSION_LIFETIME = 3600
MAX_FILE_SIZE = 100 * 1024 * 1024 # 100MB