Datos del instrumento

Lea datos de conducción actuales y muestras históricas a través de $data y utilice los resultados para texto, gráficos y curvas. Este artículo explica la configuración de datos, la estructura de lectura, los parámetros OBD y las reglas de actualización.

Interfaz de datos

El instrumento utiliza una entrada definida a través de $data. $data.current proporciona la entrada actual y $data.history proporciona la secuencia de muestreo de los últimos 30 segundos del viaje actual. El nombre del campo proviene del identificador de entrada del instrumento; por ejemplo, nombre la entrada de velocidad base speed, lea hasta $data.current.speed; nombre la entrada OBD coolant, lea hasta $data.current.coolant.

Los valores equivalentes para velocidad, distancia, tiempo y OBD incluyen value y unit. Por ejemplo, { value: 42.3, unit: 'km/h' } contiene valores numéricos y unidades; campos como posición y valor G proporcionan sus respectivos componentes. Los valores numéricos, texto, modificadores y elementos de selección devuelven directamente números, cadenas o valores booleanos sin envolver una capa de value. Consulte la API $data para conocer las reglas completas.

Definir entrada y enlace nativo

Haga clic en el nombre del instrumento en la parte superior del editor para abrir Ajustes del instrumento → Vinculaciones de entrada. Utilice Configuración de parámetros para definir el nombre, identificador y tipo de entrada; devuelva el enlace de entrada y complete los valores nativos, o seleccione los parámetros de su propio vehículo para la entrada OBD. La aplicación proporciona los datos básicos automáticamente.

tipo Configuración y lo que lee el script
Número Establezca el valor predeterminado y los límites superior e inferior opcionales; el script lee el número directamente, como $data.current.limit.
Texto Establecer el texto predeterminado; el script lee la cadena directamente, como $data.current.label.
Interruptor Establezca el estado del interruptor predeterminado; el script lee el valor booleano directamente, como $data.current.showUnit.
Selección Definir texto opcional y valores predeterminados; el script lee la cadena seleccionada, como $data.current.style.
Datos básicos Seleccione una fuente como velocidad, valor G, posición o tiempo; la estructura de lectura depende de la fuente.
Datos OBD Defina el tipo de valor esperado y seleccione los parámetros del dispositivo y del vehículo en el enlace de entrada; la lectura es { value, unit } o null.

El identificador de entrada consta de 1 a 100 letras y números en inglés, que comienzan con una letra y no se pueden repetir en el mismo instrumento; cada instrumento tiene un máximo de 256 entradas. El nombre se utiliza para mostrar la interfaz y el identificador se utiliza para el código. Modificar el nombre para mostrar no cambia la ruta de acceso, pero modificar el identificador requiere modificar el código simultáneamente.

Por ejemplo, después de usar coolant para representar la temperatura del refrigerante y vincular los parámetros correspondientes de diferentes dispositivos, el código aún dice $data.current.coolant. El editor proporciona sugerencias de expresión y tipo basadas en la definición de entrada. El valor numérico predeterminado debe estar dentro de los límites superior e inferior, y los elementos de selección deben tener opciones no duplicadas, no vacías y elementos predeterminados válidos; corrija los campos correspondientes primero al guardar mensajes de error.

lectura actual

El nuevo instrumento ya contiene la entrada de datos básicos con identificador speed y fuente Velocidad; Los trabajos existentes pueden consultar esta definición en Configuración de parámetros. Obtenga $data.current.speed en main() y podrá usar el valor y la unidad de esta velocidad. El siguiente ejemplo muestra el valor redondeado en la parte superior y la unidad en la parte inferior; cuando no hay velocidad disponible, se muestra —.

Las entradas de velocidad base configuradas correctamente siempre retienen el objeto, value es null cuando falta y unit permanece km/h o mph de la configuración. == null Compruebe si falta el valor. Cuando la velocidad es cero, todavía muestra 0. El nombre del campo está determinado por el identificador de entrada; si se cambia a vehicleSpeed, el código también se debe cambiar a $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>
  );
}

parámetro OBD

Primero conecte el dispositivo OBD y verifique que los parámetros objetivo produzcan lecturas válidas. Vaya a Configuración de parámetros y agregue la entrada Datos OBD, p. nombre "Temperatura del refrigerante", identificador coolant, tipo esperado seleccione Numérico. Regrese a Vinculaciones de entrada y seleccione el parámetro de temperatura del refrigerante en Dispositivos. El siguiente ejemplo se lee a través de $data.current.coolant sin utilizar el UUID del parámetro del vehículo como nombre del campo del script.

Las lecturas vinculadas y configuradas siempre contienen value y unit. Cuando el dispositivo no está conectado, la lectura caduca o la consulta falla, value es null y unit aún toma la configuración de parámetros guardada por el dispositivo seleccionado; Los parámetros sin unidades utilizan unit: null. Cuando no está vinculado o la configuración del dispositivo y los parámetros ya no existen, la entrada completa es null.

value puede ser un número o una cadena asignada a texto. El tipo esperado se utiliza para editar mensajes; un enlace puede solicitar argumentos que devuelvan tipos diferentes, pero seguirá siendo enlazable y, como resultado, el valor real no se convertirá. El tipo debe verificarse antes de formatear el número. Después de cambiar el adaptador o importar trabajos de otras personas, vuelva a vincular la entrada correspondiente para conservar el código original.

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

Actualizaciones y muestreo histórico.

Los medidores personalizados no tienen una frecuencia de actualización fija uniforme. Cuando la entrada actual, la definición de entrada o el entorno de visualización cambian, CapDrive vuelve a ejecutar el script y llama a main(); se omiten entradas idénticas. El script se ejecuta en serie y durante el procesamiento solo se conserva la última entrada pendiente. La animación se realiza de forma independiente por el lado del dibujo, sin ejecutar scripts cuadro por cuadro y sin aumentar la frecuencia de muestreo del sensor o OBD.

La aplicación mantiene uniformemente los datos recopilados de los últimos 30 segundos del viaje actual, muestreando y reteniendo hasta 151 elementos a 5 Hz. Abra el instrumento para leer la ventana existente; pausar el dibujo o reconstruir la instancia en ejecución sin perder la ventana y restablecerla cuando finalice el viaje, cambie los viajes o los modos de ejecución. La limpieza histórica de crecimiento o vencimiento no activará el script por separado; cuando desee que la curva avance en el tiempo, puede definir una entrada básica con el identificador elapsed y la fuente es la duración grabada.

Después de definir las entradas speed y elapsed, elapsed.value de cada muestra histórica se puede utilizar como abscisa y speed.value como ordenada; la marca de tiempo usa milisegundos y la duración registrada usa segundos. Siga faltando intervalos de prueba sin completar el historial con valores OBD posteriores. Las vistas previas utilizan entradas simuladas y los paneles utilizan datos reales.

validez de los datos

null significa que actualmente no hay lecturas disponibles y 0 es un valor válido. Al conservar estos dos estados, el instrumento puede mostrar realmente estacionamiento, interrupción de la conexión o ausencia temporal de prueba. Puede usar value == null ? '—' : value para manejar valores y evitar mostrar todas las mediciones faltantes como cero a través de value || 0.

Las asignaciones de texto pueden producir una cadena vacía o pueden devolver un número o null si no hay coincidencia, según la configuración del parámetro. View que acepta literales puede mostrar cadenas; Los valores involucrados en los cálculos y el formato de números primero deben verificar el tipo.

Al solucionar problemas de mediciones ausentes, verifique de acuerdo con la fuente de datos correspondiente al campo: velocidad básica para ver el estado de posicionamiento; Parámetro OBD para ver el dispositivo actual, los resultados de lectura de prueba y la configuración de parámetros. Una vez que la fuente de datos sea normal, verifique los campos y las expresiones de código seleccionadas por el instrumento.

Continuar con