Exporters / Forwarding

Exporters can be used to trigger the sending of data to external sources, this can be used to either send E-mail / SMS templates or export timing data to other systems such as third party timing software, tracking partners, LED clocks and more. 

Exporters include some built-in functionality for specific partners but it is designed to be fully flexible to support a wide range of uses.

The exporter runs on both online and offline versions of RACE RESULT 14, if you are working online and you are exporting to a local destination (e.g. local network IP address, Serial or File) then ensure to start the RACE RESULT Web Server on your computer. 

Configuración de Exportadores de Datos Brutos

Configuración de Exportadores

Cuando se inicia, un exportador enviará automáticamente los datos correspondientes al recibir un disparador válido. Se pueden configurar y ejecutar múltiples exportadores simultáneamente.

Los exportadores se envían para participantes individuales, por lo tanto, el disparador, el filtro y los datos siempre hacen referencia al registro individual del participante.

Nombre
Un nombre para el exportador.

Punto de cronometraje / Split
El disparador para el exportador.

  • Punto de cronometraje: cuando se recibe un registro de datos sin procesar para el punto de cronometraje seleccionado.
  • Split: cada vez que se calcula ese split (incluyendo recálculos posteriores por cualquier motivo).
  • Todos: cada vez que se recibe cualquier registro de datos sin procesar o se calcula cualquier split.

Filtro
Un filtro que se aplicará; también puede utilizar los Campos de datos sin procesar.

Destino
El tipo de exportación y configuraciones adicionales según el tipo.

Datos a exportar
Qué datos deben enviarse, ya sea en un formato predeterminado o mediante cualquier expresión personalizada.

Final de línea
El carácter de final de línea que se añadirá a cada registro enviado.

La sección adicional de [@43371|Configuración extendida] controla el flujo de datos.

Si deseas crear un formato de salida personalizado utilizando los datos sin procesar, puedes usar los [@7976|Campos de datos sin procesar]. Además, se pueden utilizar cualquier campo o función estándar en la exportación personalizada.

Si se utiliza la exportación a ARCHIVO, el nombre del archivo debe incluir la dirección completa de destino y el tipo de archivo. Por ejemplo:
C:\Users\Timer\Documents\Export.csv


Seguimiento (Tracking)

El reenvío de datos de seguimiento es compatible con varias plataformas específicas de terceros. Estas funcionan de manera similar a los exportadores, pero reenvían los datos en un formato predefinido según los requisitos de cada plataforma.

Algunas plataformas requieren además un ID de cliente para procesar los datos.

Extended Settings

The extended settings additionally control the behaviour of the exporter. 

Encoding - Either UTF-8 or ASCII.

Min. Seconds Between - Define a minimum time in seconds between each record being sent.

Max Queue Length - The maximum queue size allowed in the buffer, the buffer is first in, first out - so the earliest passings will be dropped if the queue reaches the maximum length. 

Ignore Before / Ignore After - Define a minimum and maximum time for passings to be exported. 

Connect Message - Define a custom message string which should be sent when starting the exporter (e.g. an authentication token).

Start in Paused Mode - If enabled then the exporter will be paused when started.

Default raw data exporters

This article lists all the default available exporters. Below shows the data format of each exporter as well as an example of its output.

Raw Data Record JSON

The Raw Data Record JSON mimics a Passing Record. It is a JSON struct with all relevant data, where the first part refers to information from RACE RESULT 14, and the last object refers to the actual passing raw data. 

Example output

{
    "ID":1,
    "Bib":50001,
    "TimingPoint":"STARTFINISH",
    "Result":-10,
    "Time":32795.944,
    "Invalid":false,
    "Passing":{
        "Transponder":"ZICAD30",
        "Position":{
            "Latitude":0,
            "Longitude":0,
            "Altitude":0,
            "Flag":""
            },
        "Hits":75,
        "RSSI":-75,
        "Battery":3,
        "Temperature":17,
        "WUC":6233,
        "LoopID":8,
        "Channel":8,
        "InternalData":"",
        "StatusFlags":128,
        "DeviceID":"D-50432",
        "DeviceName":"Support Decoder",
        "OrderID":0,
        "Port":0,
        "IsMarker":false,
        "FileNo":177,
        "PassingNo":1,
        "Customer":12345,
        "Received":"2024-01-12T09:07:43.15+01:00",
        "UTCTime":"2024-01-12T09:06:35.944Z"
        }
    }

 

Raw Data Record V2

The Raw Data Record V2 mimics a Passing Record from a RACE RESULT System. It does not include values for [<LoopOnly>] and [<InternalData>], however the structure is correct.

<PassingNo>;<Bib/TranspCode>;<Date>;<Time>;[<EventID>];<Hits>;<MaxRSSI>;
<InternalData>;<IsActive>;[<Channel>];[<LoopID>];[<LoopOnly>];[<WakeupCounter>];
[<Battery>];[<Temperature>];[<InternalActiveData>];<BoxName>;<FileNumber>;[<MaxRSSIAntenna>];<BoxId><CrLf>

Example output

7750;ZCMBG52;;10:50:00.477;0;72;127;;1;1;1;;16731;2,9;17;0;D-5662;;0;D-5662

 

Raw Data Record V1

The Raw Data Record V1 is a legacy version of a Passing Record. It does not write a data and it does not include [<LoopOnly>] (see |Decoder Communication Protocol) and hence moves all columns thereafter to the left by one column when compared to a full passing record. This format has been maintained to ensure backwards compatability for existing implementations (2023 and earlier).

<PassingNo>;<Bib/TranspCode>;<Date>;<Time>;[<EventID>];<Hits>;<MaxRSSI>;
<InternalData>;<IsActive>;[<Channel>];[<LoopID>];[<WakeupCounter>];
[<Battery>];[<Temperature>];[<InternalActiveData>];<BoxName>;<FileNumber>;[<MaxRSSIAntenna>];<BoxId><CrLf>

Example output

7750;ZCMBG52;;10:50:00.477;0;72;127;;1;1;1;16731;2,9;17;0;D-5662;;0;D-5662

 

Raw Data Record with Position

The Raw Data Record V1 with Position mimics the legacy version of a Passing Record but also adds in GPS position.

<PassingNo>;<Bib/TranspCode>;<Date>;<Time>;[<EventID>];<Hits>;<MaxRSSI>;
<InternalData>;<IsActive>;[<Channel>];[<LoopID>];[<WakeupCounter>];
[<Battery>];[<Temperature>];[<InternalActiveData>];<BoxName>;<FileNumber>;[<MaxRSSIAntenna>];<BoxId>;[RD_Latitude];[RD_Longitude]<CrLf>

Example output

7750;ZCMBG52;;10:50:00.477;0;72;127;;1;1;1;16731;2,9;17;0;D-5662;;0;D-5662;33.57663;-117.2486

 

Custom

See Custom Destination Data Fields for more information on setting up a custom exporter.

 

Raw Data Time

This exporter only exports the raw time of the passings in seconds.

<Time>

Example output

39000.477

 

RunScore RSBCI

"RSBCI," & if([RD_Transponder]<>"";[RD_Transponder];[RD_IDBib]) & "," & format([RD_Time];"hh:mm:ss.kkk") & "," & [RD_TimingPoint]
  • RSBCI - Text string "RSBCI"
  • [RD_Transponder] or [RD_IDBib] - Exports transponder if one is entered, otherwise exports bib
  • [RD_Time] - Exports raw time of the passing formatted to "hh:mm:ss.kkk"
  • [RD_TimingPoint] - Exports the TimingPoint name from RACE RESULT 14

Example output

RSBCI,ZCMBG52,10:50:00.477,START+FINISH

Tracking Location Forwarding

Exporters can also be used to send Raw Timing Data to Tracking Partners for use in tracking visualisation.

  • For passive timing data or active passings from a system which has a GPS location and is synced to GPS time then the reported GPS location of the system will be forwarded.
  • For USB Timing boxes, Loop Boxes in Store or Repeat Mode or systems without a GPS location then the Timing Point Position (according to the Timing Point Settings  is forwarded.

If there is no GPS location on the system and no Timing Point Position set then the data will be sent with no location, which some Tracking Visualisation setups will subsequently ignore.

Insertar base de datos

Los Exportadores de Datos Brutos actualmente admiten los tipos de bases de datos SQL y drivers ODBC para acceso mencionados más abajo, si necesita tipos de bases de datos adicionales, avísenos y podemos consultar la implementación. Si utiliza una base de datos que requiere drivers ODBC, primero asegúrese de que estos estén instalados en su computadora y que ODBC pueda crear una conexión a su base de datos.

Al configurar su exportador, deberá ingresar la configuración del servidor para su base de datos, estos aceptan diferentes strings dependiendo del tipo de base de datos.

MySQL: %USERNAME%:%PASS%@tcp(%HOSTNAME%:%PORT%)/%DATABASE%
MS-SQL:  server=%HOSTNAME%; user id=%USERNAME%; password=%PASS%; database=%DATABASE%; port=%PORT%;
PostgreSQL: postgresql://%USERNAME%:%PASS%@%HOSTNAME%:%PORT%/%DATABASE%?sslmode=disable
ODBC Drivers (e.g. Microsoft Access): Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Database.accdb

Para las conexiones de los drivers ODBC, deberá hacer referencia al string de conexión correcta para sus drivers instalados.

Algunos tipos de bases de datos pueden requerir configuraciones de seguridad adicionales para un nombre de usuario y contraseña, un buen recurso para esto está disponible en: https://www.connectionstrings.com/ 

Debe formatear la opción Datos a Exportar (en Exportadores + Seguimiento) utilizando la entrada Personalizada para formular una declaración de Insert como Expresión.

Por ejemplo para MS-SQL:

"INSERT INTO RawData (Chip, Time, TimingPoint) VALUES ('" & if([RD_Transponder]<>"";[RD_Transponder];[RD_IDBib]) & "', '" & format([RD_Time];"hh:mm:ss.kkk") &"', '" & [RD_TimingPoint] &"')"

 

Esto insertará en una tabla llamada "RawData", en los campos Chip, Tiempo y TimingPoint los campos Código de transpondedor o Código de chip, tiempo de datos brutos con el formato hh:mm:ss.kkk y el punto de cronometraje respectivamente. Para las bases de datos de Microsoft Access, los nombres de los campos deben estar entre corchetes.

 

Exporting Date & Time

Some platforms may require you to send the passing date and time, however currently RACE RESULT 14 does not store the passing date when the passing is saved to the database. To send dates and times correctly you will need to set the Timing Module to handle the times correctly according to Multi-Day Race settings.

To export date and time you can use the following formulas in your expression.

Date: ([EventDate]+int([RD_Time]/86400)) 
This requires the EventDate to be set in your files basic settings, it calculates how many days after the start date the passing was from and sends the corresponding date.

Time: format(([RD_Time]%86400);"hh:mm:ss.kkk")
This is the remainder of time after the time has been divided by 86400, the number of seconds in 24 hours, and so will always send the Time of Day. As the modal does not return milliseconds we must then append the milliseconds with a separate format. 

It is on our wishlist to save and use the passing date in the event file, however this solution should work for most cases so long as you setup the file correctly.

Sending E-mail / SMS

Exporters can be setup to send E-mail / SMS templates, for example sending finisher e-mails or SMS when a participant finishes. This functionality has replaced that of the Instant Push tool.

E-mail and SMS exporters can be triggered by either a Timing Point or a Split. When a time is received or calculated for the selected Timing Point or Split then the exporter will be triggered (if the filter is also valid). 

When sending E-mails / SMS via exporters the default filter for the template will be pre-loaded in to the exporter filter and the Set Checkbox Field will be set when the template is sent. 

Setup

Setting up an Exporter to send an E-mail / SMS template requires a name for the Exporter, a selected Timing Point or Split and the template to be sent. Optionally a filter can be applied which must also be true for the participant in order to send.

Once created the Exporter will be shown in the Chip Timing and Systems tabs where the exporter can be started, paused or stopped. When starting an exporter which is sending an SMS template you will be required to enter the username and password for your account as the sending of SMS will automatically deduct the credits from your account. 

When running Exporters can also be replayed, so this can be started even after the first data to be sent or replayed if an issue prevents messages from being sent. Exporters also observe the setting for Keep Timing Active, meaning that for long-running events they can be started and will remain running until the end of the event. 

Filters

Particularly when using a Timing Point trigger for exporters you may wish to setup a filter to ensure the time which is received should really trigger the sending of the data. For example if using the Finish Timing Point then you may wish to filter on [Finished].

For more complex filters you may wish to use the Raw Data Data Fields.

Campos de Datos de Destino Personalizados

Puede crear cualquier combinación de datos para el destino de acuerdo a sus requisitos. Puedes utilizar cualquiera de los campos de datos estándar de RACE RESULT 14 o los campos personalizados que se indican a continuación, los cuales están directamente relacionados con la pasada que activó el exportador. Los campos de datos deben estar entre corchetes, para unir los campos de datos debe usar '&', por ejemplo, para unir solo Transpondedor y Tiempo separados por un punto y coma, usted ingresaría - [RD_Transponder] & ";" & [RD_Time].

  • [RD_ID] - Un ID único para ese pase.
  • [RD_IDBib] - Si se usan transpondedores pasivos estándar, este es el código chip de la etiqueta.
  • [RD_Transponder] - Si utiliza transpondedores pasivos no estándar o transpondedores activos, esto devolverá el código del transpondedor.
  • [RD_Time] - El tiempo bruto del pase en segundos. Puede usar la función Time Format para mostrar esto en el formato requerido.
  • [RD_OrderID] - el OrderID del chip (solo pasivo).
  • [RD_Hits] - Número de veces que el transpondedor fue visto.
  • [RD_RSSI] - El máximo RSSI (intensidad) de la señal recibida del transpondedor.
  • [RD_ChannelID] - El Channel ID activo del punto de cronometraje (solo activo).
  • [RD_LoopID] - El Loop ID activo del punto de cronometraje (solo activo).
  • [RD_WakeupCounter] - La cuenta para despertar del transpondedor (solo activo).
  • [RD_Battery] - La tensión de la batería del transpondedor (solo activo).
  • [RD_Temperature] - Temperatura interna del transpondedor (solo activo).
  • [RD_StatusFlags] - Indica si el pase fue un pase almacenado en el transpondedor.
  • [RD_TimingPoint] - El nombre del TimingPoint en RACE RESULT 12.
  • [RD_DecoderName] - El nombre del decodificador si se ha sido asignado uno.
  • [RD_DecoderID] - El ID del dispositivo
  • [RD_Port] - El puerto de antena con máx. RSSI durante un paso (solo pasivo)
  • [RD_Latitude] / [RD_Longitude] - Las coordenadas de la detección, siempre y cuando el dispositivo de donde proviene proporciona coordenadas GPS.
  • [RD_IsMarker] - si esta lectura de pase se trata o no como un Marcador
  • [RD_FileNo] -indica el número de archivo de un Ubidium o decodificador
  • [RD_PassingNo] - el número de pase guardado en un archivo de pases
  • [RD_Customer] - el ID del cliente al que se ha subido el pase
  • [RD_Received] - la marca de tiempo con la zona horaria cuando el pase ha sido recibido por RACE RESULT 12
  • [RD_UTCTime] - la marca de tiempo del paso convertida a hora UTC

Los marcadores devuelven un código de transpondedor de -1 independientemente de la configuración del decodificador.

Exporter Commands

For TCP/IP exporters you can additionally send commands to the TCP socket to control exporters remotely when connected. 

Obtener Información

Para obtener información sobre el exportador envíe el siguiente comando:

GETINFO\n

La respuesta se ve así:

{
  "Command": "GETINFO",
  "Exporter": {
    "ID": 8,
    "Name": "PacketSender Home",
    "Filter": "",
    "TriggerTimingPoint": "",
    "TriggerResultID": 0,
    "DestinationType": "TCPIP",
    "Destination": "192.168.178.25:54696",
    "Data": "[RD_ID] \u0026 \";\" \u0026 if([RD_Transponder]\u003c\u003e\"\";[RD_Transponder];[RD_IDBib]) \u0026 \";;\" \u0026 format([RD_Time];\"hh:mm:ss.kkk\") \u0026 \";\" \u0026 [RD_OrderID] \u0026 \";\" \u0026 [RD_Hits] \u0026 \";\" \u0026 [RD_RSSI] \u0026 \";;\" \u0026 if([RD_LoopID]\u003e0;1;0) \u0026 \";\" \u0026 [RD_ChannelID] \u0026 \";\" \u0026 [RD_LoopID] \u0026 \";;\" \u0026 [RD_WakeupCounter] \u0026 \";\" \u0026 ([RD_Battery]/10) \u0026 \";\" \u0026 ([RD_Temperature]-100) \u0026 \";\" \u0026 [RD_StatusFlags] \u0026 \";\" \u0026 [RD_DecoderName]",
    "MTB": 0,
    "MQL": 0,
    "LineEnding": "LF",
    "OrderPos": 7000
  },
  "Paused": false,
}

Detener Comando

Este comando detiene al exportador en cualquier momento:

STOP\n

Respuesta normal:

{
  "Command": "STOP",
}

Respuesta de error:

{
  "Command": "STOP",
  "Error": "Some error message"
}

Pausar Comando

Este comando detiene al exportador en cualquier momento:

Comando

PAUSE\n

Responde con:

{
  "Command": "PAUSE",
  "Paused": true
}

Reanudar Comando

Este comando reanuda el exportador en cualquier momento:

Comando:

RESUME\n

Responde con:

{
  "Command": "RESUME",
  "Paused": false
}

Nota: si la conexión se interrumpe mientras está en modo "pausado", no se volverá a abrir a menos que haya nuevos datos para escribir. Si desea reanudar, debe esperar a que la conexión se restablezca.

Repetir Comando

Este comando le permite repetir la reproducción del exportador en cualquier momento:

Comando:

REPLAY\n

Respuesta normal:

{
  "Command": "REPLAY",
}

Respuesta de error:

{
  "Command": "REPLAY",
  "Error": "Some error message"
}