🎉 Improved documentation and code organization in Backend 🌐

This commit is contained in:
2025-06-12 10:06:34 +02:00
parent c356111149
commit 2bf4e0e6c0
30 changed files with 1596 additions and 94 deletions

View File

@ -0,0 +1,258 @@
#!/usr/bin/env python3
"""
Skript zum Einrichten und Testen der 6 Standard-Drucker
"""
import sys
import os
from datetime import datetime
# Pfad zum Backend hinzufügen
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from app import app
from models import init_database, Printer, User, get_db_session
from utils.tapo_status_manager import tapo_status_manager
from utils.logging_config import get_logger
logger = get_logger("test_printer_setup")
# Die 6 Standard-Drucker für Mercedes-Benz
STANDARD_PRINTERS = [
{
"name": "3D-Drucker 1 - Halle A",
"model": "Prusa MK3S+",
"location": "Halle A - Arbeitsplatz 1",
"ip_address": "192.168.1.101",
"plug_ip": "192.168.1.201",
"plug_username": "admin",
"plug_password": "tapo_password"
},
{
"name": "3D-Drucker 2 - Halle A",
"model": "Prusa MK3S+",
"location": "Halle A - Arbeitsplatz 2",
"ip_address": "192.168.1.102",
"plug_ip": "192.168.1.202",
"plug_username": "admin",
"plug_password": "tapo_password"
},
{
"name": "3D-Drucker 3 - Halle B",
"model": "Ultimaker S5",
"location": "Halle B - Arbeitsplatz 1",
"ip_address": "192.168.1.103",
"plug_ip": "192.168.1.203",
"plug_username": "admin",
"plug_password": "tapo_password"
},
{
"name": "3D-Drucker 4 - Halle B",
"model": "Ultimaker S5",
"location": "Halle B - Arbeitsplatz 2",
"ip_address": "192.168.1.104",
"plug_ip": "192.168.1.204",
"plug_username": "admin",
"plug_password": "tapo_password"
},
{
"name": "3D-Drucker 5 - Labor",
"model": "Formlabs Form 3",
"location": "Labor - SLA-Bereich",
"ip_address": "192.168.1.105",
"plug_ip": "192.168.1.205",
"plug_username": "admin",
"plug_password": "tapo_password"
},
{
"name": "3D-Drucker 6 - Werkstatt",
"model": "Markforged X7",
"location": "Werkstatt - Spezialbereich",
"ip_address": "192.168.1.106",
"plug_ip": "192.168.1.206",
"plug_username": "admin",
"plug_password": "tapo_password"
}
]
def setup_printers():
"""Richtet die 6 Standard-Drucker ein"""
logger.info("🚀 Starte Drucker-Setup...")
with app.app_context():
db_session = get_db_session()
# Prüfen, ob schon Drucker existieren
existing_count = db_session.query(Printer).count()
if existing_count > 0:
logger.info(f" Es existieren bereits {existing_count} Drucker in der Datenbank")
response = input("Möchten Sie diese löschen und neu anlegen? (j/n): ")
if response.lower() == 'j':
logger.info("🗑️ Lösche existierende Drucker...")
db_session.query(Printer).delete()
db_session.commit()
else:
logger.info("⏩ Überspringe Drucker-Setup")
return
# Drucker erstellen
for i, printer_data in enumerate(STANDARD_PRINTERS, 1):
logger.info(f"📋 Erstelle Drucker {i}/6: {printer_data['name']}")
printer = Printer()
printer.name = printer_data["name"]
printer.model = printer_data["model"]
printer.location = printer_data["location"]
printer.ip_address = printer_data["ip_address"]
printer.plug_ip = printer_data["plug_ip"]
printer.plug_username = printer_data["plug_username"]
printer.plug_password = printer_data["plug_password"]
printer.status = "offline"
printer.active = True
printer.created_at = datetime.now()
db_session.add(printer)
db_session.commit()
logger.info("✅ Alle 6 Drucker erfolgreich erstellt!")
db_session.close()
def test_printer_status():
"""Testet den Status aller Drucker"""
logger.info("\n🔍 Teste Drucker-Status...")
with app.app_context():
# Status aller Drucker abrufen
all_status = tapo_status_manager.get_all_printer_status()
logger.info(f"📊 Status für {len(all_status)} Drucker abgerufen:\n")
# Status-Zusammenfassung
status_summary = {
"on": 0,
"off": 0,
"unreachable": 0,
"unknown": 0
}
for status in all_status:
plug_status = status.get("plug_status", "unknown")
status_summary[plug_status] = status_summary.get(plug_status, 0) + 1
# Detaillierte Ausgabe
logger.info(f"🖨️ {status['name']}")
logger.info(f" 📍 Standort: {status['location']}")
logger.info(f" 🔌 Steckdosen-IP: {status.get('plug_ip', 'Keine')}")
if status.get("has_plug"):
status_text = tapo_status_manager.STATUS_DISPLAY.get(plug_status, {}).get("text", "Unbekannt")
logger.info(f" ⚡ Status: {status_text}")
if status.get("plug_reachable"):
logger.info(f" ✅ Steckdose erreichbar")
else:
logger.info(f" ❌ Steckdose nicht erreichbar")
if status.get("error"):
logger.info(f" ⚠️ Fehler: {status['error']}")
else:
logger.info(f" Keine Steckdose konfiguriert")
if status.get("current_job"):
job = status["current_job"]
logger.info(f" 🏃 Aktiver Job: {job['name']} (von {job['user']})")
if status.get("next_job"):
job = status["next_job"]
logger.info(f" ⏰ Nächster Job: {job['name']} (in {job['starts_in_minutes']} Minuten)")
logger.info("")
# Zusammenfassung
logger.info("📈 Status-Zusammenfassung:")
logger.info(f" ✅ Eingeschaltet: {status_summary.get('on', 0)}")
logger.info(f" ⭕ Ausgeschaltet: {status_summary.get('off', 0)}")
logger.info(f" ❌ Nicht erreichbar: {status_summary.get('unreachable', 0)}")
logger.info(f" ❓ Unbekannt: {status_summary.get('unknown', 0)}")
def test_plug_control():
"""Testet die Steckdosen-Steuerung"""
logger.info("\n🎮 Teste Steckdosen-Steuerung...")
with app.app_context():
db_session = get_db_session()
# Ersten Drucker für Test auswählen
printer = db_session.query(Printer).first()
if not printer:
logger.error("❌ Keine Drucker gefunden!")
return
logger.info(f"🎯 Teste Steuerung für: {printer.name}")
# Aktuellen Status abrufen
current_status = tapo_status_manager.get_printer_status(printer.id)
logger.info(f"📊 Aktueller Status: {current_status.get('plug_status', 'unknown')}")
if not current_status.get("can_control"):
logger.warning("⚠️ Steckdose kann nicht gesteuert werden")
if current_status.get("error"):
logger.warning(f" Grund: {current_status['error']}")
return
# Versuche ein/auszuschalten
response = input("\nMöchten Sie versuchen, die Steckdose zu steuern? (j/n): ")
if response.lower() == 'j':
action = "on" if current_status.get("plug_status") == "off" else "off"
logger.info(f"🔄 Versuche Steckdose zu '{action}' zu schalten...")
success, msg = tapo_status_manager.control_plug(printer.id, action)
if success:
logger.info(f"{msg}")
# Neuen Status abrufen
new_status = tapo_status_manager.get_printer_status(printer.id)
logger.info(f"📊 Neuer Status: {new_status.get('plug_status', 'unknown')}")
else:
logger.error(f"❌ Fehler: {msg}")
db_session.close()
def main():
"""Hauptfunktion"""
logger.info("=" * 60)
logger.info("🏭 Mercedes-Benz 3D-Druck-Management - Drucker-Setup & Test")
logger.info("=" * 60)
try:
# Datenbank initialisieren
with app.app_context():
init_database()
# Drucker einrichten
setup_printers()
# Status testen
test_printer_status()
# Optional: Steuerung testen
response = input("\n🎮 Möchten Sie die Steckdosen-Steuerung testen? (j/n): ")
if response.lower() == 'j':
test_plug_control()
logger.info("\n✅ Test abgeschlossen!")
except Exception as e:
logger.error(f"❌ Fehler aufgetreten: {str(e)}", exc_info=True)
return 1
return 0
if __name__ == "__main__":
sys.exit(main())