Respostes a les preguntes més comunes sobre LFS-Ayats.
R: LFS-Ayats requereix Python 3.8 o superior. S’ha provat amb Python 3.8, 3.9, 3.10, 3.11 i 3.12.
python --version # Ha de mostrar 3.8+
R: A Live for Speed:
29999 (o el que vulguis)R: Les dades es guarden a la carpeta ./data/ per defecte. Pots canviar-ho a config.yaml:
export:
output_directory: "./my_data"
R: No directament. Necessites LFS en execució per rebre telemetria. Tanmateix, pots:
R:
cd LFS-Ayats
git pull origin main
pip install -r requirements.txt --upgrade
pip install -e .
R: Verifica que:
# Comprova si LFS està obert
ps aux | grep LFS # Linux/Mac
tasklist | findstr LFS # Windows
InSim està activat a Options > Misc
client = InSimClient(host="127.0.0.1", port=29999)
# Linux: Permet port 29999
sudo ufw allow 29999/tcp
# Windows: Afegeix excepció al Windows Firewall
R: Comprova:
ping 127.0.0.1
Sistema no està en suspensió: Desactiva sleep mode
insim:
heartbeat_interval: 30 # segons
logs/ per errors específicsR: Especifica l’adreça IP del servidor:
client = InSimClient(
host="192.168.1.100", # IP del servidor LFS
port=29999,
admin_password="mypassword" # Requerit per servidors remots
)
Nota: El servidor LFS ha de tenir InSim configurat per acceptar connexions externes.
R: LFS suporta fins a 8 connexions InSim simultànies per defecte. Cada instància de LFS-Ayats compta com una connexió.
R: Assegura’t que:
insim:
interval: 100 # milliseconds
Vehicle en moviment: InSim no envia dades si el cotxe està aturat
collector = TelemetryCollector(client)
collector.start() # No oblidis iniciar!
R: Verifica:
Versions d’InSim compatibles: LFS 0.6V o superior
telemetry:
speed_unit: "kmh" # o "mph", "ms"
temperature_unit: "celsius"
Calibració: Compara amb indicadors in-game
processor = TelemetryProcessor()
valid = processor.validate_speed(speed)
R:
Intervals massa curts poden sobrecarregar el sistema.
R:
# Filtrar per player_id
telemetry = collector.get_latest_telemetry(player_id=1)
# Filtrar per nom
history = collector.get_telemetry_history()
player_data = [t for t in history if t['player_name'] == 'MyName']
R: Sí! El paquet IS_MCI (Multi Car Info) proporciona dades de fins a 8 cotxes simultàniament. LFS-Ayats processa automàticament tots els vehicles a la pista.
R: Comprova:
# Linux/Mac
lsof -i :8050
# Windows
netstat -ano | findstr :8050
pip install dash plotly
http://localhost:8050https://dashboard.run(debug=True) # Mostra errors detallats
R:
dcc.Interval(interval=100) # milliseconds
@app.callback(...)
def update_graph(n):
# Codi d'actualització
get_latest_telemetry() retorna dadesR:
app.layout = html.Div([
# ...
], style={
'backgroundColor': '#1e1e1e', # Fons fosc
'color': '#ffffff' # Text blanc
})
# O utilitza temes predefinits
import dash_bootstrap_components as dbc
app = dash.Dash(external_stylesheets=[dbc.themes.DARKLY])
R: Sí!
fig = create_speed_vs_distance_plot(telemetry)
# PNG
fig.write_image("graph.png", width=1200, height=600)
# SVG (escalable)
fig.write_image("graph.svg")
# HTML interactiu
fig.write_html("graph.html")
Nota: Necessita kaleido instal·lat: pip install kaleido
R:
SQLite (Recomanat per començar):
PostgreSQL (Recomanat per producció):
R:
sqlite3 telemetry.db .dump > dump.sql
engine = create_engine('postgresql://user:pass@localhost/lfs_telemetry')
alembic upgrade head
psql -U user -d lfs_telemetry < dump.sql
R:
SQLite:
# Còpia simple
cp data/telemetry.db backups/telemetry_$(date +%Y%m%d).db
# Amb compressió
tar -czf telemetry_backup.tar.gz data/telemetry.db
PostgreSQL:
# Backup complet
pg_dump lfs_telemetry > backup_$(date +%Y%m%d).sql
# Backup comprimit
pg_dump lfs_telemetry | gzip > backup.sql.gz
# Restore
psql lfs_telemetry < backup.sql
R: Optimitzacions:
# Mantenir només últimes 1000 voltes
repo.delete_old_sessions(keep_last=1000)
# Mostrejar dades antigues (guardar 1 de cada 10 punts)
repo.downsample_old_telemetry(older_than_days=30, factor=10)
sqlite3 telemetry.db "VACUUM;"
-- Partir taula per dates
CREATE TABLE telemetry_2024_01 PARTITION OF telemetry
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
R: Amb el servidor en execució:
R: L’API requereix autenticació per alguns endpoints:
import requests
headers = {"Authorization": "Bearer YOUR_TOKEN"}
response = requests.get(
"http://localhost:8000/api/v1/sessions",
headers=headers
)
Obté token amb:
response = requests.post(
"http://localhost:8000/api/v1/auth/token",
data={"username": "user", "password": "pass"}
)
token = response.json()["access_token"]
R:
Python:
import asyncio
import websockets
async def stream_telemetry():
uri = "ws://localhost:8000/api/v1/telemetry/live"
async with websockets.connect(uri) as websocket:
while True:
data = await websocket.recv()
print(f"Received: {data}")
asyncio.run(stream_telemetry())
JavaScript:
const ws = new WebSocket('ws://localhost:8000/api/v1/telemetry/live');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Telemetry:', data);
};
R: Per defecte:
Configurable a config.yaml:
api:
rate_limit:
get: 100
post: 50
R: Optimitzacions:
collector = TelemetryCollector(client, max_history=5000)
collector.clear_history()
Utilitzar base de dades en lloc de memòria
insim:
interval: 200 # menys freqüent = menys memòria
R:
dcc.Interval(interval=500) # 500ms en lloc de 100ms
history = collector.get_telemetry_history(limit=100)
Simplificar gràfics: Menys punts, menys traces
@lru_cache(maxsize=128)
def get_processed_data():
# ...
R:
import psutil
import time
def monitor_performance():
process = psutil.Process()
print(f"CPU: {process.cpu_percent()}%")
print(f"Memory: {process.memory_info().rss / 1024 / 1024:.1f} MB")
print(f"Threads: {process.num_threads()}")
# Executar periòdicament
while True:
monitor_performance()
time.sleep(60)
R: Instal·la el paquet en mode desenvolupament:
pip install -e .
O afegeix al PYTHONPATH:
export PYTHONPATH="${PYTHONPATH}:$(pwd)" # Linux/Mac
set PYTHONPATH=%PYTHONPATH%;%CD% # Windows
R: Els tests unitaris utilitzen mocking. Assegura’t que:
# Executar només tests que no requereixen connexió
pytest -m "not network"
# Ignorar tests d'integració
pytest tests/unit/
R:
Comprova consola del navegador (F12) per errors JavaScript
app = dash.Dash(__name__)
# Afegir layout i callbacks abans de run_server()
app.run_server(debug=True)
R: Problema amb certificats HTTPS. Solucions:
# Opció 1: Actualitzar certificats
pip install --upgrade certifi
# Opció 2: Desactivar verificació (NO recomanat per producció)
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
R:
from src.utils import setup_logger
# Nivells: DEBUG, INFO, WARNING, ERROR, CRITICAL
logger = setup_logger("my_module", level="DEBUG")
O a config.yaml:
logging:
level: DEBUG
file: "logs/lfs_ayats.log"
R: Obre un issue a GitHub amb:
level="DEBUG")pip list)Si tens més preguntes, no dubtis en obrir un issue o iniciar una discussió! 🤝