PolyField Server

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

Resumen

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.

Cómo funciona

Primeros pasos

1. Cargar una competición

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).

2. Conectar la aplicación de campo

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.

3. Abrir las pantallas

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.

Ventana Pantallas — enlaces y códigos QR de cada pantalla

El panel

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.

El panel de PolyField Server

Importar pruebas

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.

Importar una competición

Los resultados y la aplicación de campo

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.

Resultados en directo — tabla de resultados

Resultados en directo — mapa de calor de caídas

Las pantallas

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

Marcador de resultados

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.

Marcador de resultados

Clasificaciones de pruebas

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.

Pantalla de clasificaciones de pruebas

Locutor

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.

Canal del locutor

Clasificaciones RAZA

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.

Pantalla de clasificaciones RAZA

Anemómetros

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 de Anemómetros

Estadísticas y mapas de calor

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.

Estadísticas — mapa de calor de caídas de un lanzamiento

Gráficos para redes sociales

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.

Ejemplo de tarjeta de prueba exportada

Gráfico de viento para redes sociales (exportado)

Resultados en línea — en pruebas

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.

Enlace de competición — dirección del servidor y código QR

Ajustes, tamaño de pantalla e idioma

Ajustes

Red

Diagnóstico

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.

Informe de diagnóstico

Solución de problemas

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.

Descarga y soporte

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.

Integración de la API

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.

Lista de pruebas

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.

Detalle completo de la prueba

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 }
        }
      ]
    }
  ]
}

Flujo de los últimos resultados

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.

Clasificaciones

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 }
      ]
    }
  ]
}

Saltador horizontal actual

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.

Actualizaciones en directo (stream)

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.

Envío de datos

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.