from flask import Blueprint, render_template, request, redirect, url_for, jsonify import json import os import threading from app.utils import gpio_handler, countdown, zeitmessung, system_tools main = Blueprint("main", __name__) @main.route("/") def index(): return render_template("index.html") @main.route("/rennen_starten") def rennen_starten(): with open("config/fahrer.json") as f: fahrer = json.load(f) return render_template("rennen_starten.html", fahrer=fahrer) @main.route("/countdown_starten", methods=["POST"]) def countdown_starten(): # Countdown in einem Hintergrundthread starten #threading.Thread(target=countdown.start).start() return render_template("countdown.html") @main.route("/rennansicht") def rennansicht(): with open("config/fahrer.json") as f: fahrer = json.load(f) return render_template("rennbildschirm.html", fahrer=fahrer) @main.route("/fahrerverwaltung") def fahrerverwaltung(): with open("config/fahrer.json") as f: fahrer = json.load(f) return render_template("fahrerverwaltung.html", fahrer=fahrer) @main.route("/fahrerverwaltung/speichern", methods=["POST"]) def fahrer_speichern(): data = request.get_json() with open("config/fahrer.json", "w") as f: json.dump(data, f, indent=2) return jsonify({"status": "ok"}) @main.route("/admin") def admin(): return render_template("admin.html") @main.route("/zeit_zuordnen") def zeit_zuordnen(): with open("data/zeiten.json") as f: zeiten = json.load(f) with open("config/fahrer.json") as f: fahrer = json.load(f) return render_template("zeit_zuordnen.html", zeiten=zeiten, fahrer=fahrer) @main.route("/zuordnung/speichern", methods=["POST"]) def zuordnung_speichern(): data = request.get_json() with open("data/zuordnung.json", "w") as f: json.dump(data, f, indent=2) return jsonify({"status": "ok"}) @main.route("/ergebnis") def ergebnis(): zuordnung_path = "data/zuordnung.json" fahrer_path = "config/fahrer.json" with open(fahrer_path) as f: fahrer_list = json.load(f) if os.path.exists(zuordnung_path): with open(zuordnung_path) as f: zuordnungen = json.load(f) else: zuordnungen = [] fahrer_dict = {str(f["nummer"]): {"name": f["name"], "zeiten": [], "farbe": f["farbe"]} for f in fahrer_list} for eintrag in zuordnungen: fahrer_id = str(eintrag["fahrer"]) zeit = float(eintrag["zeit"]) if fahrer_id in fahrer_dict: fahrer_dict[fahrer_id]["zeiten"].append(zeit) ergebnisse = [] for nummer, daten in fahrer_dict.items(): zeiten = daten["zeiten"] if zeiten: beste = min(zeiten) durchschnitt = sum(zeiten) / len(zeiten) gesamt = sum(zeiten) ergebnisse.append({ "nummer": nummer, "name": daten["name"], "farbe": daten["farbe"], "beste": f"{beste:.3f}", "durchschnitt": f"{durchschnitt:.3f}", "gesamt": f"{gesamt:.3f}" }) return render_template("ergebnis.html", ergebnisse=ergebnisse)