Проект для просмотра телеметрии F1 25 (PS5) с любого устройства в локальной сети:
- Прием UDP-пакетов от игры.
- Подсчет данных по кругам: live time текущего круга, best time, таблица кругов (номер, время, дельта, валидность) и так далее.
backend/— Node.js-сервер:- слушает UDP от игры;
- парсит нужные пакеты (минимум LapData);
- считает best lap, дельты и валидность;
- отдает данные по WebSocket и раздает статику из
public/.
public/— простой фронтенд:index.html— разметка;style.css— стили;app.js— подключение к WebSocket и отрисовка таблицы кругов.
- В демо-режиме (
npm run demo) сервер генерирует синтетические данные без подключения к игре.
- Live lap: показывает текущий круг из общего (
lap / total, если total известно), текущее время круга (live) иDelta vs best— отставание/опережение от личного лучшего круга (live, знак ±/−/+). - Best laps: персональный лучший круг и номер; лучший круг всей сессии и номер.
- Tyres: стек использованных шин (стинты, последняя — текущая), текущий комплект с возрастом в кругах, износ шин по колёсам (FL · FR · RL · RR, %).
- Race HUD: топливный запас/недостача относительно оставшихся кругов + режим топлива; заряд ERS и режим deploy; штрафы/предупреждения/необслуженные наказания.
- Race таблица: Pos, ΔPos (изменение позиции vs первое появление), Driver (с цветом команды), Lap time (последний завершённый круг; подсветка владельца лучшего круга), Ahead (разрыв до впереди), Leader (разрыв до лидера), Tyre (стек стинтов), Stops (кол-во питов), Pit (IN/BOX/P с временем, краткосрочно), S1/S2/S3 (сектора последнего завершённого круга; подсветка лучших секторов сессии). ΔPos не пересчитывается, pit-индикатор живёт ~10 секунд или до смены круга.
- Personal таблица: live-строка текущего круга и история кругов игрока: #, Lap time, Delta к личному лучшему, Tyre (стек), Pit (IN/BOX/P с временем), S1/S2/S3, Valid (OK/NO). Live-строка показывает S1/S2 сразу после закрытия сектора, S3 — только после финиша круга. Лучшие сектора считаются по валидным кругам; delta — к личному лучшему.
- Car: статусы и телеметрия машины (шины, топливо, управление, ERS, мощности, температуры, давления и т.п.).
- Всегда видны статус подключения и тип сессии.
-
Race
Pos: позиция в гонке.ΔPos: разница к первой зафиксированной позиции для этой машины (база не меняется при последующих апдейтах).Driver: имя + точка цвета команды.Lap time: последний завершённый круг (для time-attack — лучший), подсветка у владельца лучшего круга сессии.Ahead: разрыв до машины впереди (для P1 пусто); если нет данных ahead — считается через gap to leader.Leader: разрыв до лидера (для P1 пусто).Drv: статус пилота (только On track / Out-lap / In-lap / Flying) или короткий индикатор пит-лейна IN / BOX / P без времени.Tyre: стек стинтов машины (последняя — текущая).Stops: количество пит-стопов (из LapData numPitStops).Time pit: время на пит-лейне в секундах (без префиксов), показывается кратковременно после фиксации пит-стопа.S1/S2/S3: сектора последнего завершённого круга (SessionHistory, fallback LapData); подсветка — лучшие сектора среди отображаемых машин.
-
Personal
#: номер круга.Lap time: время круга.Delta: разница к личному лучшему кругу.Drv: статус пилота (только On track / Out-lap / In-lap / Flying) или краткий индикатор пит-лейна IN / BOX / P без времени.Tyre: стек стинтов на момент круга.Time pit: время на пит-лейне в секундах для этого круга (если фиксировалось), без префиксов.S1/S2/S3: сектора круга; в live-строке S1/S2 показываются сразу после закрытия сектора, S3 — только после финиша круга.Valid: OK/NO — валидность круга.
- Live vs Race сектора: Personal (live) показывает S1/S2 сразу после закрытия сектора, S3 только после финиша круга. Race берет S1/S2/S3 из последнего завершённого круга (SessionHistory), поэтому сектора в Race обновляются после финиша круга.
- Best-сектора Personal считаются по валидным завершённым кругам; best-сектора Race — минимумы среди отображаемых машин (подсветка фиолетовым).
- ΔPos в Race привязана к первой увиденной позиции машины и не пересчитывается.
- Pit-индикатор в Race показывается около 10 секунд или до смены круга; статус/время берутся из pit-lane таймера.
- Fuel/ERS/penalties: Fuel — запас/недостача в кругах vs оставшиеся круги + текущий режим топлива; ERS — процент заряда от константы и режим deploy; Penalties — сумма штрафов, предупреждений и необслуженных наказаний.
- Tyres: стек формируется по сменам шин; текущий комплект определяется по последнему стинту. Износ шин берется из CarDamage (packet 10), порядок FL · FR · RL · RR.
- Установить зависимости:
npm install
- Запустить сервер:
npm start
- (Опционально) Запустить демо-режим без игры:
npm run demo
- В игре F1 25 (PS5) указать IP вашего компьютера и UDP-порт, который будет слушать сервер.