Home Bedienungsanleitung Die Datenschnittstelle

Die Datenschnittstelle

Diese Funktion ist Teil des SmartRace Champions Clubs. Das ist ein großes Paket mit coolen Erweiterungen, die Du auf Wunsch in Form eines monatlichen oder jährlichen Abos bequem in der App hinzu buchen und natürlich jederzeit wieder kündigen kannst. Mehr erfahren.

Wichtiger Hinweis: Die Nutzung der Datenschnittstelle erfordert Programmierkenntnisse. Damit Du die Daten, die die Schnittstelle liefert, verarbeiten kannst, brauchst Du einen Webserver, der die Daten entgegennimmt. Wenn Du nicht programmieren kannst oder nicht weißt, wie man einen Webserver aufsetzt, ist die Datenschnittstelle wahrscheinlich nicht das Richtige für Dich.

Was ist die Datenschnittstelle?

Die Datenschnittstelle bietet Dir die Möglichkeit, externe Dienste oder Scripts an SmartRace anzubinden. Dazu sendet SmartRace auf Wunsch bestimmte Daten an einen konfigurierbaren Endpunkt und Du kannst diese Daten nach Belieben weiterverarbeiten. Die Daten werden dabei als POST-Request im JSON-Format gesendet.

Die Datenschnittstelle ist Endpunkt-agnostisch, richtet sich also nicht an bestimmte Endpunkte mit bestimmtem Datenformat. Was Du mit den Daten tust, ist alleine Deine Entscheidung.

Aktivierung und Konfiguration

Die Datenschnittstelle ist standardmäßig nicht aktiviert. Um sie zu aktivieren, gehe im Hauptmenü von SmartRace auf Einstellungen und öffne den Reiter Datenschnittstelle. Über den Schalter ganz oben kannst Du die Schnittstelle einschalten, zusätzlich musst Du allerdings noch die Ereignisse aktivieren, die die Datenschnittstelle berücksichtigen soll. Welche Daten in den einzelnen Ereignissen enthalten sind, erfährst Du weiter unten.

Konfiguration der Datenschnittstelle

Die verschiedenen Ereignisse

Du kannst auswählen, bei welchen Ereignissen die Datenschnittstelle Daten senden soll. Jeder Ereignis-Typ löst bei verschiedenen Aktionen in SmartRace aus. Welche Aktionen das sind, sieht Du im Folgenden:

  • Runde: Ein Fahrzeug beendet eine Runde. Die erste Überfahrt von Start-/Ziel löst dieses Ereignis nicht aus.
  • Event: Ein neues Event (Qualifying/Rennen) wird gestartet oder beendet oder der Event-Status ändert sich (z.B. Unterbrechung, Fehlstart, etc.)
  • Wetter: Wetteränderungenen und Änderungsankündigungen („es wird bald regnen“, etc.)
  • VSC: Aktivieren und Deaktivieren des virtuellen Safety-Cars.
  • Strafe: Erteilen und Absitzen von Strafen
  • Schaden: Erhalten und Reparieren von Schäden
  • Tanken: Updates zum Tankinhalt
  • Boxenstopps: Reifenwechsel und Ein-/Ausfahrt in die Box
  • Verschiedenes: Verschiedene Informationen und Ereignisse (siehe unten)

Gesendete Daten

Die Struktur der gesendeten Daten ist für jedes Ereignis identisch und so aufgebaut:

{
  "time": 1684769957969, // Uhrzeit des Ereignisses als Unix-Timestamp
  "event_type": "ui.lap_update", // Name des Ereignisses
  "event_data": {
      // Die Daten des Ereignisses, siehe unten
  }
}

Manche Datensätze enthalten ein Attribut event_id. Dieses Attribut wird dynamisch beim Starten eines neuen Events (Rennen, Qualifying) generiert und an nachfolgende Ereignisse weitergereicht, so dass sie entsprechend diesem Event zugeordnet werden können.

ui.lap_update

{
    "controller_id": "1",
    "lap": 1,
    "laptime": "0:13.861",
    "laptime_raw": 13861,
    "sector_1": "0:06.305",
    "sector_1_pb": true,
    "sector_2": "0:03.224",
    "sector_2_pb": true,
    "sector_3": "0:04.332",
    "sector_3_pb": true,
    "lap_pb": true,
    "driver_data": {
        "id": 2,
        "name": "Marc",
        "name_tts": "",
        "active": "yes",
        "start_no_text_style": "normal",
        "team": "-",
        "name_short": null,
        "image": "",
        "start_no": "",
        "start_no_color_border": "rgb(68, 68, 68)",
        "start_no_color_background": "rgb(68, 68, 68)",
        "start_no_color_text": "rgb(68, 68, 68)"
    },
    "car_data": {
        "color": "rgb(176, 243, 0)",
        "brakes": null,
        "active": "yes",
        "tags": "[]",
        "decoder_type": "Carrera (default)",
        "image": "cdvfile:\/\/localhost\/persistent\/1684000048302.jpg",
        "laps": 5,
        "fuel": null,
        "speed": null,
        "tyres": "Ortmann",
        "digital_analog": "digital",
        "name": "Porsche 911 RSR Grello (911)",
        "manufacturer": "Carrera",
        "id": 40,
        "interval_counter": 0,
        "scale": "1:24",
        "magnets": "yes",
        "logo": "porsche.png",
        "changed_on": null,
        "interval": 0,
        "sound": "-",
        "comment": ""
    },
    "controller_data": {
        "color_bg": "rgb(176, 243, 0)",
        "color_text": "#000"
    }
}

event.start

Beim Starten eines Rundenrennens über 50 Runden:

{
    "type": "race",
    "laps": "50"
}

Beim Starten eines Zeitrennens über 10 Minuten (600 Sekunden):

{
    "type": "race",
    "duration": "600"
}

event.end

Die Daten enthalten alle Teilnehmer, hier beispielhaft mit drei Teilnehmern:

{
    "type": "race",
    "result": {
        "1": {
            "driver_id": 2,
            "car_id": 39,
            "controller_id": 1,
            "laps": 33,
            "best_laptime": 4915,
            "pitstops": 0,
            "gap": "",
            "disqualified": false,
            "retired": false
        },
        "2": {
            "driver_id": 2,
            "car_id": 3,
            "controller_id": 3,
            "laps": 29,
            "best_laptime": 4914,
            "pitstops": 1,
            "gap": "+4 Lap(s)",
            "disqualified": false,
            "retired": false
        },
        "3": {
            "driver_id": 14,
            "car_id": 33,
            "controller_id": 4,
            "laps": 27,
            "best_laptime": 4925,
            "pitstops": 0,
            "gap": "+6 Lap(s)",
            "disqualified": false,
            "retired": false
        }
    }
}

event.change_status

{
    "old": "running",
    "new": "ended"
}

Gültige Statusnamen sind: prepare_for_start, starting, jumpstart, running, suspended, restarting, ended.

events.weather_change

Enthält entweder dry oder wet.

events.weather_update

Enthält entweder about_to_rain oder about_to_dry_up.

race.vsc_deployed

Keine weiteren Daten.

race.vsc_retracted

Keine weiteren Daten.

race.penalty_update

Dieses Ereignis enthält die controller_id und die erhaltene Strafe in Sekunden. Ist die Zeit 0, wurde die Strafe abgesessen.

	
{
    "controller_id": "2",
    "penalty": 10
    // Wird angereichert mit driver_data, car_data und controller_data, siehe ui.lap_update
}

race.damage_update

Dieses Ereignis enthält die controller_id und die Art des Schadens. Die Art ist eine der Folgenden: engine, battery, suspension oder gearbox.

Hat das Attribut damage den Wert none, wurde der Schaden repariert.

	
{
    "controller_id": "2",
    "damage": "engine"
    // Wird angereichert mit driver_data, car_data und controller_data, siehe ui.lap_update
}

util.fuel_update

Dieses Ereignis enthält die controller_id und den Tankinhalt (-1 bis 100). -1 bedeutet, dass die Tankfunktion deaktiviert ist.

	
{
    "controller_id": "2",
    "fuel": 50
    // Wird angereichert mit driver_data, car_data und controller_data, siehe ui.lap_update
}

events.tire_change

Wird bei Reifenwechsel ausgelöst, enthält controller_id und die Reifenart, auf die gerade gewechselt wurde (dry oder wet). Jeder Fahrer startet immer auf „dry“.

	
{
    "controller_id": "2",
    "tire": "dry"
    // Wird angereichert mit driver_data, car_data und controller_data, siehe ui.lap_update
}

event.pit.enter

Ein Fahrer fährt in die Box. Enthält nur die Controller-ID.

event.pit.leave

Ein Fahrer verlässt die Box. Enthält nur die Controller-ID.

util.set_active_track

Wird ausgelöst, wenn die aktive Strecke gesetzt wird. Enthält die Daten der jetzt aktiven Strecke.

	
{
    "length": "",
    "reference_lap_time": null,
    "track_svg": null,
    "maximum_lap_time": "",
    "id": 7,
    "image": "cdvfile:\/\/localhost\/documents\/1570470682256.jpg",
    "pitstop_delta": "25000",
    "name_short": null,
    "name": "Demo Circuit",
    "minimum_lap_time": ""
}

ui.reset

Wird ausgelöst, wenn das User Interface zurückgesetzt wird, z.B. beim Starten eines neuen Events. Enthält keine Daten.

ui.remove_car_from_session

Wird ausgelöst, wenn ein Fahrzeug manuell aus der Session entfernt wird (durch Wischen im Rennbildschirm). Enthält nur die Controller-ID.

cu.send_esc_command

Enthält keine Daten. Wird ausgelöst, wenn aus SmartRace heraus das ESC-Kommando an die Control Unit gesendet wird. Das ESC-Kommando löst das Safety-Car aus oder ruft es zurück (wenn eins konfiguriert ist). Achtung: Wird der entsprechende Knopf direkt an der CU gedrückt, bekommt SmartRace nichts davon mit und kann das Event nicht auslösen.

Daten verarbeiten

Das entgegennehmende Script kann von beliebiger Art sein. Hier als Beispiel ein PHP-Script:

<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");

if ($_SERVER['REQUEST_METHOD'] == 'POST'):

    $json_data = json_decode(file_get_contents('php://input'));
    print_r($json_data);

endif;

?>

CORS-Probleme

SmartRace läuft in einem Webview und meldet sich bei dem Webserver, der die Daten der Datenschnittstelle entgegennimmt, wahrscheinlich mit einem Host wie http://localhost. Möglicherweise erlaubt Dein Webserver aufgrund seiner CORS-Policies aber nicht, Daten von einem lokalen bzw. abweichenden Host entgegenzunehmen. In diesem Fall hilft es, über die Webserver-Konfiguration entsprechende Header zu setzen. Für Apache lauten diese Header z.B. wie folgt:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "x-test-header, Origin, X-Requested-With, Content-Type, Accept"

Letzte Änderung:

Jetzt downloaden und echte Rennaction erleben.

© 2022 SmartRace – part of the SmartRaceApps.com family.

Alle verwendeten Videos, Bilder und Grafiken sind - soweit nicht anders gekennzeichnet - Eigentum von SmartRace. Eine Weiterverwendung zu privaten oder kommerziellen Zwecken ist ohne ausdrückliche Genehmigung nicht gestattet. Bilder der ADAC RAVENOL 24h Nürburgring mit freundlicher Genehmigung des ADAC Nordrhein e.V.

SmartRace ist eine Software für Mac, Tablets und Smartphones und dient zur Zeitnahme für Carrera Digital-Bahnen im Maßstab 1:32 und 1:24 und über den Analog-Modus auch für analoge Bahnen (z.B. Carrera Evolution, Carrera Exclusiv, Carrera Servo, Carrera Go!!!, Ninco, Scalextric oder Andere). SmartRace verbindet sich entweder per Bluetooth mit dem AppConnect-Adapter von Carrera oder nimmt die Messung im Analog-Modus per Kamera eines über SmartRace Connect verbundenen Smartphones vor. 

Carrera®, Carrera Digital® und Carrera AppConnect® sind eingetragene Markenzeichen der Carrera Toys GmbH. SmartRace ist kein offizielles Carrera-Produkt und in keiner Weise verbunden mit oder abhängig von Carrera Toys GmbH.