f64879b6d88d102642277fa11964a375f61df92d
JMK RB RaceController
RC timing app med sponsor-eventflöde (delade bilar/transpondrar mellan olika heat/finaler), AMMC WebSocket och lokal SQLite-lagring på Windows.
Vad som ingår
- Event-lägen:
Race (driver transponders)Track Event (shared cars)
- UI-separering:
Event= sponsor-event med delade bilar/transpondrarRace Setup= riktiga race med personlig transponder per förareRace Setupinnehåller nu även:- välj exakt vilka förare som är med i racet
- practice-ranking
- kval-ranking med
poängellerbästa resultat - inbyggd guide för hur man skapar race steg för steg
- beskrivningar direkt i alla fält under
Raceformat Follow-up tidefter ordinarie racetid innan heatet stängsMin varvtidochMax varvtidför att filtrera shortcuts/felträffar och styra bättre statistik/stintlogik- seedmetoder för practice/kval: bästa N varv som summa, snitt eller konsekutiva varv
- valbar kval-poängtabell och tie-break-regler
- presets i
Raceformatför kort teknisk bana, klubbrace, IFMAR-liknande upplägg och endurance - schemaavvikelse på
Översiktmellan planerad och faktisk körtid - sessionstyp
Free Practiceför löpande varvtider utan seedning - auto-generering av kvalheat från practice-ranking eller klasslista
- reseeding av kommande kvalheat från aktuell ranking
- auto-generering av
A/B/C...finaler från ranking - sparad manuell grid per session via dragbar grid-editor
- auto-reseed hoppar över heat där manuell grid har låsts tills du återställer den
- tydlig
Lås/Lås upp gridi grid-editorn per session - final-ranking över flera leg med räknade finalheat
- valbar
bump-upmellan finaler - reserverade bump-platser i högre finaler
- visuell finalmatris med reserverade bump-platser
- dragbar grid-editor för positionsstart
- utskrift/export av heatsheets per kval/final
- overlay-vy för extern leaderboard-skärm
- flera overlay-lägen: leaderboard, speaker och results
- speaker-overlay med eventmarkörer och separata speaker-cues
- live speaker-panel i
Timingför att slå av/på cues under pågående session - speaker-cues och klubbinfo/PDF-header styrs från
Settings - logo-upload för overlay från
Settings - branding per event/race med egen logo, tagline, footer och PDF-tema i
Hantera - extra speaker-cues för
session start,new best lapochtop 3 change - valbart PDF-tema:
classic,minimal,motorsport - utskrift av startlistor och resultat med vald branding
- servergenererad PDF-export för startlistor, heatsheets och resultat med inbäddad logo
- genererade kval/finaler ärver tid och starttyp från raceformatet
- finish-ljud som siren i stället för browser-röst
- Sessioner:
practice,qualification,heat,final - Sponsor-verktyg:
- Skapa rundor automatiskt (
qualification,heat,final) - Auto-assign förare -> bil per session
- Skapa rundor automatiskt (
- Live timing från AMMC WebSocket (
msg: "PASSING") - Hanterad AMMC från webbgränssnittet:
- backend kan starta/stoppa lokal
ammc-ambpå Windows, Linux och macOS - läser bundlade binärer från
AMMC/windows64,AMMC/linux_x86-64,AMMC/apple_m
- backend kan starta/stoppa lokal
- Redigering i UI:
- Klasser, eventnamn/datum, förare och bilar kan redigeras direkt
- Live race-kontroll:
- Nedräkning under pågående session
- Auto-finish vid tidslut med status
Race is finished - Leaderboard-sortering: varv först, därefter närmast måltid för sessionen (t.ex. 5 min = 600s)
- Browserljud för passing (
blippeller tala förarnamn) och målgång - Sessioninställningar för
Mass start,Position start,Staggered Timingvisar grid/startordning för aktivPosition start-session- leaderboard visar både
gap till ledaren,gap till bilen framförocheget deltamot förra varvet Senaste passeringarvisar nu även ogiltiga varv med statusFör kort varvellerÖver maxvarv- manuella korrigeringar i
Tidtagning -> Detaljer:+1/-1 varv,+1/+5/-1 sek,Nollställ korrigering - Practice/Kval kan seedas på bästa
2eller3varv i sessionsinställningar
- Persistens:
- Frontend state i browser (
localStorage) - Samma state + passeringar sparas i lokal SQLite via Node-backend
- Frontend state i browser (
- Inbyggd
Guide-meny i appen med steg-för-steg för:- Sponsor-event (10 personer / 4 bilar)
- Vanligt race
- ogiltiga varv, follow-up och manuella korrigeringar
- AMMC + npm setup på Windows och Linux
- Språkval i UI:
SV/EN
Nya racefunktioner
Follow-up time
- Ställs i
Race Setup -> Hantera -> Raceformat - Kan också sättas per session när du skapar eller redigerar en session
- När ordinarie tid går ut går sessionen först in i
Follow-up aktiv - När follow-up-tiden är slut stängs sessionen automatiskt
- Genererade kval/finaler ärver follow-up från raceformatet
Min / Max varvtid
- Ställs i
Race Setup -> Hantera -> Raceformat Min varvtid:- varv snabbare än gränsen ignoreras som shortcut eller felträff
Max varvtid:- varv långsammare än gränsen räknas inte som giltigt varv
- används också för att bryta stintar och förbättra statistik
Praktiskt exempel:
- bana runt
16 sek/varv Min varvtid = 11 sekMax varvtid = 60 sek
Ogiltiga passeringar
Tidtagning -> Senaste passeringarvisar nu både giltiga och ogiltiga passeringar- status som visas:
För kort varvÖver maxvarv
- ogiltiga passeringar markeras visuellt i listan
Manuella korrigeringar
- öppna
Tidtagning - klicka
Detaljerpå en förare / ett lag - där finns:
+1 varv-1 varv+1 sek+5 sek-1 sekNollställ korrigering
- korrigeringarna uppdaterar leaderboard och resultat direkt
Best laps / average / consecutive
- Ställs per session med
SeedmetodnärSeed bästa varvär större än0 - tillgängliga lägen:
Bästa N varv, summaBästa N varv, snittBästa N konsekutiva varv
- leaderboard och ranking visar rätt format beroende på läge:
- summa:
3/00:48.321 - snitt:
3 avg 16.107 - konsekutiva:
3 con 00:49.005
- summa:
Poängtabeller och tie-break
- Ställs i
Race Setup -> Hantera -> Raceformat - poängtabeller för kval:
Placeringstal (1,2,3...)Fallande efter fältstorlek10-9-8-7-6-5-4-3-2-1
- tie-break för kvalranking:
Jämför räknade rundorBästa enskilda varvBästa runda / heatresultat
- kvalrankingen visar även en underrad med aktiv tie-break-information i tabellen
Raceformat presets
Race Setup -> Hantera -> Raceformat- välj ett preset och klicka
Applicera preset - tillgängliga presets:
Kort teknisk bana 16sKlubbrace kval + finalIFMAR-stil kval/finalEndurance / lagrace
- efter applicering kan alla fält fortfarande justeras manuellt och sparas som vanligt
Spara klubb-presetlagrar egna lokala presets i appens state så de kan återanvändas på samma installationTa bort klubb-presettar bort ett lokalt preset igenInställningar -> Klubb-presetarkan exportera/importera presetbiblioteket som JSON mellan installationer
Schemaavvikelse på Översikt
Översiktvisar nu om dagen ligger före eller efter schema- planerad tid räknar:
- sessionens varaktighet
- plus follow-up tid
- faktisk tid räknar:
- verklig tid från start till stopp
- eller pågående körtid om sessionen fortfarande kör
Invalid-lap markering i leaderboard
- om senaste mottagna passing för en förare/ett lag var ogiltig markeras raden även i leaderboard och overlay
- det gör det lättare att se felträffar utan att behöva stå i
Senaste passeringar
Manuell invalidate last lap
Tidtagning -> Detaljer- knappen
Ogiltigförklara senaste varvmarkerar senaste räknade varv som manuellt ogiltigt - leaderboard, overlay och passings-historik uppdateras direkt
Återställ senaste manuellt ogiltiga varvlägger tillbaka senaste manuellt ogiltiga varvet om du ångrar dig
Domarvy
- ny meny
Domare - visar aktiv session, leaderboard, lap history och domarlogg i samma vy
- samma korrigeringar som i
Tidtagning -> Detaljerfinns där som snabbknappar - filter för:
AllaOgiltigaKorrigeradeTeam race
- domarloggen kan exporteras per session som JSON
- både
Ångra senasteoch undo-knapp per loggrad finns för flera manuella åtgärder
Windows installation
Kör i PowerShell i projektmappen.
- Installera Node.js LTS (18+).
- Installera dependencies:
npm install - Starta servern i bakgrunden:
npm start - Öppna:
http://localhost:8081- eller från annan dator:
http://<server-ip>:8081
Vanliga kommandon:
npm start
npm stop
npm restart
npm run status
npm run start:fg
npm startstartarlive_eventi bakgrundennpm stopstoppar processen viadata/server.pidnpm restartstartar om backendnpm run statusvisar om backend körnpm run start:fgkör i foreground för felsökning
Windows scripts (bakgrundsstart)
Det finns färdiga .bat-filer i mappen windows/:
windows\\start_ammc.batstartar AMMC i bakgrundenwindows\\start_backend.batstartarnpm starti bakgrunden (logg:logs\\backend.log)windows\\start_all.batstartar både AMMC + backend och öppnar webbsidanwindows\\stop_all.batstoppar backend på port8081ochammc-amb.exe
SQLite-filen skapas automatiskt här:
data\\rc_timing.sqlite
Koppla mot AMMC
Det finns nu två sätt:
A. Hanterad AMMC i webbgränssnittet
Viktigt:
- AMMC körs på samma host där
npm start/node server.jskörs. - Om du öppnar sidan från en annan laptop startas ingen AMMC där.
- Fältet
AMMC binäriSettingsär en sökväg på backend-hosten, inte på klienten som surfar in.
- Lägg AMMC-binärerna i projektmappen
AMMC/(redan gjort i denna repo). - Öppna
Settings. - Aktivera
Hanterad AMMC / Managed AMMC. - Sätt
Decoder IP / host, kontrollera port9000, spara. - Klicka
Starta AMMC / Start AMMC. - Klicka
Använd serverns WS-url / Use server WS URLså sätts klienten till t.ex.ws://<server-ip>:9000.
Standardbinärer:
- Linux-host:
AMMC/linux_x86-64/ammc-amb - Windows-host:
AMMC/windows64/ammc-amb.exe - macOS-host:
AMMC/apple_m/ammc-amb
B. Manuell start
Starta AMMC med WebSocket (exempel):
ammc-amb.exe -w 9000 192.168.1.11
I appen:
Settings- Sätt
WebSocket URLtill t.ex.ws://127.0.0.1:9000 - Sätt
Backend URLtillhttp://127.0.0.1:8081 - Klicka
Test Backend - Gå till
Timingoch klickaConnect Decoder
Om du kör Linux-brandvägg (UFW), öppna porten:
sudo ufw allow 8081/tcp
Auto reload vid uppdatering
- Servern bevakar
index.html,src/app.jsochsrc/styles.css. - När du uppdaterar filer i
Live_RCoch sparar, laddar klienten om sidan automatiskt. - Om backendkoden ändras, kör
npm restart.
Verifiera att SQLite sparar
Hämta senaste passeringar via API:
http://localhost:8081/api/passings
Hämta sparad app-state:
http://localhost:8081/api/state
Viktig regel för sponsor-event
- I samma pågående session måste varje aktiv bil ha unikt transponder-ID.
- Samma transponder-ID kan återanvändas i nästa session (Heat 1 -> Heat 2 -> Heat 3 -> Final 1 ...).
Referens AMMC JSON
Officiell quick-start:
Exempelmeddelande:
{
"msg": "PASSING",
"passing_number": 1,
"transponder": 232323,
"rtc_time": "2022-10-11T22:57:36.099+02:00",
"strength": 0.0,
"resend": false,
"tran_code": "ID:232323",
"loop_id": "55"
}
Description
Languages
JavaScript
90.4%
CSS
8.9%
HTML
0.4%
Batchfile
0.2%
C
0.1%