資料來源

SDV 遙測支援多種資料來源。本頁面將概要說明這些類型,以及 Telemetry 支援的各資料來源類型功能。

您可以在 system/software_defined_vehicle/samples/telemetry 目錄中找到資料來源實作的程式碼範例。

指標設定中的資料來源定義

指標設定會定義一或多個資料來源,以從中收集指標。每個資料來源都有專屬 source_identifiersource_identifier格式會因資料來源而異:

資料來源 格式 說明 範例
SDV 服務 Protobuf 訊息名稱 完整 protobuf 訊息名稱。如果服務有多個執行個體,請附加以管道 (|) 分隔的服務單元名稱。 "com.sdv.google.example.TellTale|com-sdv-google-example-tell-tale-status-hibeam"
完整執行個體名稱 (FQIN) 和服務單元名稱 以縱線 (|) 分隔的 FQIN 和服務單元名稱。 "vm-cdc:com.google.android.sdv.pubsub.SomeService/instance1|tire-pressure"
可設定的發布者登錄檔發布者 發布者名稱 在可設定的發布商登錄檔中註冊發布商時使用的確切 serviceName 任何字串皆有效。

針對每個資料來源,您可以使用下列選項將訊息擷取作業參數化。您可以在同一個指標設定中,使用不同選項多次定義相同資料來源。舉例來說,您可以讓部分邊緣處理作業使用與其他邊緣處理作業不同的子取樣間隔。

選項 類型 說明
connection_type SUBSCRIPTIONON_DEMAND 如果設為 SUBSCRIPTION,遙測服務會訂閱資料來源。如果設為 ON_DEMAND,遙測服務只會在需要時從資料來源擷取訊息。
configuration google.protobuf.Any 如果設定這個選項,遙測服務會在與資料來源通訊時,將設定物件傳遞至資料來源。
sub_sampling_interval google.protobuf.Duration 如果設定此值,系統會對訊息進行子取樣,因此遙測服務最多每隔 sub_sampling_interval 時間間隔就會處理一則訊息。
fetch_last_message bool 如果設定此屬性,即使訊息是在過去發布,Telemetry 服務也會在訂閱資料來源時擷取最後發布的訊息。

視資料來源類型而定 (請參閱下方各節),遙測服務僅支援部分參數。下表提供相關總覽。

選項 RPC SDV 服務 發布/訂閱 (pub/sub) SDV 服務 可設定的發布商登記服務發布商
connection_type: SUBSCRIPTION 支援 1 支援 支援
connection_type: ON_DEMAND 支援 2 支援 支援 3
configuration 支援 不適用 支援
sub_sampling_interval 不支援 支援 4 不支援
fetch_last_message 不支援 支援 5 不支援
1 如果實作 CreateSubscription 方法,則支援這項功能。
2 實作 GetLatestMessage 方法後即可支援。
3 如果 PublisherInfo.supportsGettrue,則支援此功能。
4 適用於 connection_type: SUBSCRIPTION,不適用於 connection_type: ON_DEMAND
5 適用於 connection_type: SUBSCRIPTION,不適用於 connection_type: ON_DEMAND

SDV 服務 (透過 SDV 通訊堆疊)

遙測服務可以從其他 SDV 服務收集資料,支援遠端程序呼叫 (RPC) 和 Pub/Sub SDV 服務。由於遙測服務在建構時間不知道要訂閱的服務清單,因此會依賴 Protobuf 反射來解碼從 SDV 服務收到的訊息。

SDV 服務預設不會提供反射中繼資料。如要將 SDV 服務做為遙測資料來源,您必須啟用服務 VSIDL 目錄的執行階段設定產生功能。詳情請參閱「VSIDL Provider Guide for Service Bundle Developers」。

如僅為測試和評估用途,您可以在服務套件定義中,將 register_reflection_metadata 選項設為 true。詳情請參閱「服務套件」。

RPC SDV 服務

遙測功能對 RPC SDV 服務的支援有限。詳情請參閱「定義 RPC 服務」。如要從 RPC SDV 服務收集資料,服務必須公開下列一或多個 RPC 方法:

  • CreateSubscription 會傳回使用者定義的回應串流:

    rpc CreateSubscription(<configuration>) returns (stream <response>)
    
  • GetLatestMessage 會傳回使用者定義的回應:

    rpc GetLatestMessage(<configuration>) returns (<response>)
    

您可以使用設定引數,將資料來源的行為參數化,例如要求不同的發布頻率,或選取要訂閱的實體 (例如要從哪個輪胎讀取輪胎壓力)。

在指標設定中將 RPC SDV 服務定義為資料來源時,您可以在資料來源定義中指定 configuration 值,做為這個 RPC 的引數。Telemetry 服務會以透明方式處理設定物件,並傳遞您定義的任何內容。

這兩種方法的設定引數類型可以是 google.protobuf.Any 或使用者定義的型別。如果您同時提供這兩種方法,引數型別必須相同。如果這些 RPC 方法不需要設定引數,請使用 google.protobuf.Empty

視指標設定的資料來源定義中指定的 connection_type 而定,遙測服務會呼叫 CreateSubscription (適用於 connection_type: SUBSCRIPTION) 或 GetLatestMessage (適用於 connection_type: ON_DEMAND)。

Pub/Sub SDV 服務

遙測功能完全支援監控 SDV 服務公開的 VSIDL 中定義的發布/訂閱管道,無須進行任何額外設定。詳情請參閱將發布者新增至服務套裝組合

除了訂閱 Pub/Sub 頻道,Telemetry 也支援隨選擷取發布至頻道的最新訊息。

可設定的發布者登錄資料

除了使用 SDV 通訊堆疊從 SDV 服務收集資料外,Telemetry 也支援從應用程式和服務收集資料,這些應用程式和服務會在 Telemetry 服務的可設定發布者登錄中註冊發布者。這項功能在 IVI 上最實用,因為 IVI 沒有 SDV 通訊堆疊。

此外,您也可以使用可設定的發布商登錄檔進行偵錯和原型設計,不必編寫 SDV 服務套件。詳情請參閱「可設定的發布者登錄檔」。