📝 "Refactor admin UI components for improved consistency and performance" 🌈
This commit is contained in:
@ -837,6 +837,112 @@ def create_backup():
|
||||
'message': f'Fehler beim Erstellen des Backups: {str(e)}'
|
||||
}), 500
|
||||
|
||||
@admin_api_blueprint.route('/printers/<int:printer_id>/toggle', methods=['POST'])
|
||||
@admin_required
|
||||
def toggle_printer_power(printer_id):
|
||||
"""
|
||||
Schaltet die Smart-Plug-Steckdose eines Druckers ein/aus (Toggle-Funktion).
|
||||
|
||||
Args:
|
||||
printer_id: ID des zu steuernden Druckers
|
||||
|
||||
JSON-Parameter:
|
||||
- reason: Grund für die Schaltung (optional)
|
||||
|
||||
Returns:
|
||||
JSON mit Ergebnis der Toggle-Aktion
|
||||
"""
|
||||
admin_api_logger.info(f"🔌 Smart-Plug Toggle für Drucker {printer_id} von Admin {current_user.name}")
|
||||
|
||||
try:
|
||||
# Parameter auslesen
|
||||
data = request.get_json() or {}
|
||||
reason = data.get("reason", "Admin-Panel Toggle")
|
||||
|
||||
# Drucker aus Datenbank holen
|
||||
db_session = get_cached_session()
|
||||
printer = db_session.query(Printer).filter(Printer.id == printer_id).first()
|
||||
|
||||
if not printer:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": f"Drucker mit ID {printer_id} nicht gefunden"
|
||||
}), 404
|
||||
|
||||
# Prüfen, ob Drucker eine Steckdose konfiguriert hat
|
||||
if not printer.plug_ip or not printer.plug_username or not printer.plug_password:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": f"Drucker {printer.name} hat keine Steckdose konfiguriert"
|
||||
}), 400
|
||||
|
||||
# Aktuellen Status der Steckdose ermitteln
|
||||
try:
|
||||
from PyP100 import PyP110
|
||||
p110 = PyP110.P110(printer.plug_ip, printer.plug_username, printer.plug_password)
|
||||
p110.handshake()
|
||||
p110.login()
|
||||
|
||||
# Aktuellen Status abrufen
|
||||
device_info = p110.getDeviceInfo()
|
||||
current_status = device_info["result"]["device_on"]
|
||||
|
||||
# Toggle-Aktion durchführen
|
||||
if current_status:
|
||||
# Ausschalten
|
||||
p110.turnOff()
|
||||
new_status = "off"
|
||||
action = "ausgeschaltet"
|
||||
printer.status = "offline"
|
||||
else:
|
||||
# Einschalten
|
||||
p110.turnOn()
|
||||
new_status = "on"
|
||||
action = "eingeschaltet"
|
||||
printer.status = "starting"
|
||||
|
||||
# Drucker-Status in DB aktualisieren
|
||||
printer.last_checked = datetime.now()
|
||||
db_session.commit()
|
||||
|
||||
admin_api_logger.info(f"✅ Drucker {printer.name} erfolgreich {action} | Grund: {reason}")
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": f"Drucker {printer.name} erfolgreich {action}",
|
||||
"printer": {
|
||||
"id": printer_id,
|
||||
"name": printer.name,
|
||||
"model": printer.model,
|
||||
"location": printer.location
|
||||
},
|
||||
"toggle_result": {
|
||||
"previous_status": "on" if current_status else "off",
|
||||
"new_status": new_status,
|
||||
"action": action,
|
||||
"reason": reason
|
||||
},
|
||||
"performed_by": {
|
||||
"id": current_user.id,
|
||||
"name": current_user.name
|
||||
},
|
||||
"timestamp": datetime.now().isoformat()
|
||||
})
|
||||
|
||||
except Exception as tapo_error:
|
||||
admin_api_logger.error(f"❌ Tapo-Fehler für Drucker {printer.name}: {str(tapo_error)}")
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": f"Fehler bei Steckdosensteuerung: {str(tapo_error)}"
|
||||
}), 500
|
||||
|
||||
except Exception as e:
|
||||
admin_api_logger.error(f"❌ Allgemeiner Fehler bei Toggle-Aktion: {str(e)}")
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": f"Systemfehler: {str(e)}"
|
||||
}), 500
|
||||
|
||||
@admin_api_blueprint.route('/database/optimize', methods=['POST'])
|
||||
@admin_required
|
||||
def optimize_database():
|
||||
|
Reference in New Issue
Block a user