$data · Données de conduite

$data fournit des données en fonction de l'identifiant d'entrée de cet instrument : current est l'entrée actuelle et history est les échantillons d'entrée des 30 dernières secondes du déclenchement en cours.

données lisibles

Cliquez sur le nom de l'instrument en haut de l'éditeur pour ouvrir Réglages de l’instrument → Liaisons d’entrée. Accédez à Configuration des paramètres pour définir le nom, l'identifiant et le type de l'entrée ; renvoyez la liaison d'entrée et remplissez les valeurs natives, ou sélectionnez vos propres paramètres de véhicule pour l'entrée OBD. Les données de base sont fournies automatiquement par l'application.

Le script accède à l'entrée via $data.current.<identifier>. Par exemple, l'entrée de vitesse de base speed utilise $data.current.speed et l'entrée OBD coolant utilise $data.current.coolant. Le nom du champ est indépendant du paramètre du véhicule UUID et du nom de l'appareil. La modification des paramètres du véhicule nécessite uniquement une nouvelle liaison ; la modification de l'identifiant d'entrée nécessite de modifier le code.

taper Configuration et ce que lit le script
Nombre Définissez la valeur par défaut et les limites supérieure et inférieure facultatives ; le script lit le numéro directement, tel que $data.current.limit.
Texte Définissez le texte par défaut ; le script lit la chaîne directement, par exemple $data.current.label.
Interrupteur Définissez l'état du commutateur par défaut ; le script lit directement la valeur booléenne, telle que $data.current.showUnit.
Sélection Définir le texte facultatif et les valeurs par défaut ; le script lit la chaîne sélectionnée, telle que $data.current.style.
Données de base Sélectionnez une source telle que la vitesse, la valeur G, la position ou le temps ; la structure de lecture dépend de la source.
Données OBD Définissez le type de valeur attendue et sélectionnez les paramètres de l'appareil et du véhicule dans la liaison d'entrée ; la lecture est { value, unit } ou null.

Le tableau des champs ci-dessous utilise des exemples d'identifiants et ne signifie pas que chaque compteur possède automatiquement ces champs. L'interface réelle et les invites de type sont générées en fonction de la définition d'entrée de l'instrument actuel.

Structure des mesures et valeurs manquantes

La valeur de la quantité de base et la lecture OBD sont généralement { value, unit } ; les données de base telles que la position, la valeur G, l'attitude, etc. ont leurs propres composants et l'état d'enregistrement est une valeur booléenne. Les valeurs, le texte, les commutateurs et les sélections renvoient directement leurs valeurs configurées.

Lorsque OBD n’est pas lié ou que la configuration n’existe pas, l’intégralité de l’entrée est null ; lorsque la liaison existe mais est temporairement manquante, { value: null, unit } est conservé. Utilisez reading?.value == null pour vérifier les tests manquants, en conservant 0 valide. value de OBD peut être un littéral de mappage ; la déclaration de type n'effectue pas de conversion à l'exécution et le type doit être vérifié avant d'appeler des méthodes numériques.

Fenêtre d'historique et unité de temps

$data.history sont les données sélectionnées de Le trajet en cours dure 30 secondes, classées du plus ancien au plus récent. L'hôte enregistre toutes les données collectées de manière unifiée, puis les assemble selon les besoins en fonction des paramètres d'entrée de l'instrument ; la fenêtre existante peut être lue en ouvrant l'instrument. Suspendre le dessin, ignorer le rendu ou recréer une instance en cours d'exécution ne perd pas la fenêtre. Réinitialisation lors de la fin ou du changement de voyage ou du changement de mode de fonctionnement ; la fenêtre historique est vide lorsqu'il n'y a pas de trajet actif.

L'historique est échantillonné à une fréquence maximale de 5 Hz, avec des échantillons adjacents séparés d'au moins 200 ms, et un maximum de 151 éléments sont conservés. Les temps d'échantillonnage répétés et les redessins provoqués uniquement par des changements dans l'environnement d'affichage n'augmenteront pas les échantillons ; une fois les données arrêtées, l'hôte effacera toujours les échantillons expirés dans un temps monotone, sans exécution de script. Cette limite supérieure n'empêche pas current de lire cette dernière entrée, ni de lancer des requêtes OBD supplémentaires.

Chaque échantillon a une structure de champ cohérente avec current et peut contenir des tests manquants. La modification des définitions d'entrée ou des liaisons réassemble la fenêtre ; les paramètres fixes tels que les valeurs, les commutateurs, le texte et les options utilisent la configuration actuelle. La mise à jour des données compare uniquement le contenu réel de $data.current pour décider d'exécuter ou non JS. Les valeurs, les unités et les sous-champs de groupe sont tous impliqués dans la comparaison ; les nouvelles réponses avec la même valeur, la même croissance ou coupure historique, le temps de collecte interne et les mises à jour de sources non sélectionnées ne déclencheront pas l'exécution séparément. L'hôte continue de conserver la fenêtre complète et la prochaine fois que current sera modifié, le script obtiendra le dernier historique. Les horodatages explicitement sélectionnés ou les durées enregistrées appartiennent à current, et les changements de valeur déclencheront toujours l'exécution. OBD La lecture conserve la valeur, l'unité et l'état de mesure manquant au moment de l'échantillonnage, et ne sera pas complétée par des lectures ultérieures ; la vitesse de base sera convertie en fonction de l'unité d'affichage actuelle. elapsed.value est le nombre de secondes écoulées pendant le trajet en cours, timestamp.value est l'horodatage en millisecondes et movingTime.value est le temps de trajet en secondes. Utilisez le temps réel lorsque vous dessinez des courbes de temps et conservez les points d'arrêt causés par des mesures manquantes.

Exemple : Afficher simultanément la vitesse et les paramètres OBD

Définissez deux entrées : l’entrée de vitesse de base avec l’identifiant speed et l’entrée OBD avec l’identifiant coolant. Liez les paramètres natifs du véhicule à ces derniers. L'exemple suivant affiche les lectures et les unités par leurs identifiants d'entrée respectifs ; aucune modification de l'exemple de code n'est requise lors de la reliure de l'appareil.

function main() {
  const speed = $data.current.speed;
  const parameter = $data.current.coolant;
  return (
    <VStack spacing={8}>
      <Text fontSize={40}>
        {speed?.value == null ? '—' : speed.value.toFixed(0)}
      </Text>
      <Text>{speed?.unit ?? $env.speedUnit}</Text>
      <Text>
        {parameter?.value == null ? '—' : parameter.value.toString()}
      </Text>
      <Text>{parameter?.unit ?? ''}</Text>
    </VStack>
  );
}

Mises à jour et sources de données

Chaque exécution de script utilise la dernière entrée ; la fréquence réelle est déterminée par la source de données, les modifications d'entrée et le temps de traitement. current et history renvoient des copies des données, les modifier ne modifiera pas les lectures des capteurs ou la configuration du véhicule.

Les champs tels que la vitesse de base auront des paramètres de remplacement de données de trajet valides appliqués. La lecture du paramètre OBD utilise directement la lecture et l'unité du paramètre. Les intervalles de requête, les réponses des véhicules et autres demandes affecteront la mise à jour réelle. La disponibilité des données est également affectée par le positionnement, l'état de reconnaissance et la connectivité de l'appareil ; les aperçus de l’éditeur utilisent des entrées simulées distinctes.

Champ

current{ [identifier: string]: number | string | boolean | object | null }

Dernières données sélectionnées

history{ [identifier: string]: number | string | boolean | object | null }[]

Données sélectionnées des 30 dernières secondes, des plus anciennes aux plus récentes

current.speed{ value: number | null; unit: "km/h" | "mph" }

Vitesse

current.gForce{ longitudinal: number | null; lateral: number | null; combined: number | null; unit: string }

Force G

current.heading{ direction: number | null; accuracy: number | null; unit: string }

Cap

current.location{ latitude: number | null; longitude: number | null; unit: string }

Position

current.vehicleAttitude{ roll: number | null; pitch: number | null; unit: string }

Attitude du véhicule

current.locationAccuracy{ value: number | null; unit: "m" }

Précision de la position

current.altitude{ value: number | null; unit: "m" }

Altitude

current.distance{ value: number | null; unit: "m" }

Distance

current.movingTime{ value: number | null; unit: "s" }

Temps en mouvement

current.timestamp{ value: number | null; unit: "ms" }

Heure de capture

current.elapsed{ value: number | null; unit: "s" }

Durée d’enregistrement

current.recordingboolean

Enregistrement en cours

current.coolant{ value: number | string | null; unit: string | null } | null

Données OBD

current.limitnumber

Nombre

current.labelstring

Texte

current.showUnitboolean

Interrupteur

current.stylestring

Sélection