Files
Live_RC/README.sv.md

12 KiB

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.

Skärmbilder

Översikt

Översikt

Tidtagning

Tidtagning

Overlay

Overlay

Event

Event

Race Setup

Race Setup

Team Overlay

Team Overlay

Domare

Team Overlay

Vad som ingår

  • Event-lägen:
    • Race (driver transponders)
    • Track Event (shared cars)
  • UI-separering:
    • Event = sponsor-event med delade bilar/transpondrar
    • Race Setup = riktiga race med personlig transponder per förare
    • Race Setup innehåller nu även:
    • välj exakt vilka förare som är med i racet
    • practice-ranking
    • kval-ranking med poäng eller bästa resultat
    • inbyggd guide för hur man skapar race steg för steg
    • beskrivningar direkt i alla fält under Raceformat
    • Follow-up tid efter ordinarie racetid innan heatet stängs
    • Min varvtid och Max varvtid fö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 Raceformat för kort teknisk bana, klubbrace, IFMAR-liknande upplägg och endurance
    • schemaavvikelse på Översikt mellan planerad och faktisk körtid
    • sessionstyp Free Practice fö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 grid i grid-editorn per session
    • final-ranking över flera leg med räknade finalheat
    • valbar bump-up mellan 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 Timing fö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 lap och top 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
  • Live timing från AMMC WebSocket (msg: "PASSING")
  • Hanterad AMMC från webbgränssnittet:
    • backend kan starta/stoppa lokal ammc-amb på Windows, Linux och macOS
    • läser bundlade binärer från AMMC/windows64, AMMC/linux_x86-64, AMMC/apple_m
  • Redigering i UI:
    • Klasser, eventnamn/datum, förare och bilar kan redigeras direkt
    • förare och bilar har valfria brandfält för team, sponsor, märke eller modell
    • Förare och Bilar kan sökas på namn, transponder eller brand direkt i UI
    • startlistor och heatsheets tar med förarens brand i print, CSV och PDF-export
  • 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 (blipp eller tala förarnamn) och målgång
    • Sessioninställningar för Mass start, Position start, Staggered
    • Timing visar grid/startordning för aktiv Position start-session
    • leaderboard visar både gap till ledaren, gap till bilen framför och eget delta mot förra varvet
    • Senaste passeringar visar nu även ogiltiga varv med status För kort varv eller Över maxvarv
    • manuella korrigeringar i Tidtagning -> Detaljer: +1/-1 varv, +1/+5/-1 sek, Nollställ korrigering
    • Practice/Kval kan seedas på bästa 2 eller 3 varv i sessionsinställningar
  • Persistens:
    • Frontend state i browser (localStorage)
    • Samma state + passeringar sparas i lokal SQLite via Node-backend
  • 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 sek
  • Max varvtid = 60 sek

Ogiltiga passeringar

  • Tidtagning -> Senaste passeringar visar 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 Detaljer på en förare / ett lag
  • där finns:
    • +1 varv
    • -1 varv
    • +1 sek
    • +5 sek
    • -1 sek
    • Nollställ korrigering
  • korrigeringarna uppdaterar leaderboard och resultat direkt

Best laps / average / consecutive

  • Ställs per session med Seedmetod när Seed bästa varv är större än 0
  • tillgängliga lägen:
    • Bästa N varv, summa
    • Bästa N varv, snitt
    • Bä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

Poängtabeller och tie-break

  • Ställs i Race Setup -> Hantera -> Raceformat
  • poängtabeller för kval:
    • Placeringstal (1,2,3...)
    • Fallande efter fältstorlek
    • 10-9-8-7-6-5-4-3-2-1
  • tie-break för kvalranking:
    • Jämför räknade rundor
    • Bästa enskilda varv
    • Bä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 16s
    • Klubbrace kval + final
    • IFMAR-stil kval/final
    • Endurance / lagrace
  • efter applicering kan alla fält fortfarande justeras manuellt och sparas som vanligt
  • Spara klubb-preset lagrar egna lokala presets i appens state så de kan återanvändas på samma installation
  • Ta bort klubb-preset tar bort ett lokalt preset igen
  • Inställningar -> Klubb-presetar kan exportera/importera presetbiblioteket som JSON mellan installationer

Schemaavvikelse på Översikt

  • Översikt visar 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 varv markerar senaste räknade varv som manuellt ogiltigt
  • leaderboard, overlay och passings-historik uppdateras direkt
  • Återställ senaste manuellt ogiltiga varv lä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 -> Detaljer finns där som snabbknappar
  • filter för:
    • Alla
    • Ogiltiga
    • Korrigerade
    • Team race
  • domarloggen kan exporteras per session som JSON
  • både Ångra senaste och undo-knapp per loggrad finns för flera manuella åtgärder

Windows installation

Kör i PowerShell i projektmappen.

  1. Installera Node.js LTS (18+).
  2. Installera dependencies:
    npm install
    
  3. Starta servern i bakgrunden:
    npm start
    
  4. Ö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 start startar live_event i bakgrunden
  • npm stop stoppar processen via data/server.pid
  • npm restart startar om backend
  • npm run status visar om backend kör
  • npm run start:fg kör i foreground för felsökning

Windows scripts (bakgrundsstart)

Det finns färdiga .bat-filer i mappen windows/:

  • windows\\start_ammc.bat startar AMMC i bakgrunden
  • windows\\start_backend.bat startar npm start i bakgrunden (logg: logs\\backend.log)
  • windows\\start_all.bat startar både AMMC + backend och öppnar webbsidan
  • windows\\stop_all.bat stoppar backend på port 8081 och ammc-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.js körs.
  • Om du öppnar sidan från en annan laptop startas ingen AMMC där.
  • Fältet AMMC binär i Settings är en sökväg på backend-hosten, inte på klienten som surfar in.
  1. Lägg AMMC-binärerna i projektmappen AMMC/ (redan gjort i denna repo).
  2. Öppna Settings.
  3. Aktivera Hanterad AMMC / Managed AMMC.
  4. Sätt Decoder IP / host, kontrollera port 9000, spara.
  5. Klicka Starta AMMC / Start AMMC.
  6. Klicka Använd serverns WS-url / Use server WS URL så 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:

  1. Settings
  2. Sätt WebSocket URL till t.ex. ws://127.0.0.1:9000
  3. Sätt Backend URL till http://127.0.0.1:8081
  4. Klicka Test Backend
  5. Gå till Timing och klicka Connect 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.js och src/styles.css.
  • När du uppdaterar filer i Live_RC och 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"
}