El servidor de control de concursos. Una sola aplicación de escritorio gestiona la competición en la red de su instalación: guarda las pruebas y los atletas, recibe los resultados en directo desde la aplicación de campo PolyField, controla las pantallas en directo, registra el viento, genera estadísticas y gráficos para redes sociales y (opcionalmente) publica los resultados en línea. Funciona en Windows y Mac; funciona en una red local.
Descargar desde polyfield.co.uk
PolyField Server es el centro de una competición de concursos. Se ejecuta en un único ordenador de la red de su instalación y hace cuatro cosas a la vez:
Todo funciona en la red local — no se necesita internet para gestionar una competición, pero sí para descargar las listas de salida desde los proveedores de gestión de competiciones y para enviar los resultados en tiempo real de vuelta a sus sistemas. Es posible una sincronización posterior al concurso para enviar todos los resultados de una vez.
Validación positiva. El servidor nunca inventa resultados — cada marca procede de un juez a través de la aplicación de campo. Esto mantiene una cadena clara, desde la medición en el círculo hasta lo que aparece en el marcador.
Abra la aplicación; el Panel es el puesto del operador. Inicie una competición de tres formas:
Una vez cargada, cada prueba aparece como una tarjeta en el panel que muestra su estado (No iniciada, En curso, Finalizada).
En cada dispositivo de campo, verifique la dirección del servidor en la aplicación de campo PolyField para conectarla al servidor. El juez selecciona entonces su prueba, calibra el EDM en el círculo o el pasillo y empieza a medir. Véase Los resultados y la aplicación de campo.
En cada pantalla, abra un navegador en la dirección del servidor y añada la página que desee — por ejemplo http://polyfieldserver.local:8080/tables. Use Pantallas en el panel para obtener enlaces con un clic y códigos QR a cada pantalla. Véase Las pantallas.
Consejo. Deje la aplicación de escritorio en el panel y gestione todo desde ahí. Los resultados llegan automáticamente desde la aplicación de campo mientras vigila el avance y las pantallas.

El panel enumera cada prueba y ofrece los controles principales. En la parte superior figuran la dirección del servidor (con un selector de red en máquinas con varias tarjetas) y el estado de los envíos o la sincronización pendientes. Las acciones clave:
| Control | Qué hace |
|---|---|
| Nueva competición | Borrar la competición actual y empezar de cero. |
| Crear nueva prueba | Añadir una prueba y sus atletas a mano. |
| Combinar pruebas | Combinar pruebas (p. ej. dos grupos de la misma disciplina) en una sola, o Combinar todas las pruebas iguales para combinar de una vez todas las parejas coincidentes. |
| Pantallas | Mostrar enlaces en los que se puede pulsar y códigos QR de cada página de pantalla (marcador, clasificaciones, locutor, RAZA). |
| Exportar gráficos | Generar los gráficos para redes sociales, los mapas de calor detallados y los gráficos de viento de la competición (véase Gráficos para redes sociales). |
| Exportar estadísticas | Generar el PDF de estadísticas de la competición (también en la página de Estadísticas). |
Seleccionar una prueba abre su vista de Resultados en directo, donde ve la serie de cada atleta, sigue la llegada de los intentos y consulta la clasificación.

Use Enlace de competición / importar para cargar una competición en lugar de escribirla:
Las pruebas importadas conservan su numeración y sus códigos de origen, de modo que coinciden con el programa publicado y con la exportación de resultados.

Los resultados se registran en el campo, no en el servidor. Cada prueba usa la aplicación de campo PolyField en un dispositivo Android:
A medida que llegan los resultados, la tarjeta de la prueba se actualiza, las clasificaciones se recalculan y cualquier pantalla conectada se actualiza al instante.


El servidor sirve cuatro páginas de pantalla en directo. Cada una es una página web normal — ábrala en cualquier navegador de la red; no se instala nada en la pantalla. Todas se actualizan automáticamente: los nuevos resultados se envían en el momento en que llegan, con un sondeo periódico como red de seguridad, de modo que una pantalla nunca necesita refrescarse.
| Página | URL |
|---|---|
| Marcador de resultados (últimos resultados) | / |
| Clasificaciones de pruebas (tablas) | /tables |
| Canal del locutor | /announcer |
| Clasificaciones RAZA (para-atletismo) | /raza |
Un gran marcador de las actuaciones más recientes, con el atleta, la prueba, la marca y — para lanzamientos — una visualización de la caída. Ideal como pantalla principal de resultados para el público.

Las clasificaciones en directo, varias pruebas a la vez, cada una ordenada con resaltados oro/plata/bronce. El diseño se adapta a la altura: llena la pantalla, apila más pruebas en pantallas altas o en modo vertical, y cuando una prueba tiene muchos atletas los recorre página a página. Las pruebas también van rotando para que cada prueba del programa aparezca en pantalla.

Un canal de resultados a medida que llegan — el más reciente arriba, con el puesto, el atleta, el club, la prueba y la marca — dimensionado para leerse de un vistazo desde un puesto de locutor o de comentarios.

Clasificaciones de para-atletismo calculadas con el sistema de puntos World Para Athletics (RAZA), para comparar en un mismo marcador a atletas de clasificaciones distintas. Debe estar definida una clasificación y un género para que se calcule una puntuación RAZA.

PolyField Server lee los anemómetros a través de la red y registra el viento durante toda la jornada de competición. Es compatible con el Gill WindSonic 75 y el PolyField Wind Mini, y detecta el tipo de anemómetro automáticamente a partir de su flujo de datos — no hay ningún protocolo que elegir. Añada un anemómetro con su dirección de red; en cuanto emite, el servidor muestra el modelo detectado y empieza a registrar.

La página Estadísticas convierte los datos de la competición en análisis:
Los gráficos y los mapas de calor se adaptan al ajuste de tamaño de pantalla para que sigan siendo legibles en la pantalla del operador.

Exportar gráficos genera un conjunto de imágenes cuadradas (1080 × 1080) listas para publicar, todas con un estilo PolyField coherente:
Los gráficos solo se generan para las pruebas que se han disputado, y cada tarjeta lleva la fecha de la competición y la identidad visual de PolyField.


Opcionalmente, el servidor publica los resultados en la nube de PolyField para que el público pueda seguirlos en línea en results.polyfield.co.uk. Se pueden enviar dos cosas, cada una activable en los Ajustes:
Los envíos se ponen en cola y se reintentan, de modo que una breve pérdida de internet no pierde datos — la competición en sí sigue funcionando en la red local en cualquier caso.
Enlace de competición es donde conecta los proveedores de gestión de competiciones al servidor. Ofrece los controles de importación de OpenTrack / Athletics.app para cargar las pruebas.


polyfieldserver.local, de modo que los dispositivos de campo y las pantallas pueden usar http://polyfieldserver.local:8080 sin conocer la dirección IP. Algunos dispositivos Android requieren la dirección IP completa; en ese caso puede usar http://192.168.0.10:8080 sustituyendo 192.168.0.10 por la dirección del servidor que se muestra en el panel.Si algo va mal, use el informe de diagnóstico. Reúne la competición actual (que el soporte puede reproducir), los registros y los datos de viento del día en un único archivo zip, y rellena previamente un correo a support@polyfield.co.uk. Adjunte el archivo guardado antes de enviarlo. El mismo archivo puede servir para recuperar una competición si hay que cambiar de máquina a mitad del concurso.

| Síntoma | Qué comprobar |
|---|---|
| Un dispositivo de campo no se conecta | Compruebe que está en la misma red, que el puerto 8080 es accesible y (PC con varias tarjetas) que está seleccionada la tarjeta de red correcta en la parte superior del panel. Asegúrese de que su cortafuegos no bloquee PolyField Server. |
| Una importación devuelve 0 pruebas | Puede que la competición de origen aún no tenga inscritos, o que esté seleccionada otra competición. Compruebe que las listas de salida se han publicado. |
| Una pantalla no se actualiza | Las páginas se actualizan solas; si una se queda congelada, refrésquela una vez. Compruebe que apunta a la dirección actual del servidor. Las pantallas muestran la hora actual y el texto «LIVE» cuando están conectadas, para ayudar a verificarlo. |
| Un anemómetro no muestra ninguna lectura | Compruebe la dirección de red del anemómetro, que está encendido y emitiendo; el modelo se detecta automáticamente en cuanto llegan datos. El anemómetro muestra un estado En línea / Sin conexión en el servidor. |
| El marcador RAZA está vacío | Debe estar definida una clasificación y un género para que se calcule una puntuación RAZA. |
| Los resultados parecen desordenados o falta una ronda | Cada resultado lleva la marca de tiempo de la aplicación de campo; asegúrese de que los dispositivos de campo están en la prueba correcta y actualizados. Verifique que el reloj del dispositivo de campo y del servidor es correcto; puede desviarse con un uso sin conexión prolongado. |
Descargue la última versión desde www.polyfield.co.uk o la página de versiones. La aplicación busca actualizaciones al iniciarse y muestra un aviso cuando hay una versión más reciente disponible. Soporte: support@polyfield.co.uk.
PolyField Server expone una API sencilla en HTTP + JSON para que otro software en la red del recinto — marcadores, gráficos de retransmisión, widgets de pantalla personalizados o un archivo de resultados — pueda leer la competición en directo y, cuando corresponda, enviar datos. Está diseñada solo para la red local (LAN): el servidor escucha en el puerto 8080 en http://polyfieldserver.local:8080 (o la IP del host, p. ej. http://192.168.0.10:8080), en HTTP simple, sin autenticación — confía en todos los dispositivos de la red del recinto. Mantenga esa red privada; no exponga el puerto 8080 a Internet. Cualquier integración orientada a la WAN / Internet (acceder al servidor desde fuera del recinto, o publicar más allá de los resultados en la nube ya integrados) requiere una ruta segura y autenticada y debe consultarse primero con nosotros — contacte con support@polyfield.co.uk antes de desarrollar contra una dirección pública.
Todos los puntos de acceso siguientes llevan el prefijo /api/v1. Las lecturas son GET, devuelven application/json y se actualizan en el instante en que llega un resultado. Para mantenerse en directo, abra el flujo Server-Sent Events GET /api/v1/stream y vuelva a leer el flujo que le interese cada vez que emita un evento update (o sondee cada uno o dos segundos).
| Método | Ruta | Función |
|---|---|---|
| GET | /api/v1/events |
Listar todas las pruebas (id, nombre, tipo) |
| GET | /api/v1/events/{id} |
Prueba completa: atletas, todos los intentos, calibración, validación |
| GET | /api/v1/broadcast/recent |
Los últimos 10 intentos, más recientes primero, con coordenadas de caída |
| GET | /api/v1/display/standings |
Clasificaciones ordenadas de todas las pruebas |
| GET | /api/v1/athlete/active/{eventId} |
Saltador horizontal actual: tabla + mejores marcas |
| GET | /api/v1/stream |
Señal de actualización en directo (Server-Sent Events) |
| POST | /api/v1/results |
Enviar los intentos de un atleta (ingesta de la app de campo) |
| POST | /api/v1/athlete/active |
Anunciar el saltador horizontal actual |
Las marcas son cadenas de texto para poder contener resultados no numéricos: una distancia/altura como "54.37", o "NM" (nulo), "X" (altura fallada), "P"/"-" (paso). wind es una cadena en metros por segundo (p. ej. "+1.2") o ausente. Las coordinates de los lanzamientos incluyen tanto la caída en bruto (x, y) como las rx/ry giradas y relativas al centro del círculo, en metros.
GET /api/v1/events
[
{ "id": "T01", "name": "F09 O Discus Throw", "type": "Throws" },
{ "id": "T02", "name": "F03 O Long Jump", "type": "Horizontal Jumps" }
]
type es uno de Throws, Horizontal Jumps o Vertical Jumps.
GET /api/v1/events/{id}
{
"id": "T01",
"name": "F09 O Discus Throw",
"type": "Throws",
"status": "In Progress",
"rules": { "attempts": 6, "cutEnabled": false, "cutQualifiers": 0 },
"signedOff": true,
"signedOffBy": "A. Referee",
"signedOffAt": "2026-09-24T17:55:00+01:00",
"calibrationMetadata": {
"circleType": "DISCUS",
"circleRadius": 1.25,
"sectorLines": { "rightLine": { "x": 6.18, "y": 19.64 }, "leftLine": { "x": -6.18, "y": 19.64 }, "sectorAngle": 34.92 }
},
"athletes": [
{
"bib": "1", "order": 1, "name": "Dillon Claydon", "club": "Blackheath & Bromley HAC",
"series": [
{
"attempt": 1, "mark": "54.37", "unit": "m", "valid": true, "wind": null,
"coordinates": { "x": -1.54, "y": 19.08, "distance": 54.37, "round": 1, "attempt": 1, "valid": true, "rx": 1.68, "ry": 55.61 }
}
]
}
]
}
GET /api/v1/broadcast/recent — los 10 intentos más recientes, más recientes primero.
{
"results": [
{
"eventId": "T01", "eventName": "F09 O Discus Throw", "eventType": "Throws",
"athleteBib": "1", "athleteName": "Dillon Claydon", "athleteClub": "Blackheath & Bromley HAC",
"athleteBest": "55.80", "attempt": 3, "mark": "55.80", "unit": "m", "wind": null, "valid": true,
"timestamp": "2026-09-24T17:54:44+01:00",
"sectorLines": { "rightLine": { "x": 6.18, "y": 19.64 }, "leftLine": { "x": -6.18, "y": 19.64 }, "sectorAngle": 34.92 },
"coordinates": { "x": 41.7, "y": -36.5, "distance": 55.80, "round": 3, "attempt": 3, "valid": true, "rx": 0.90, "ry": 57.04 }
}
]
}
Los saltos verticales usan height y attemptsAtHeight (p. ej. "XXO") en lugar de una distancia; los saltos horizontales incluyen wind; los lanzamientos incluyen sectorLines + coordinates.
GET /api/v1/display/standings
{
"events": [
{
"id": "T01", "name": "F09 O Discus Throw", "type": "Throws",
"athletes": [
{ "position": 1, "name": "Dillon Claydon", "club": "…", "bestMark": "55.80", "unit": "m", "wind": null }
]
}
]
}
GET /api/v1/athlete/active/{eventId} — quién salta ahora en una prueba de salto de longitud/triple salto, para una pantalla de regla de tabla de batida. Devuelve {"active": null} entre atletas.
{
"active": {
"eventId": "T02", "athleteBib": "11", "athleteName": "Jack Gunnell",
"board": 0, "topPerformances": [7.34, 7.28, 7.12],
"updatedAt": "2026-09-24T17:39:40+01:00"
}
}
board es la tabla de batida en metros — 7, 9, 11 o 13 en triple salto; 0 es la tabla de salto de longitud. topPerformances son las mejores marcas legales del atleta hasta ahora en esa prueba, la mejor primero, como máximo tres.
GET /api/v1/stream es un flujo de Server-Sent Events, no un cuerpo JSON. Al conectar, envía una línea de comentario y luego un simple mensaje update cada vez que cambian los datos de la competición, además de pings de mantenimiento en una conexión inactiva. Trate cualquier update como «algo cambió — vuelva a leer el flujo que muestra».
: connected
data: update
: ping
Consúmalo con un EventSource estándar (navegador) o cualquier cliente SSE; no hay contenido que analizar — el token update es toda la señal.
Dos puntos de acceso POST aceptan JSON. La app de campo usa ambos; cualquier ingesta de terceros debe acordarse primero con nosotros.
POST /api/v1/results — los intentos de un atleta (toda la serie actual de ese atleta; reemplaza lo que el servidor tiene):
{
"eventId": "T01",
"athleteBib": "1",
"series": [
{ "attempt": 1, "mark": "54.37", "unit": "m", "valid": true, "wind": null }
],
"heatmapCoordinates": [
{ "x": -1.54, "y": 19.08, "distance": 54.37, "round": 1, "attempt": 1, "valid": true }
],
"calibrationMetadata": { "circleType": "DISCUS", "circleRadius": 1.25, "sectorLines": { "rightLine": { "x": 6.18, "y": 19.64 }, "leftLine": { "x": -6.18, "y": 19.64 }, "sectorAngle": 34.92 } }
}
POST /api/v1/athlete/active — una señal de «saltando ahora», enviada sin esperar respuesta (tabla en metros, 0 = tabla de salto de longitud; topPerformances la mejor primero, ≤3):
{ "eventId": "T02", "athleteBib": "11", "athleteName": "Jack Gunnell", "board": 11.0, "topPerformances": [7.65, 7.42, 7.30] }
Ambos devuelven 200 con un pequeño acuse de recibo JSON. El estado del atleta activo es transitorio (solo en memoria, borrado al reiniciar); todo lo demás está respaldado por la competición guardada.