🎉 Fix: Updated log files and utility scripts for better logging consistency and performance optimization. 🛠️📝🔧
This commit is contained in:
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user