2026-03-15 14:57:01 +01:00
2026-03-14 09:51:35 +01:00
2026-03-14 09:51:35 +01:00
2026-03-15 14:57:01 +01:00
2026-03-14 09:51:35 +01:00
2026-03-14 12:17:35 +01:00
2026-03-14 09:51:35 +01:00
2026-03-14 09:51:35 +01:00
2026-03-14 09:51:35 +01:00
2026-03-14 11:47:09 +01:00
2026-03-14 19:46:18 +01:00

JMK RB Live Event

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/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
    • 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
  • 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
    • 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
    • AMMC + npm setup på Windows och Linux
  • Språkval i UI: SV / EN

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_event 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"
}
Description
Live RC timesystem
Readme 214 MiB
Languages
JavaScript 90.4%
CSS 8.9%
HTML 0.4%
Batchfile 0.2%
C 0.1%