🎉 Improved documentation and code organization in Backend 🌐
This commit is contained in:
258
backend/scripts/test_printer_setup.py
Normal file
258
backend/scripts/test_printer_setup.py
Normal 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())
|
Reference in New Issue
Block a user