From ca8d008e77e9554d35b2ccd54d034da54b1fe000 Mon Sep 17 00:00:00 2001 From: Martin Quarda Date: Tue, 1 Apr 2025 10:47:02 +0200 Subject: [PATCH] first working version --- SW/PC/Stopwatch/config.json | 5 +- SW/PC/Stopwatch/main.py | 13 ++++-- SW/PC/Stopwatch/registrace.py | 87 +++++++++++++++++++++-------------- 3 files changed, 63 insertions(+), 42 deletions(-) diff --git a/SW/PC/Stopwatch/config.json b/SW/PC/Stopwatch/config.json index d05fbd3..1b84274 100644 --- a/SW/PC/Stopwatch/config.json +++ b/SW/PC/Stopwatch/config.json @@ -1,6 +1,7 @@ { - "station_id": "1", + "station_id": 2, "host": "https://beta.alkator.cz", "login": "station_register@alkator.cz", - "password": "password_heslo" + "password": "password_heslo", + "countdown_seconds": 60 } \ No newline at end of file diff --git a/SW/PC/Stopwatch/main.py b/SW/PC/Stopwatch/main.py index 01145db..c56c295 100644 --- a/SW/PC/Stopwatch/main.py +++ b/SW/PC/Stopwatch/main.py @@ -12,9 +12,14 @@ gi.require_version('Gtk', '4.0') from gi.repository import Gtk, Gio, Gdk from requests.adapters import HTTPAdapter, Retry + +with open('config.json', 'r') as f: + config = json.load(f) + + activeCards = [] -TIME = 600 +TIME = config['countdown_seconds'] USB_IF = 0 # Interface USB_TIMEOUT = 5 # Timeout in ms @@ -25,8 +30,6 @@ db = {} queue_to_send = [] -with open('config.json', 'r') as f: - config = json.load(f) session = requests.Session() @@ -57,7 +60,7 @@ def refreshDbEvery3mins(): time.sleep(3 * 60) -Thread(target=refreshDbEvery3mins).start() +threading.Thread(target=refreshDbEvery3mins).start() def sendQueueToSend(): @@ -78,7 +81,7 @@ def sendQueueToSend(): time.sleep(1) -Thread(target=sendQueueToSend).start() +threading.Thread(target=sendQueueToSend).start() class UsbCardReader(): diff --git a/SW/PC/Stopwatch/registrace.py b/SW/PC/Stopwatch/registrace.py index 7b6aadc..a4fe3f7 100644 --- a/SW/PC/Stopwatch/registrace.py +++ b/SW/PC/Stopwatch/registrace.py @@ -1,10 +1,13 @@ import sys import datetime import requests +import threading +import time import json import usb.core import usb.util from PyQt6 import QtWidgets, uic, QtGui +from queue import Queue from requests.adapters import HTTPAdapter, Retry @@ -40,31 +43,53 @@ response = session.get(config['host'] + '/api/racers') racers = response.json() +db = [] + + +with open('db.json', 'r') as f: + db = json.loads(f.read()) + + +queue = Queue() + + +def worker(): + while True: + item = queue.get() + db.append(item) + with open('db.json', 'w') as f: + f.write(json.dumps(db)) + response = session.post(item['url'], json=item['json']) + print(item, response) + + +threading.Thread(target=worker).start() + + def register_racer(): card_id = last_card index = window.racers.currentIndex() + if not index: + mb = QtWidgets.QMessageBox(text='Prosím vyberte závodníka!') + mb.exec() + return racer_id = int(index.data().split(' ')[-1]) try: starting_number = max(filter(lambda r: r['starting_number'], racers), key=lambda racer: racer['starting_number'])['starting_number'] + 1 except ValueError: starting_number = 1 - response = session.post(config['host'] + '/api/card/register', json={'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}) - if response.status_code == 400: - mb = QtWidgets.QMessageBox(text="Zaregistrování selhalo! Je špatně vyplněné startovní číslo nebo karta už je přiřazená k jinému závodníku.") - mb.exec() - return - if response.status_code != 200: - mb = QtWidgets.QMessageBox(text=f"Neznámá chyba! {response.status_code} {response.content}") - mb.exec() - return + queue.put({ + 'url': config['host'] + '/api/card/register', + 'json': {'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id} + }) racer = list(filter(lambda x: x['racer_id'] == racer_id, racers))[0] racer['card_id'] = card_id racer['starting_number'] = starting_number racer['started'] = False updateRacers() - mb = QtWidgets.QMessageBox(text=f"Úspěšné zaregistrování závodníka se startovním číslem {starting_number}!") + mb = QtWidgets.QMessageBox(text=f"Úspěšné zaregistrování závodníka {racer['first_name']} {racer['last_name']} se startovním číslem {starting_number}!") mb.exec() @@ -101,36 +126,28 @@ def updateLastCard(card_id): racer = findByCard(card_id) if racer: if racer['started']: - response = session.post(config['host'] + '/api/station/register', json={'card_id': card_id, 'time': time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 6}) - if response != 200: - mb = QtWidgets.QMessageBox(text="Selhalo zapsání na Stanici!") - mb.exec() - return - + queue.put({ + 'url': config['host'] + '/api/station/register', + 'json': {'card_id': card_id, 'time': time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 6} + }) racer = list(filter(lambda x: x['card_id'] == card_id, racers))[0] starting_number = racer['starting_number'] racer_id = racer['racer_id'] racer['card_id'] = None - response = session.post(config['host'] + '/api/card/unregister', json={'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}) - - if response.status_code != 200: - mb = QtWidgets.QMessageBox(text="Registrace na stanici proběhla úspěšně, ale karta nebyla odhlášena!") - mb.exec() - return - - json = response.json() - - mb = QtWidgets.QMessageBox(text=f"Úspěšné odhlášení závodníka! Finální čas je: {json['time']}") - mb.exec() + queue.put({ + 'url': config['host'] + '/api/card/unregister', + 'json': {'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}, + }) + #mb = QtWidgets.QMessageBox(text=f"Úspěšné odhlášení závodníka {starting_number}!") + #mb.exec() else: - response = session.post(config['host'] + '/api/station/register', json={'card_id': card_id, 'time': last_time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 1}) - if response.status_code != 200: - mb = QtWidgets.QMessageBox(text="Nastala nějaká chyba na serveru!") - mb.exec() - return - mb = QtWidgets.QMessageBox(text=f"Úspěšné odstartování závodníka {racer['starting_number']}!") - mb.exec() + queue.put({ + 'url': config['host'] + '/api/station/register', + 'json': {'card_id': card_id, 'time': last_time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 1}, + }) + #mb = QtWidgets.QMessageBox(text=f"Úspěšné odstartování závodníka {racer['starting_number']}!") + #mb.exec() racer['started'] = True @@ -166,7 +183,7 @@ class UsbCardReader(): receivedNumber = 10 * receivedNumber + receivedDigit if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not receivedNumber == 0 )): - if last_card != receivedNumber or datetime.datetime.now() - last_time > datetime.timedelta(seconds=10): + if last_card != receivedNumber or datetime.datetime.now() - last_time > datetime.timedelta(seconds=60): last_time = datetime.datetime.now() last_card = receivedNumber updateLastCard(receivedNumber)