📚 Improved backend structure & logs management 🎉
This commit is contained in:
336
backend/app.py
336
backend/app.py
@ -423,6 +423,342 @@ def stats_page():
|
||||
"""Zeigt die Statistiken-Seite an"""
|
||||
return render_template("stats.html", title="Statistiken")
|
||||
|
||||
# ===== API-ENDPUNKTE FÜR FRONTEND-KOMPATIBILITÄT =====
|
||||
|
||||
@app.route("/api/jobs", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_jobs():
|
||||
"""API-Endpunkt für Jobs - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import get_jobs
|
||||
return get_jobs()
|
||||
|
||||
@app.route("/api/jobs", methods=["POST"])
|
||||
@login_required
|
||||
def api_create_job():
|
||||
"""API-Endpunkt für Job-Erstellung - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import create_job
|
||||
return create_job()
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_job(job_id):
|
||||
"""API-Endpunkt für einzelnen Job - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import get_job
|
||||
return get_job(job_id)
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>", methods=["PUT"])
|
||||
@login_required
|
||||
def api_update_job(job_id):
|
||||
"""API-Endpunkt für Job-Update - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import update_job
|
||||
return update_job(job_id)
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>", methods=["DELETE"])
|
||||
@login_required
|
||||
def api_delete_job(job_id):
|
||||
"""API-Endpunkt für Job-Löschung - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import delete_job
|
||||
return delete_job(job_id)
|
||||
|
||||
@app.route("/api/jobs/active", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_active_jobs():
|
||||
"""API-Endpunkt für aktive Jobs - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import get_active_jobs
|
||||
return get_active_jobs()
|
||||
|
||||
@app.route("/api/jobs/current", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_current_job():
|
||||
"""API-Endpunkt für aktuellen Job - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import get_current_job
|
||||
return get_current_job()
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>/start", methods=["POST"])
|
||||
@login_required
|
||||
def api_start_job(job_id):
|
||||
"""API-Endpunkt für Job-Start - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import start_job
|
||||
return start_job(job_id)
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>/pause", methods=["POST"])
|
||||
@login_required
|
||||
def api_pause_job(job_id):
|
||||
"""API-Endpunkt für Job-Pause - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import pause_job
|
||||
return pause_job(job_id)
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>/resume", methods=["POST"])
|
||||
@login_required
|
||||
def api_resume_job(job_id):
|
||||
"""API-Endpunkt für Job-Resume - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import resume_job
|
||||
return resume_job(job_id)
|
||||
|
||||
@app.route("/api/jobs/<int:job_id>/finish", methods=["POST"])
|
||||
@login_required
|
||||
def api_finish_job(job_id):
|
||||
"""API-Endpunkt für Job-Finish - leitet an Jobs-Blueprint weiter"""
|
||||
from blueprints.jobs import finish_job
|
||||
return finish_job(job_id)
|
||||
|
||||
@app.route("/api/printers", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_printers():
|
||||
"""API-Endpunkt für Drucker-Liste"""
|
||||
try:
|
||||
from models import get_db_session, Printer
|
||||
|
||||
db_session = get_db_session()
|
||||
printers = db_session.query(Printer).filter(Printer.active == True).all()
|
||||
|
||||
printer_list = []
|
||||
for printer in printers:
|
||||
printer_dict = {
|
||||
"id": printer.id,
|
||||
"name": printer.name,
|
||||
"model": printer.model,
|
||||
"location": printer.location,
|
||||
"status": printer.status,
|
||||
"ip_address": printer.ip_address,
|
||||
"plug_ip": printer.plug_ip,
|
||||
"active": printer.active,
|
||||
"last_checked": printer.last_checked.isoformat() if printer.last_checked else None
|
||||
}
|
||||
printer_list.append(printer_dict)
|
||||
|
||||
db_session.close()
|
||||
|
||||
app_logger.info(f"✅ API: {len(printer_list)} Drucker abgerufen")
|
||||
return jsonify({"printers": printer_list})
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ API-Fehler beim Abrufen der Drucker: {str(e)}")
|
||||
return jsonify({"error": "Fehler beim Laden der Drucker", "details": str(e)}), 500
|
||||
|
||||
@app.route("/api/printers/status", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_printer_status():
|
||||
"""API-Endpunkt für Drucker-Status"""
|
||||
try:
|
||||
from models import get_db_session, Printer
|
||||
from utils.tapo_controller import tapo_controller
|
||||
|
||||
db_session = get_db_session()
|
||||
printers = db_session.query(Printer).filter(Printer.active == True).all()
|
||||
|
||||
status_list = []
|
||||
for printer in printers:
|
||||
# Tapo-Steckdosen-Status prüfen
|
||||
if printer.plug_ip:
|
||||
try:
|
||||
reachable, plug_status = tapo_controller.check_outlet_status(
|
||||
printer.plug_ip,
|
||||
printer_id=printer.id
|
||||
)
|
||||
|
||||
status_dict = {
|
||||
"id": printer.id,
|
||||
"name": printer.name,
|
||||
"status": printer.status,
|
||||
"plug_status": plug_status,
|
||||
"plug_reachable": reachable,
|
||||
"plug_ip": printer.plug_ip,
|
||||
"location": printer.location
|
||||
}
|
||||
except Exception as e:
|
||||
app_logger.warning(f"⚠️ Fehler bei Steckdosen-Status für {printer.name}: {str(e)}")
|
||||
status_dict = {
|
||||
"id": printer.id,
|
||||
"name": printer.name,
|
||||
"status": "error",
|
||||
"plug_status": "unknown",
|
||||
"plug_reachable": False,
|
||||
"plug_ip": printer.plug_ip,
|
||||
"location": printer.location,
|
||||
"error": str(e)
|
||||
}
|
||||
else:
|
||||
status_dict = {
|
||||
"id": printer.id,
|
||||
"name": printer.name,
|
||||
"status": printer.status,
|
||||
"plug_status": "no_plug",
|
||||
"plug_reachable": False,
|
||||
"plug_ip": None,
|
||||
"location": printer.location
|
||||
}
|
||||
|
||||
status_list.append(status_dict)
|
||||
|
||||
db_session.close()
|
||||
|
||||
app_logger.info(f"✅ API: Status für {len(status_list)} Drucker abgerufen")
|
||||
return jsonify({"printers": status_list})
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ API-Fehler beim Abrufen des Drucker-Status: {str(e)}")
|
||||
return jsonify({"error": "Fehler beim Laden des Drucker-Status", "details": str(e)}), 500
|
||||
|
||||
# ===== SESSION-API-ENDPUNKTE =====
|
||||
|
||||
@app.route("/api/session/status", methods=["GET"])
|
||||
@login_required
|
||||
def api_session_status():
|
||||
"""API-Endpunkt für Session-Status"""
|
||||
try:
|
||||
last_activity = session.get('last_activity')
|
||||
if last_activity:
|
||||
last_activity_time = datetime.fromisoformat(last_activity)
|
||||
time_since_activity = (datetime.now() - last_activity_time).total_seconds()
|
||||
time_left_seconds = max(0, SESSION_LIFETIME.total_seconds() - time_since_activity)
|
||||
else:
|
||||
time_left_seconds = SESSION_LIFETIME.total_seconds()
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"user": {
|
||||
"id": current_user.id,
|
||||
"email": current_user.email,
|
||||
"name": current_user.name,
|
||||
"is_admin": current_user.is_admin
|
||||
},
|
||||
"session": {
|
||||
"time_left_seconds": int(time_left_seconds),
|
||||
"max_inactive_minutes": int(SESSION_LIFETIME.total_seconds() / 60),
|
||||
"last_activity": last_activity or datetime.now().isoformat()
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ Session-Status-Fehler: {str(e)}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@app.route("/api/session/heartbeat", methods=["POST"])
|
||||
@login_required
|
||||
def api_session_heartbeat():
|
||||
"""API-Endpunkt für Session-Heartbeat"""
|
||||
try:
|
||||
# Session-Aktivität aktualisieren
|
||||
session['last_activity'] = datetime.now().isoformat()
|
||||
session.permanent = True
|
||||
|
||||
# Verbleibende Zeit berechnen
|
||||
time_left_seconds = SESSION_LIFETIME.total_seconds()
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"time_left_seconds": int(time_left_seconds),
|
||||
"timestamp": datetime.now().isoformat()
|
||||
})
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ Session-Heartbeat-Fehler: {str(e)}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@app.route("/api/session/extend", methods=["POST"])
|
||||
@login_required
|
||||
def api_session_extend():
|
||||
"""API-Endpunkt für Session-Verlängerung"""
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
extend_minutes = data.get('extend_minutes', 30)
|
||||
|
||||
# Session verlängern
|
||||
session['last_activity'] = datetime.now().isoformat()
|
||||
session.permanent = True
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"extended_minutes": extend_minutes,
|
||||
"new_expiry": (datetime.now() + SESSION_LIFETIME).isoformat()
|
||||
})
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ Session-Extend-Fehler: {str(e)}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@app.route("/api/jobs/recent", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_recent_jobs():
|
||||
"""API-Endpunkt für kürzlich erstellte Jobs"""
|
||||
try:
|
||||
from models import get_db_session, Job
|
||||
|
||||
db_session = get_db_session()
|
||||
|
||||
# Letzte 10 Jobs des Benutzers (oder alle für Admin)
|
||||
query = db_session.query(Job).order_by(Job.created_at.desc())
|
||||
|
||||
if not current_user.is_admin:
|
||||
query = query.filter(Job.user_id == current_user.id)
|
||||
|
||||
recent_jobs = query.limit(10).all()
|
||||
|
||||
job_list = []
|
||||
for job in recent_jobs:
|
||||
job_dict = {
|
||||
"id": job.id,
|
||||
"name": job.name,
|
||||
"status": job.status,
|
||||
"created_at": job.created_at.isoformat() if job.created_at else None,
|
||||
"start_at": job.start_at.isoformat() if job.start_at else None,
|
||||
"duration_minutes": job.duration_minutes,
|
||||
"printer_name": job.printer.name if job.printer else "Unbekannt"
|
||||
}
|
||||
job_list.append(job_dict)
|
||||
|
||||
db_session.close()
|
||||
|
||||
app_logger.info(f"✅ API: {len(job_list)} kürzliche Jobs abgerufen")
|
||||
return jsonify({"jobs": job_list})
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ API-Fehler beim Abrufen kürzlicher Jobs: {str(e)}")
|
||||
return jsonify({"error": "Fehler beim Laden kürzlicher Jobs", "details": str(e)}), 500
|
||||
|
||||
@app.route("/api/stats", methods=["GET"])
|
||||
@login_required
|
||||
def api_get_stats():
|
||||
"""API-Endpunkt für System-Statistiken"""
|
||||
try:
|
||||
from models import get_db_session, Job, Printer
|
||||
|
||||
db_session = get_db_session()
|
||||
|
||||
# Grundlegende Statistiken
|
||||
total_jobs = db_session.query(Job).count()
|
||||
active_jobs = db_session.query(Job).filter(Job.status.in_(["scheduled", "running"])).count()
|
||||
completed_jobs = db_session.query(Job).filter(Job.status == "finished").count()
|
||||
total_printers = db_session.query(Printer).filter(Printer.active == True).count()
|
||||
|
||||
# Benutzer-spezifische Statistiken
|
||||
if not current_user.is_admin:
|
||||
user_jobs = db_session.query(Job).filter(Job.user_id == current_user.id).count()
|
||||
user_active_jobs = db_session.query(Job).filter(
|
||||
Job.user_id == current_user.id,
|
||||
Job.status.in_(["scheduled", "running"])
|
||||
).count()
|
||||
else:
|
||||
user_jobs = total_jobs
|
||||
user_active_jobs = active_jobs
|
||||
|
||||
db_session.close()
|
||||
|
||||
stats = {
|
||||
"total_jobs": total_jobs,
|
||||
"active_jobs": active_jobs,
|
||||
"completed_jobs": completed_jobs,
|
||||
"total_printers": total_printers,
|
||||
"user_jobs": user_jobs,
|
||||
"user_active_jobs": user_active_jobs,
|
||||
"timestamp": datetime.now().isoformat()
|
||||
}
|
||||
|
||||
app_logger.info(f"✅ API: Statistiken abgerufen")
|
||||
return jsonify(stats)
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ API-Fehler beim Abrufen der Statistiken: {str(e)}")
|
||||
return jsonify({"error": "Fehler beim Laden der Statistiken", "details": str(e)}), 500
|
||||
|
||||
# Statische Seiten
|
||||
@app.route("/privacy")
|
||||
def privacy():
|
||||
|
@ -148,7 +148,8 @@ def calendar_view():
|
||||
can_edit = can_edit_events(current_user)
|
||||
|
||||
with get_cached_session() as db_session:
|
||||
printers = db_session.query(Printer).filter_by(active=True).all()
|
||||
# Alle Drucker für Auswahlfelder anzeigen (unabhängig von active-Status)
|
||||
printers = db_session.query(Printer).all()
|
||||
|
||||
return render_template('calendar.html',
|
||||
printers=printers,
|
||||
@ -1270,8 +1271,8 @@ def api_printer_availability():
|
||||
return jsonify({"error": "Ungültiges Datumsformat"}), 400
|
||||
|
||||
with get_cached_session() as db_session:
|
||||
# Alle aktiven Drucker laden
|
||||
printers = db_session.query(Printer).filter_by(active=True).all()
|
||||
# Alle Drucker laden für Verfügbarkeitsanalyse (unabhängig von active-Status)
|
||||
printers = db_session.query(Printer).all()
|
||||
|
||||
availability_info = []
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -4028,3 +4028,85 @@ WHERE users.id = ?
|
||||
2025-06-11 09:17:51 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:17:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:17:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:18:44 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:18:46 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:18:48 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:18:51 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:18:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:18:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:19:44 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:19:46 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:19:48 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:19:51 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:19:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:19:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:20:45 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:20:47 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:20:49 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:20:51 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:20:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:20:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:21:44 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:21:46 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:21:48 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:21:50 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:21:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:21:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:22:45 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:22:47 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:22:49 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:22:51 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:22:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:22:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:23:44 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:23:46 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:23:49 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:23:51 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:23:53 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:23:55 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:24:19 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:24:19 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:24:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/printers
|
||||
2025-06-11 09:24:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-11 09:24:21 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:24:23 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:24:25 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:24:27 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:24:29 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
2025-06-11 09:25:48 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup
|
||||
2025-06-11 09:25:48 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db
|
||||
2025-06-11 09:25:48 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O)
|
||||
2025-06-11 09:25:48 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-11 09:25:49 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-11 09:25:49 - [app] app - [INFO] INFO - [START] Server startet auf 0.0.0.0:5000
|
||||
2025-06-11 09:25:49 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-11 09:25:55 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/.well-known/appspecific/com.chrome.devtools.json
|
||||
2025-06-11 09:26:13 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/.well-known/appspecific/com.chrome.devtools.json
|
||||
2025-06-11 09:26:13 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers 1: (sqlite3.InterfaceError) bad parameter or other API misuse
|
||||
[SQL: SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.password_hash AS users_password_hash, users.name AS users_name, users.role AS users_role, users.active AS users_active, users.created_at AS users_created_at, users.last_login AS users_last_login, users.updated_at AS users_updated_at, users.settings AS users_settings, users.last_activity AS users_last_activity, users.department AS users_department, users.position AS users_position, users.phone AS users_phone, users.bio AS users_bio, users.theme_preference AS users_theme_preference, users.language_preference AS users_language_preference, users.email_notifications AS users_email_notifications, users.browser_notifications AS users_browser_notifications, users.dashboard_layout AS users_dashboard_layout, users.compact_mode AS users_compact_mode, users.show_completed_jobs AS users_show_completed_jobs, users.auto_refresh_interval AS users_auto_refresh_interval, users.auto_logout_timeout AS users_auto_logout_timeout
|
||||
FROM users
|
||||
WHERE users.id = ?
|
||||
LIMIT ? OFFSET ?]
|
||||
[parameters: (1, 1, 0)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/rvf5)
|
||||
2025-06-11 09:26:14 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:26:15 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/printers
|
||||
2025-06-11 09:26:16 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-11 09:26:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/.well-known/appspecific/com.chrome.devtools.json
|
||||
2025-06-11 09:26:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:26:21 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/printers
|
||||
2025-06-11 09:26:21 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-11 09:26:35 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:26:50 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:26:50 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:27:05 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:27:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:27:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:27:35 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:27:50 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:27:50 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:28:05 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:28:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:28:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs
|
||||
2025-06-11 09:28:20 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
2025-06-11 09:28:35 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/jobs?page=1
|
||||
|
@ -60,3 +60,4 @@
|
||||
2025-06-11 08:54:35 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-11 09:06:43 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-11 09:08:17 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-11 09:25:48 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
|
@ -575,3 +575,14 @@
|
||||
2025-06-11 09:06:43 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-11 09:08:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-11 09:08:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-11 09:25:48 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-11 09:25:48 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-11 09:25:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
|
||||
2025-06-11 09:25:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Prüfe Status von 6 aktiven Druckern...
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.101): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.103): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.100): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.104): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.102): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.106): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-11 09:25:58 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker
|
||||
|
@ -321,3 +321,6 @@
|
||||
2025-06-11 08:54:14 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
|
||||
2025-06-11 08:54:14 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker
|
||||
2025-06-11 08:54:14 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 3.33ms
|
||||
2025-06-11 09:25:49 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
|
||||
2025-06-11 09:25:58 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker
|
||||
2025-06-11 09:25:58 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9043.66ms
|
||||
|
@ -312,3 +312,14 @@
|
||||
2025-06-11 09:08:17 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Queue-Überwachung gestartet (Intervall: 120 Sekunden)
|
||||
2025-06-11 09:08:17 - [queue_manager] queue_manager - [INFO] INFO - ✅ Printer Queue Manager gestartet
|
||||
2025-06-11 09:08:17 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestartet
|
||||
2025-06-11 09:24:33 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Stoppe Queue-Manager...
|
||||
2025-06-11 09:24:33 - [queue_manager] queue_manager - [INFO] INFO - ⏳ Warte auf Monitor-Thread...
|
||||
2025-06-11 09:24:33 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop
|
||||
2025-06-11 09:24:33 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet
|
||||
2025-06-11 09:24:33 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt
|
||||
2025-06-11 09:25:49 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Initialisiere neuen Queue-Manager...
|
||||
2025-06-11 09:25:49 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Zentrale Shutdown-Verwaltung erkannt - deaktiviere lokale Signal-Handler
|
||||
2025-06-11 09:25:49 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Starte Printer Queue Manager...
|
||||
2025-06-11 09:25:49 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Queue-Überwachung gestartet (Intervall: 120 Sekunden)
|
||||
2025-06-11 09:25:49 - [queue_manager] queue_manager - [INFO] INFO - ✅ Printer Queue Manager gestartet
|
||||
2025-06-11 09:25:49 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestartet
|
||||
|
@ -133,3 +133,6 @@
|
||||
2025-06-11 09:08:17 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-11 09:08:17 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-11 09:08:17 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-11 09:25:48 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-11 09:25:49 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-11 09:25:49 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
|
@ -60,3 +60,4 @@
|
||||
2025-06-11 08:54:35 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-11 09:06:43 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-11 09:08:17 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-11 09:25:48 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
|
@ -474,3 +474,12 @@
|
||||
2025-06-11 09:08:17 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-11 09:08:17 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-11 09:08:17 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet...
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)]
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-11T09:25:48.820576
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-11 09:25:48 - [startup] startup - [INFO] INFO - ==================================================
|
||||
|
@ -35,3 +35,47 @@
|
||||
2025-06-11 08:52:54 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.104 nicht erreichbar
|
||||
2025-06-11 08:52:56 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.106 nicht erreichbar
|
||||
2025-06-11 08:52:56 - [tapo_control] tapo_control - [INFO] INFO - Dashboard geladen: 6 Steckdosen, 0 online
|
||||
2025-06-11 09:08:22 - [tapo_control] tapo_control - [INFO] INFO - Tapo Dashboard aufgerufen von Benutzer: Administrator
|
||||
2025-06-11 09:08:25 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.100 nicht erreichbar
|
||||
2025-06-11 09:08:27 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.101 nicht erreichbar
|
||||
2025-06-11 09:08:29 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.102 nicht erreichbar
|
||||
2025-06-11 09:08:31 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.103 nicht erreichbar
|
||||
2025-06-11 09:08:33 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.104 nicht erreichbar
|
||||
2025-06-11 09:08:35 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.106 nicht erreichbar
|
||||
2025-06-11 09:08:35 - [tapo_control] tapo_control - [INFO] INFO - Dashboard geladen: 6 Steckdosen, 0 online
|
||||
2025-06-11 09:09:06 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:09:18 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:09:36 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:09:49 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:10:06 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:10:19 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:10:36 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:10:49 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:11:06 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:11:19 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:11:36 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:11:49 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:12:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:12:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:13:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:13:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:14:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:14:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:15:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:15:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:17:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:17:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:18:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:18:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:19:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:19:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:20:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:20:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:21:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:21:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:22:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:22:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:23:42 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:23:55 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
2025-06-11 09:24:17 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage für 6 Tapo-Steckdosen gestartet
|
||||
2025-06-11 09:24:29 - [tapo_control] tapo_control - [INFO] INFO - Status-Abfrage abgeschlossen: 0/6 Steckdosen erreichbar
|
||||
|
@ -332,3 +332,13 @@
|
||||
2025-06-11 09:08:43 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 5/6: 192.168.0.102
|
||||
2025-06-11 09:08:49 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 6/6: 192.168.0.105
|
||||
2025-06-11 09:08:55 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ steckdosen-erkennung abgeschlossen: 0/6 steckdosen gefunden in 36.1s
|
||||
2025-06-11 09:25:48 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert
|
||||
2025-06-11 09:25:50 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 starte automatische tapo-steckdosenerkennung...
|
||||
2025-06-11 09:25:50 - [tapo_controller] tapo_controller - [INFO] INFO - 🔄 teste 6 standard-ips aus der konfiguration
|
||||
2025-06-11 09:25:50 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 1/6: 192.168.0.103
|
||||
2025-06-11 09:25:56 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 2/6: 192.168.0.104
|
||||
2025-06-11 09:26:02 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 3/6: 192.168.0.100
|
||||
2025-06-11 09:26:08 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 4/6: 192.168.0.101
|
||||
2025-06-11 09:26:14 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 5/6: 192.168.0.102
|
||||
2025-06-11 09:26:20 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 6/6: 192.168.0.105
|
||||
2025-06-11 09:26:26 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ steckdosen-erkennung abgeschlossen: 0/6 steckdosen gefunden in 36.1s
|
||||
|
@ -107,3 +107,7 @@
|
||||
2025-06-11 09:08:20 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-11 09:08:22 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-11 09:08:36 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-11 09:24:19 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-11 09:25:49 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-11 09:26:14 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-11 09:26:20 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
|
@ -90,3 +90,7 @@
|
||||
2025-06-11 09:08:16 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-11 09:08:16 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-11 09:08:16 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-11 09:25:48 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-11 09:25:48 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-11 09:25:48 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-11 09:25:48 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
|
Reference in New Issue
Block a user