Données des instruments

Lisez les données de conduite actuelles et les échantillons historiques via $data et utilisez les résultats pour le texte, les graphiques et les courbes. Cet article explique la configuration des données, la structure de lecture, les paramètres OBD et les règles de mise à jour.

Interface de données

L'instrument utilise une entrée définie via $data. $data.current fournit l'entrée actuelle et $data.history fournit la séquence d'échantillonnage des 30 dernières secondes du déclenchement en cours. Le nom du champ provient de l'identifiant d'entrée de l'instrument ; par exemple, nommez l'entrée de vitesse de base speed, lisez $data.current.speed ; nommez l’entrée OBD coolant, lisez $data.current.coolant.

Les valeurs équivalentes pour la vitesse, la distance, le temps et OBD incluent value et unit. Par exemple, { value: 42.3, unit: 'km/h' } contient des valeurs numériques et des unités ; les champs tels que la position et la valeur G fournissent leurs composants respectifs. Les valeurs numériques, le texte, les commutateurs et les éléments de sélection renvoient directement des nombres, des chaînes ou des valeurs booléennes sans envelopper une couche de value. Consultez l'API $data pour connaître les règles complètes.

Définir l'entrée et la liaison native

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.

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.

L'identifiant d'entrée est composé de 1 à 100 lettres et chiffres anglais, commençant par une lettre, et ne peut pas être répété dans le même instrument ; chaque instrument dispose d'un maximum de 256 entrées. Le nom est utilisé pour l'affichage de l'interface et l'identifiant est utilisé pour le code. La modification du nom d'affichage ne change pas le chemin d'accès, mais la modification de l'identifiant nécessite de modifier le code simultanément.

Par exemple, après avoir utilisé coolant pour représenter la température du liquide de refroidissement et lié les paramètres correspondants de différents appareils, le code indique toujours $data.current.coolant. L'éditeur fournit des indications d'expression et de type basées sur la définition d'entrée. La valeur numérique par défaut doit être comprise entre les limites supérieure et inférieure, et les éléments de sélection doivent avoir des options non dupliquées et non vides et des éléments par défaut valides ; corrigez d'abord les champs correspondants lors de l'enregistrement des invites d'erreur.

lecture actuelle

Le nouvel instrument contient déjà les données de base saisies avec l'identifiant speed et la source Vitesse ; les travaux existants peuvent vérifier cette définition dans Configuration des paramètres. Obtenez $data.current.speed dans main(), et vous pourrez utiliser la valeur et l'unité de cette vitesse. L'exemple suivant montre la valeur arrondie en haut et l'unité en bas ; lorsqu'aucune vitesse n'est disponible, — s'affiche.

Les entrées de vitesse de base correctement configurées conservent toujours l'objet, value est null lorsqu'il est manquant et unit reste km/h ou mph de la configuration. == null Vérifiez si la valeur est manquante. Lorsque la vitesse est nulle, il affiche toujours 0. Le nom du champ est déterminé par l'identifiant d'entrée ; s'il est remplacé par vehicleSpeed, le code doit également être modifié par $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>
  );
}

Paramètre OBD

Connectez d’abord l’appareil OBD et vérifiez que les paramètres cibles produisent des lectures valides. Accédez à Configuration des paramètres et ajoutez l'entrée Données OBD, par ex. nom "Température du liquide de refroidissement", identifiant coolant, type attendu, sélectionnez Numérique. Revenez à Liaisons d’entrée et sélectionnez le paramètre de température du liquide de refroidissement sous Appareils correspondants. L'exemple suivant lit via $data.current.coolant sans utiliser le paramètre de véhicule UUID comme nom de champ de script.

Les lectures liées et configurées contiennent toujours value et unit. Lorsque l'appareil n'est pas connecté, la lecture expire ou la requête échoue, value est null et unit prend toujours la configuration des paramètres enregistrée par l'appareil sélectionné ; les paramètres sans unité utilisent unit: null. Lorsqu'elle n'est pas liée ou que la configuration de l'appareil et des paramètres n'existe plus, l'entrée entière est null.

value peut être un nombre ou une chaîne mappée en texte. Le type attendu est utilisé pour modifier les invites ; une liaison peut demander des arguments qui renvoient des types différents, mais elle pourra toujours être liée et la valeur réelle ne sera pas convertie en conséquence. Le type doit être vérifié avant le formatage des nombres. Après avoir changé l'adaptateur ou importé les œuvres d'autres personnes, reliez l'entrée correspondante pour conserver le code d'origine.

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>
  );
}

Mises à jour et échantillonnage historique

Les compteurs personnalisés n’ont pas de taux de rafraîchissement uniformément fixe. Lorsque l'entrée actuelle, la définition d'entrée ou l'environnement d'affichage change, CapDrive réexécute le script et appelle main() ; les entrées identiques sont ignorées. Le script est exécuté en série et seule la dernière entrée en attente est conservée pendant le traitement. L'animation est réalisée indépendamment par le côté dessin, sans exécuter de scripts image par image, et sans augmenter la fréquence d'échantillonnage du capteur ou de OBD.

L'application conserve uniformément les données collectées des 30 dernières secondes du trajet en cours, en échantillonnant et en conservant jusqu'à 151 éléments à 5 Hz. Ouvrez l'instrument pour lire la fenêtre existante ; suspendez le dessin ou reconstruisez l'instance en cours d'exécution sans perdre la fenêtre, et réinitialisez-la à la fin du voyage, changez de voyage ou de mode d'exécution. La croissance historique ou le nettoyage des expirations ne déclencheront pas le script séparément ; lorsque l'on souhaite que la courbe avance dans le temps, on peut définir une entrée de base avec l'identifiant elapsed et la source étant la durée enregistrée.

Après avoir défini les entrées speed et elapsed, elapsed.value de chaque échantillon historique peut être utilisé comme abscisse et speed.value comme ordonnée ; l'horodatage utilise des millisecondes et la durée enregistrée utilise des secondes. Conservez les intervalles de test manquants sans remplir l’historique avec les valeurs OBD suivantes. Les aperçus utilisent des entrées simulées et les tableaux de bord utilisent des données réelles.

validité des données

null signifie qu'aucune lecture n'est actuellement disponible et 0 est une valeur valide. En conservant ces deux états, l'instrument peut véritablement afficher le stationnement, l'interruption de connexion ou l'absence temporaire de test. Vous pouvez utiliser value == null ? '—' : value pour gérer les valeurs afin d'éviter d'afficher toutes les mesures manquantes comme zéro via value || 0.

Les mappages de texte peuvent produire une chaîne vide ou renvoyer un nombre ou null s'il n'y a pas de correspondance, selon la configuration des paramètres. View qui accepte les littéraux peut afficher des chaînes ; les valeurs impliquées dans les calculs et le formatage des nombres doivent d'abord vérifier le type.

Lors du dépannage des mesures manquantes, vérifiez en fonction de la source de données correspondant au champ : la vitesse de base pour visualiser l'état de positionnement ; Paramètre OBD pour afficher l'appareil actuel, les résultats de lecture des tests et la configuration des paramètres. Une fois la source de données normale, vérifiez les champs et les expressions de code sélectionnés par l'instrument.

Pour continuer