Fahrzeugsignalkataloge

Der Generator für Messwertkonfigurationen (Metrics Configuration Generator, MCG) validiert Messwertkonfigurationen, indem er Signalnamen prüft, Typüberprüfungen für Ausdrücke durchführt und Ausgabetypen ableitet. Dazu benötigt MCG Zugriff auf die Protokollpuffer-Nachrichtendefinitionen (protobuf) für Fahrzeugsignale.

In SDV werden Fahrzeugsignale und ‑dienste mit der Vehicle Service Interface Definition Language (VSIDL) definiert. VSIDL verwendet protobuf-Dateien, um Nachrichten anzugeben. Diese protobuf-Dateien bilden die Grundlage für einen Signalkatalog.

Damit MCG auf Signaldaten zugreifen kann, müssen Sie diese VSIDL-protobuf-Dateien in einem protobuf-FileDescriptorSet verpacken und in den MCG-Dienst hochladen. MCG verwendet den Begriff Fahrzeugsignalkatalog für diese hochgeladenen und versionierten Definitionssätze. Ein Fahrzeugsignalkatalog ist also die kompilierte, hochgeladene Form der protobuf-Nachrichtendefinitionen in Ihrem VSIDL-Katalog.

Was ist ein Fahrzeugsignalkatalog?

Ein Fahrzeugsignalkatalog stellt MCG Signaldaten für die Validierung zur Verfügung, verpackt als protobuf-FileDescriptorSet.

In MCG werden Kataloge durch einen Versionsstring identifiziert, den Sie beim Hochladen zuweisen. So können Sie mehrere verschiedene Signaldatensätze verwalten. Sie können beispielsweise verschiedene Katalogversionen für Softwareversionen (v1.0, v1.1, v2.0) oder für verschiedene Fahrzeugmodelle oder Hardwarekonfigurationen (suv-my2025, sedan-my2025) verwalten. Jede Messwertkonfiguration verwendet das Feld vs_version, um auf einen bestimmten Katalog zu verweisen, der die Signale definiert, die als Datenquellen verfügbar sind, und Signaldaten für die Typableitung und ‑validierung bereitstellt.

Instanz von FileDescriptorSet erstellen

Wie unter Nachrichten und RPC-Dienste definieren beschrieben, werden Fahrzeugsignale als protobuf-Nachrichten in protobuf-Dateien definiert. Wenn Sie Teil eines SDV-Projekts sind, verwenden Sie die protobuf-Dateien aus dem VSIDL-Katalog Ihres Projekts, um eine Instanz von FileDescriptorSet zu erstellen.

Um einen Katalog für MCG zu erstellen, bündeln Sie Ihre protobuf-Dateien mit protoc in einer FileDescriptorSet-Binärdatei.

Wenn sich alle protobuf-Dateien in einem Ordner befinden, führen Sie den folgenden Befehl aus, um vehicle_signals.pb zu generieren:

protoc --include_imports --descriptor_set_out=vehicle_signals.pb <var label="path to folder with .proto files">path/to/your/protos</var>/*.proto

Kataloge hochladen und verwalten

Wenn Sie Ihren Signaldatensatz als Katalog hochladen, können Sie in Anfragen zur Messwertkonfiguration per Versionsname darauf verweisen.

Katalogversion hinzufügen oder aktualisieren

Nachdem Sie die Katalogdatei vehicle_signals.pb generiert haben, können Sie sie über die MCG API-Endpunkte unter /api/v1/vs/ hochladen und verwalten. Für den Endpunkt zum Hinzufügen oder Aktualisieren eines Katalogs, POST /api/v1/vs/, muss FileDescriptorSet als base64-codierter String in der JSON-Nutzlast übergeben werden.

Verwenden Sie den Befehl base64, um vehicle_signals.pb für die API-Nutzung zu codieren. Das Flag -w 0 deaktiviert den Zeilenumbruch, sodass der codierte String in einer einzigen Zeile angezeigt wird:

VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)

Wenn Sie vehicle_signals.pb als neue Version (z. B. v1.0) hochladen oder eine vorhandene Version aktualisieren möchten, senden Sie eine POST-Anfrage mit dem base64-codierten Inhalt an den Endpunkt /api/v1/vs/ mit einem eindeutigen Versionsnamen.

Der Anfragetext muss ein JSON-Objekt sein, das den String version und den base64-codierten String vehicle_signals enthält:

{
  "version": "v1.0",
  "vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}

Das folgende Beispiel zeigt, wie Sie vehicle_signals.pb mit curl als Version v1.0 hochladen. Im Beispiel wird printf verwendet, um die JSON-Nutzlast zu erstellen und an curl zu senden. So muss keine JSON-Datei mit einem sehr langen base64-String in einer einzigen Zeile erstellt werden:

# 1. Encode the FileDescriptorSet to a Base64 string
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)

# 2. Define catalog version and build JSON payload
VERSION="<var label="catalog version">v1.0</var>"
JSON_PAYLOAD=$(jq -n --arg v "$VERSION" --arg d "$VEHICLE_SIGNALS_BASE64" \
  '{version: $v, vehicle_signals: $d}')

# 3. POST the data to the API endpoint
echo "$JSON_PAYLOAD" | curl -H "Content-Type: application/json" --data-binary @- "$SERVICE_URL/api/v1/vs/"

Versionen auflisten und löschen

Sie können alle verfügbaren Katalogversionen auflisten oder eine bestimmte Version löschen:

  • Versionen auflisten: Wenn Sie eine Liste der IDs für alle hochgeladenen Katalogversionen sehen möchten, senden Sie eine GET-Anfrage an /api/v1/vs/. Weitere Informationen finden Sie unter GET /api/v1/vs/.

  • Version löschen: Wenn Sie einen Katalog entfernen möchten, senden Sie eine DELETE Anfrage an /api/v1/vs/{version}, wobei {version} die ID ist, die beim Hochladen des Katalogs angegeben wurde (z. B. v1.0). Weitere Informationen finden Sie unter DELETE /api/v1/vs/{version}.

Ausführliche Informationen zu allen Endpunkten finden Sie in der API-Referenz.

Kataloge in Messwertkonfigurationen verwenden

Nach dem Hochladen können Sie in Messwertkonfigurationen mit dem Feld vs_version auf eine Katalogversion verweisen:

{ "vs_version": "v1.0", ... }

Wenn dieses JSON-Objekt an die Endpunkte /api/v1/generate_metrics_config oder /api/v1/validate_metrics_config gesendet wird, verwendet MCG die Signaldaten aus dem Katalog v1.0, um die Validierung und Typableitung durchzuführen.