258 lines
8.9 KiB
Python
258 lines
8.9 KiB
Python
#!/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.hardware_integration import printer_monitor
|
||
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 = printer_monitor.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 = printer_monitor.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 = printer_monitor.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 = printer_monitor.control_plug(printer.id, action)
|
||
|
||
if success:
|
||
logger.info(f"✅ {msg}")
|
||
|
||
# Neuen Status abrufen
|
||
new_status = printer_monitor.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()) |