🎉 Improved backend structure & optimizations 🛠️

This commit is contained in:
Till Tomczak
2025-06-20 11:01:29 +02:00
parent 0c13a98cb5
commit eecbb5d267
44 changed files with 401 additions and 19 deletions

View File

@ -13,6 +13,7 @@ Autor: Till Tomczak - Mercedes-Benz TBA Marienfelde
Datum: 2025-06-19 (Komplett-Neuschreibung für Backend-Kontrolle)
"""
import os
import time
import socket
import threading
@ -30,10 +31,12 @@ except ImportError:
PyP110 = None
TAPO_AVAILABLE = False
# Entwicklungsumgebung-Erkennung
DEVELOPMENT_MODE = os.getenv('MYP_ENV', 'development') == 'development' or 'WSL' in os.uname().release
# MYP Models & Utils
from models import get_db_session, Printer, PlugStatusLog
from utils.logging_config import get_logger
import os
# Logger
hardware_logger = get_logger("hardware_integration")
@ -71,6 +74,9 @@ 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")
# ===== KERN-STEUERUNGS-FUNKTIONEN =====
@ -350,9 +356,9 @@ class DruckerSteuerung:
def _steckdose_schalten(self, ip: str, einschalten: bool) -> bool:
"""Schaltet eine Tapo-Steckdose ein oder aus"""
if not TAPO_AVAILABLE:
hardware_logger.warning(f"⚠️ Simulation: Steckdose {ip} würde {'eingeschaltet' if einschalten else 'ausgeschaltet'}")
return True # Simulation immer erfolgreich
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
# Zuerst Netzwerk-Erreichbarkeit prüfen
if not self._erweiterte_netzwerk_prüfung(ip):
@ -409,6 +415,11 @@ 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'])
# Ping-Test zur Steckdose
if self._ping_test(drucker.plug_ip):
return 'online'
@ -514,9 +525,13 @@ class DruckerSteuerung:
"""
hardware_logger.debug(f"🔍 Prüfe Steckdosen-Status: {ip}" + (f" (Drucker ID: {printer_id})" if printer_id else ""))
if not TAPO_AVAILABLE:
# Legacy-Format: (reachable, status)
return (True, 'online')
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')
# Zuerst Netzwerk-Erreichbarkeit prüfen
if not self._erweiterte_netzwerk_prüfung(ip):
@ -720,8 +735,8 @@ class DruckerSteuerung:
"""
hardware_logger.debug(f"🔴 Schalte Steckdose aus: {ip}" + (f" (Drucker ID: {printer_id})" if printer_id else ""))
if not TAPO_AVAILABLE:
hardware_logger.info(f"🔄 SIMULATION: Steckdose {ip} ausgeschaltet")
if not TAPO_AVAILABLE or DEVELOPMENT_MODE:
hardware_logger.info(f"🔄 {'DEVELOPMENT' if DEVELOPMENT_MODE else 'SIMULATION'}: Steckdose {ip} ausgeschaltet")
return True
try:
@ -763,8 +778,8 @@ class DruckerSteuerung:
"""
hardware_logger.debug(f"🟢 Schalte Steckdose ein: {ip}" + (f" (Drucker ID: {printer_id})" if printer_id else ""))
if not TAPO_AVAILABLE:
hardware_logger.info(f"🔄 SIMULATION: Steckdose {ip} eingeschaltet")
if not TAPO_AVAILABLE or DEVELOPMENT_MODE:
hardware_logger.info(f"🔄 {'DEVELOPMENT' if DEVELOPMENT_MODE else 'SIMULATION'}: Steckdose {ip} eingeschaltet")
return True
try: