This repository has been archived on 2025-05-16. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
pi-race-timer/app/routes.py
2025-04-29 23:36:37 +02:00

99 lines
3 KiB
Python

from flask import Blueprint, render_template, request, redirect, url_for, jsonify
import json
import os
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.start()
return redirect(url_for("main.rennansicht"))
@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)