first working version

This commit is contained in:
Martin Quarda 2025-04-01 10:47:02 +02:00
parent bc61d8a0bd
commit ca8d008e77
3 changed files with 63 additions and 42 deletions

View File

@ -1,6 +1,7 @@
{ {
"station_id": "1", "station_id": 2,
"host": "https://beta.alkator.cz", "host": "https://beta.alkator.cz",
"login": "station_register@alkator.cz", "login": "station_register@alkator.cz",
"password": "password_heslo" "password": "password_heslo",
"countdown_seconds": 60
} }

View File

@ -12,9 +12,14 @@ gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gio, Gdk from gi.repository import Gtk, Gio, Gdk
from requests.adapters import HTTPAdapter, Retry from requests.adapters import HTTPAdapter, Retry
with open('config.json', 'r') as f:
config = json.load(f)
activeCards = [] activeCards = []
TIME = 600 TIME = config['countdown_seconds']
USB_IF = 0 # Interface USB_IF = 0 # Interface
USB_TIMEOUT = 5 # Timeout in ms USB_TIMEOUT = 5 # Timeout in ms
@ -25,8 +30,6 @@ db = {}
queue_to_send = [] queue_to_send = []
with open('config.json', 'r') as f:
config = json.load(f)
session = requests.Session() session = requests.Session()
@ -57,7 +60,7 @@ def refreshDbEvery3mins():
time.sleep(3 * 60) time.sleep(3 * 60)
Thread(target=refreshDbEvery3mins).start() threading.Thread(target=refreshDbEvery3mins).start()
def sendQueueToSend(): def sendQueueToSend():
@ -78,7 +81,7 @@ def sendQueueToSend():
time.sleep(1) time.sleep(1)
Thread(target=sendQueueToSend).start() threading.Thread(target=sendQueueToSend).start()
class UsbCardReader(): class UsbCardReader():

View File

@ -1,10 +1,13 @@
import sys import sys
import datetime import datetime
import requests import requests
import threading
import time
import json import json
import usb.core import usb.core
import usb.util import usb.util
from PyQt6 import QtWidgets, uic, QtGui from PyQt6 import QtWidgets, uic, QtGui
from queue import Queue
from requests.adapters import HTTPAdapter, Retry from requests.adapters import HTTPAdapter, Retry
@ -40,31 +43,53 @@ response = session.get(config['host'] + '/api/racers')
racers = response.json() 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(): def register_racer():
card_id = last_card card_id = last_card
index = window.racers.currentIndex() 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]) racer_id = int(index.data().split(' ')[-1])
try: try:
starting_number = max(filter(lambda r: r['starting_number'], racers), key=lambda racer: racer['starting_number'])['starting_number'] + 1 starting_number = max(filter(lambda r: r['starting_number'], racers), key=lambda racer: racer['starting_number'])['starting_number'] + 1
except ValueError: except ValueError:
starting_number = 1 starting_number = 1
response = session.post(config['host'] + '/api/card/register', json={'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}) queue.put({
if response.status_code == 400: 'url': config['host'] + '/api/card/register',
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.") 'json': {'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}
mb.exec() })
return
if response.status_code != 200:
mb = QtWidgets.QMessageBox(text=f"Neznámá chyba! {response.status_code} {response.content}")
mb.exec()
return
racer = list(filter(lambda x: x['racer_id'] == racer_id, racers))[0] racer = list(filter(lambda x: x['racer_id'] == racer_id, racers))[0]
racer['card_id'] = card_id racer['card_id'] = card_id
racer['starting_number'] = starting_number racer['starting_number'] = starting_number
racer['started'] = False racer['started'] = False
updateRacers() 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() mb.exec()
@ -101,36 +126,28 @@ def updateLastCard(card_id):
racer = findByCard(card_id) racer = findByCard(card_id)
if racer: if racer:
if racer['started']: 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}) queue.put({
if response != 200: 'url': config['host'] + '/api/station/register',
mb = QtWidgets.QMessageBox(text="Selhalo zapsání na Stanici!") 'json': {'card_id': card_id, 'time': time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 6}
mb.exec() })
return
racer = list(filter(lambda x: x['card_id'] == card_id, racers))[0] racer = list(filter(lambda x: x['card_id'] == card_id, racers))[0]
starting_number = racer['starting_number'] starting_number = racer['starting_number']
racer_id = racer['racer_id'] racer_id = racer['racer_id']
racer['card_id'] = None 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}) queue.put({
'url': config['host'] + '/api/card/unregister',
if response.status_code != 200: 'json': {'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id},
mb = QtWidgets.QMessageBox(text="Registrace na stanici proběhla úspěšně, ale karta nebyla odhlášena!") })
mb.exec() #mb = QtWidgets.QMessageBox(text=f"Úspěšné odhlášení závodníka {starting_number}!")
return #mb.exec()
json = response.json()
mb = QtWidgets.QMessageBox(text=f"Úspěšné odhlášení závodníka! Finální čas je: {json['time']}")
mb.exec()
else: 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}) queue.put({
if response.status_code != 200: 'url': config['host'] + '/api/station/register',
mb = QtWidgets.QMessageBox(text="Nastala nějaká chyba na serveru!") 'json': {'card_id': card_id, 'time': last_time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 1},
mb.exec() })
return #mb = QtWidgets.QMessageBox(text=f"Úspěšné odstartování závodníka {racer['starting_number']}!")
mb = QtWidgets.QMessageBox(text=f"Úspěšné odstartování závodníka {racer['starting_number']}!") #mb.exec()
mb.exec()
racer['started'] = True racer['started'] = True
@ -166,7 +183,7 @@ class UsbCardReader():
receivedNumber = 10 * receivedNumber + receivedDigit receivedNumber = 10 * receivedNumber + receivedDigit
if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not receivedNumber == 0 )): 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_time = datetime.datetime.now()
last_card = receivedNumber last_card = receivedNumber
updateLastCard(receivedNumber) updateLastCard(receivedNumber)