Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

F1 25 Telemetry Dashboard

A live web dashboard for EA SPORTS F1 25 UDP telemetry. Python receives UDP from the game, decodes it, and streams JSON to a browser over a WebSocket. Built per SKILL.md.

F1 25 (PC) --UDP 20777--> server.py --WebSocket 8765--> browser dashboard

Run

python3 server.py

Then open http://localhost:8000 in a browser.

Requires websockets and pandas/pyarrow (pip3 install websockets pandas pyarrow).

The server kills any previous instance holding its ports on startup, so you can just re-run it — no more "address already in use".

Logging (always on)

Every run records the full session — all 22 cars, all telemetry, laps, and sectors — to logs/session_<UTC timestamp>.parquet. Disable with LOG=0 python3 server.py for a dashboard-only run.

Replay

Play a logged session back through the same dashboard:

python3 replay.py                          # most recent session
python3 replay.py logs/session_X.parquet   # a specific file

Open http://localhost:8000; a control bar appears with play/pause, a seek scrubber, and speed (0.25x–4x). Gauges, map, traces, and sector colors all replay exactly as they appeared live.

Sector colors (purple / green / yellow)

When a lap completes, each sector is colored by the standard sim-racing convention, both live and in replay:

  • purple — fastest that sector has been all session
  • green — a personal best for that sector (reserved; see note)
  • yellow — slower than your best

Note: in a single-driver session, the session-best and personal-best are the same reference, so sectors are purple (new best) or yellow (not). Green is wired in for future multi-reference use (e.g. comparing against an AI car).

In-game setup

Options → Settings → UDP Telemetry Settings

Setting Value
UDP Telemetry On
UDP IP Address this machine's local IP (ipconfig getifaddr en0)
UDP Port 20777
UDP Send Rate 20–60 Hz
UDP Format 2025

If the game runs on the same Mac as the server, the IP can be 127.0.0.1. Telemetry only flows while you're on track (Time Trial / Practice / a session) — menus send nothing.

Panels

  • Core driving — gear, speed, RPM, rev-light strip, throttle/brake/steer, DRS, pit, lap-valid (CarTelemetry, packet 6)
  • Lap & timing — current/last lap, sectors, position, lap number, gap ahead, lap progress (LapData, packet 2)
  • Tyres & temps — per-wheel surface/inner temp + pressure, color-coded (CarTelemetry, packet 6)
  • Track map — draws a live trail that grows as you drive (no full lap required), with a yaw-rotated car marker + g-force (Motion, packet 0)
  • Throttle · Brake — the in-game telemetry trace: green throttle line and red brake line (each 0–100%), responsive to your pedals (CarTelemetry, packet 6)

Files

File Purpose
server.py UDP receiver, packet decoders, WebSocket + HTTP server
static/index.html dashboard layout and styling
static/dashboard.js WebSocket client, gauges, minimap rendering
main.py original minimal byte-count listener (sanity check)

Ports

  • 20777 UDP — telemetry in (match the game)
  • 8765 WebSocket — server → browser
  • 8000 HTTP — serves the dashboard

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages