楽器データ
$data 経由で現在の運転データと過去のサンプルを読み取り、その結果をテキスト、グラフィックス、曲線に使用します。この記事では、データ構成、読み取り構造、OBD パラメータ、および更新ルールについて説明します。
データインターフェース
この機器は、$data 経由で定義された入力を使用します。 $data.current は現在の入力を提供し、$data.history は現在のトリップの最後の 30 秒のサンプリング シーケンスを提供します。フィールド名は、機器の入力識別子から取得されます。たとえば、ベース速度入力に speed という名前を付け、$data.current.speed を通じて読み取ります。 OBD 入力に coolant という名前を付け、$data.current.coolant を通して読み取ります。
速度、距離、時間、OBD に相当する値には、value と unit が含まれます。たとえば、{ value: 42.3, unit: 'km/h' } には数値と単位が含まれます。位置や G 値などのフィールドは、それぞれのコンポーネントを提供します。数値、テキスト、スイッチ、および選択項目は、value のレイヤーをラップせずに、数値、文字列、またはブール値を直接返します。完全なルールについては、$data API を参照してください。
入力とネイティブ バインディングを定義する
エディターの上部にあるメーター名をクリックして、メーター設定 → 入力の割り当て を開きます。 パラメータ設定 を使用して、入力の名前、識別子、タイプを定義します。入力バインディングを返してネイティブ値を入力するか、OBD 入力に対して独自の車両パラメーターを選択します。基本データはアプリによって自動的に提供されます。
| タイプ | 構成とスクリプトの読み取り内容 |
|---|---|
| 数値 | デフォルト値とオプションの上限と下限を設定します。スクリプトは、$data.current.limit などの番号を直接読み取ります。 |
| テキスト | デフォルトのテキストを設定します。スクリプトは、$data.current.label などの文字列を直接読み取ります。 |
| スイッチ | デフォルトのスイッチ状態を設定します。スクリプトは、$data.current.showUnit などのブール値を直接読み取ります。 |
| 選択肢 | オプションのテキストとデフォルトを定義します。スクリプトは、$data.current.style などの選択された文字列を読み取ります。 |
| 基本データ | 速度、G 値、位置、時間などのソースを選択します。読み出し構造はソースによって異なります。 |
| OBD データ | 期待値のタイプを定義し、入力バインディングでデバイスと車両のパラメーターを選択します。読み出し値は { value, unit } または null です。 |
入力識別子は、文字で始まる 1 ~ 100 個の英字と数字であり、同じ機器内で繰り返すことはできません。各楽器には最大 256 の入力があります。名前はインターフェイスの表示に使用され、識別子はコードに使用されます。表示名を変更してもアクセス パスは変更されませんが、識別子を変更するにはコードも同時に変更する必要があります。
たとえば、coolant を使用して冷却剤の温度を表し、さまざまなデバイスの対応するパラメーターをバインドした後でも、コードは依然として $data.current.coolant と読み取ります。エディターは、入力定義に基づいて式と型のヒントを提供します。数値のデフォルト値は上限と下限の範囲内に収まる必要があり、選択項目には重複しない空でないオプションと有効なデフォルト項目がなければなりません。エラーのプロンプトを保存するときは、まず対応するフィールドを修正してください。
現在の読み取り値
新しい計測器には、識別子 speed とソース 速度 の基本データ入力がすでに含まれています。既存の作品は、パラメータ設定 でこの定義を確認できます。 main() で $data.current.speed を取得すると、この速度の値と単位を使用できます。次の例では、上部に丸められた値、下部に単位が示されています。利用可能な速度がない場合は、— が表示されます。
正しく構成された基本速度入力は常にオブジェクトを保持し、欠落している場合は value は null になり、unit はセットアップの km/h または mph のままになります。 == null 値が欠落していないかどうかを確認します。速度がゼロの場合でも、0 が表示されます。フィールド名は入力識別子によって決まります。 vehicleSpeed に変更した場合は、コードも $data.current.vehicleSpeed に変更する必要があります。
function main() {
const speed = $data.current.speed;
return (
<VStack spacing={8}>
<Text fontSize={64} color={$env.foreground}>
{speed?.value == null ? '—' : Math.round(speed.value)}
</Text>
<Text fontSize={16} color={$env.accent}>
{speed?.unit ?? $env.speedUnit}
</Text>
</VStack>
);
}
OBD パラメータ
まず OBD デバイスを接続し、ターゲット パラメーターが有効な読み取り値を生成することを確認します。 パラメータ設定 に移動し、OBD データ 入力を追加します。名前「冷却温度」、識別子 coolant、予期されるタイプは数値を選択します。 入力の割り当て に戻り、[デバイス] で冷却温度パラメーターを選択します。次の例では、車両パラメータ UUID をスクリプト フィールド名として使用せずに、$data.current.coolant 経由で読み取ります。
バインドおよび構成された読み取りには、常に value および unit が含まれます。デバイスが接続されていない場合、読み取りの有効期限が切れた場合、またはクエリが失敗した場合、value は null であり、unit は選択したデバイスによって保存されたパラメータ構成を引き続き使用します。単位のないパラメータは unit: null を使用します。バインドされていない場合、またはデバイスとパラメーターの構成が存在しない場合、入力全体は null になります。
value には、数値またはテキスト マップされた文字列を指定できます。予期されたタイプはプロンプトの編集に使用されます。バインディングでは、異なる型を返す引数の入力を求めるプロンプトが表示される場合がありますが、それでもバインド可能であり、結果として実際の値はキャストされません。数値の書式設定を行う前に、型を確認する必要があります。アダプターを変更するか、他の人の作品をインポートした後、対応する入力を再バインドして元のコードを保持します。
function main() {
const reading = $data.current.coolant;
const value = reading?.value;
const text =
value == null
? '—'
: typeof value === 'number'
? value.toFixed(1)
: value.toString();
return (
<VStack spacing={8}>
<Text fontSize={48} color={$env.foreground}>
{text}
</Text>
<Text fontSize={16} color={$env.accent}>
{reading?.unit ?? ''}
</Text>
</VStack>
);
}
更新と履歴サンプリング
カスタム メーターには、均一に固定されたリフレッシュ レートがありません。現在の入力、入力定義、または表示環境が変更されると、CapDrive はスクリプトを再実行し、main() を呼び出します。同一の入力はスキップされます。スクリプトはシリアルに実行され、処理中に最新の保留中の入力のみが保持されます。アニメーションは、フレームごとにスクリプトを実行したり、センサーや OBD のサンプリング周波数を増加したりすることなく、描画側によって独立して実行されます。
アプリは、現在の旅行の最後の 30 秒間に収集されたデータを均一に維持し、5 Hz で最大 151 項目をサンプリングして保持します。機器を開いて既存のウィンドウを読み取ります。ウィンドウを失わずに描画を一時停止したり、実行中のインスタンスを再構築したり、トリップが終了したり、トリップや実行モードが切り替わったりしたときにリセットします。履歴の増加または有効期限のクリーンアップによってスクリプトが個別にトリガーされることはありません。時間の経過とともにカーブを前進させたい場合は、識別子 elapsed と記録された継続時間であるソースを使用して基本入力を定義できます。
speed および elapsed 入力を定義した後、各履歴サンプルの elapsed.value を横座標として使用し、speed.value を縦座標として使用できます。タイムスタンプはミリ秒を使用し、記録された期間は秒を使用します。後続の OBD 値で履歴を埋め戻さずに、欠落したテスト間隔を維持します。プレビューではシミュレートされた入力が使用され、ダッシュボードでは実際のデータが使用されます。
データの有効性
null は、現在利用可能な読み取り値がなく、0 が有効な値であることを意味します。これら 2 つの状態を保持することにより、機器はパーキング、接続の中断、またはテストの一時的な欠席を実際に表示できます。 value == null ? '—' : value を使用して値を処理し、value || 0 を介してすべての欠落した測定値がゼロとして表示されるのを避けることができます。
パラメータ設定に応じて、テキスト マッピングは空の文字列を生成するか、一致しない場合は数値または null を返す場合があります。リテラルを受け入れる View は文字列を表示できます。計算や数値の書式設定に関係する値は、まず型を確認する必要があります。
欠測値のトラブルシューティングを行う場合は、次のフィールドに対応するデータ ソースに従って確認してください。位置決めステータスを表示するための基本速度。 OBD パラメータを使用して、現在のデバイス、テスト読み取り結果、およびパラメータ設定を表示します。データ ソースが正常になったら、機器によって選択されたフィールドとコード式を確認します。