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",
"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 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():

View File

@ -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)