Dados do instrumento
Leia dados de condução atuais e amostras históricas via $data e use os resultados para texto, gráficos e curvas. Este artigo explica a configuração dos dados, estrutura de leitura, parâmetros OBD e regras de atualização.
Interface de dados
O instrumento usa uma entrada definida via $data. $data.current fornece a entrada atual e $data.history fornece a sequência de amostragem dos últimos 30 segundos da viagem atual. O nome do campo vem do identificador de entrada do instrumento; por exemplo, nomeie a entrada de velocidade base speed, leia $data.current.speed; nomeie a entrada OBD como coolant, leia $data.current.coolant.
Valores equivalentes para velocidade, distância, tempo e OBD incluem value e unit. Por exemplo, { value: 42.3, unit: 'km/h' } contém valores numéricos e unidades; campos como posição e valor G fornecem seus respectivos componentes. Valores numéricos, texto, opções e itens de seleção retornam diretamente números, strings ou valores booleanos sem envolver uma camada de value. Consulte a API $data para regras completas.
Definir entrada e ligação nativa
Clique no nome do instrumento na parte superior do editor para abrir Ajustes do instrumento → Vínculos de entrada. Engrene em Configuração de parâmetros para definir o nome, identificador e tipo de entrada; retorne a ligação de entrada e preencha os valores nativos ou selecione seus próprios parâmetros de veículo para a entrada OBD. Os dados básicos são fornecidos automaticamente pelo aplicativo.
| tipo | Configuração e o que o script lê |
|---|---|
| Número | Defina o valor padrão e os limites superior e inferior opcionais; o script lê o número diretamente, como $data.current.limit. |
| Texto | Defina o texto padrão; o script lê a string diretamente, como $data.current.label. |
| Interruptor | Defina o estado padrão do switch; o script lê o valor booleano diretamente, como $data.current.showUnit. |
| Seleção | Defina texto opcional e padrões; o script lê a string selecionada, como $data.current.style. |
| Dados básicos | Selecione uma fonte como velocidade, valor G, posição ou tempo; a estrutura de leitura depende da fonte. |
| Dados OBD | Defina o tipo de valor esperado e selecione os parâmetros do dispositivo e do veículo na ligação de entrada; a leitura é { value, unit } ou null. |
O identificador de entrada é de 1 a 100 letras e números em inglês, começando com uma letra, e não pode ser repetido no mesmo instrumento; cada instrumento tem no máximo 256 entradas. O nome é usado para exibição da interface e o identificador é usado para código. A modificação do nome de exibição não altera o caminho de acesso, mas a modificação do identificador requer a modificação do código simultaneamente.
Por exemplo, depois de usar coolant para representar a temperatura do líquido refrigerante e vincular os parâmetros correspondentes de diferentes dispositivos, o código ainda lê $data.current.coolant. O editor fornece dicas de expressão e tipo com base na definição de entrada. O valor numérico padrão deve estar dentro dos limites superior e inferior, e os itens de seleção devem ter opções não duplicadas e não vazias e itens padrão válidos; corrija os campos correspondentes primeiro ao salvar avisos de erros.
leitura atual
O novo instrumento já contém a entrada básica de dados com identificador speed e fonte Velocidade; trabalhos existentes podem verificar esta definição em Configuração de parâmetros. Obtenha $data.current.speed em main() e você poderá usar o valor e a unidade dessa velocidade. O exemplo a seguir mostra o valor arredondado na parte superior e a unidade na parte inferior; quando nenhuma velocidade estiver disponível, — será exibido.
As entradas de velocidade base configuradas corretamente sempre retêm o objeto, value é null quando ausente e unit permanece km/h ou mph da configuração. == null Verifique se o valor está faltando. Quando a velocidade é zero, ainda exibe 0. O nome do campo é determinado pelo identificador de entrada; se for alterado para vehicleSpeed, o código também deverá ser alterado para $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
Primeiro conecte o dispositivo OBD e verifique se os parâmetros alvo produzem leituras válidas. Vá para Configuração de parâmetros e adicione a entrada Dados OBD, por exemplo. nome "Temperatura do líquido refrigerante", identificador coolant, tipo esperado selecione Numérico. Volte para Vínculos de entrada e selecione o parâmetro de temperatura do líquido refrigerante em Dispositivos para ele. O exemplo a seguir lê via $data.current.coolant sem usar o parâmetro UUID do veículo como nome do campo do script.
As leituras vinculadas e configuradas sempre contêm value e unit. Quando o dispositivo não está conectado, a leitura expira ou a consulta falha, value é null e unit ainda leva a configuração dos parâmetros salva pelo dispositivo selecionado; parâmetros sem unidade usam unit: null. Quando não está vinculado ou a configuração do dispositivo e dos parâmetros não existe mais, toda a entrada é null.
value pode ser um número ou uma string mapeada em texto. O tipo esperado é usado para editar prompts; uma ligação pode solicitar argumentos que retornem tipos diferentes, mas ainda serão vinculáveis e o valor real não será convertido como resultado. O tipo deve ser verificado antes da formatação do número. Após trocar o adaptador ou importar trabalhos de outras pessoas, religue a entrada correspondente para manter o 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>
);
}
Atualizações e amostragem histórica
Os medidores personalizados não possuem uma taxa de atualização fixa uniformemente. Quando a entrada atual, a definição de entrada ou o ambiente de exibição são alterados, o CapDrive executa novamente o script e chama main(); entradas idênticas são ignoradas. O script é executado em série e apenas a última entrada pendente é retida durante o processamento. A animação é realizada de forma independente pelo lado do desenho, sem executar scripts quadro a quadro e sem aumentar a frequência de amostragem do sensor ou OBD.
O App mantém uniformemente os dados coletados dos últimos 30 segundos da viagem atual, amostrando e retendo até 151 itens a 5 Hz. Abra o instrumento para ler a janela existente; pausar o desenho ou reconstruir a instância em execução sem perder a janela e redefini-la quando a viagem terminar, alternar viagens ou modos de execução. O crescimento histórico ou a limpeza de expiração não acionarão o script separadamente; quando quiser que a curva avance no tempo, você pode definir uma entrada básica com o identificador elapsed e a fonte sendo a duração registrada.
Após definir as entradas speed e elapsed, elapsed.value de cada amostra histórica pode ser usado como abscissa e speed.value como ordenada; o carimbo de data/hora usa milissegundos e a duração registrada usa segundos. Mantenha os intervalos de teste ausentes sem preencher o histórico com valores OBD subsequentes. As visualizações usam entradas simuladas e os painéis usam dados reais.
validade dos dados
null significa que atualmente não há leituras disponíveis e 0 é um valor válido. Ao manter esses dois estados, o instrumento pode realmente exibir estacionamento, interrupção de conexão ou ausência temporária de teste. Você pode usar value == null ? '—' : value para lidar com valores e evitar a exibição de todas as medidas ausentes como zero por meio de value || 0.
Os mapeamentos de texto podem produzir uma string vazia ou retornar um número ou null se não houver correspondência, dependendo da configuração do parâmetro. View que aceita literais pode exibir strings; valores envolvidos em cálculos e formatação de números devem primeiro verificar o tipo.
Ao solucionar problemas de testes faltantes, verifique de acordo com a fonte de dados correspondente ao campo: velocidade básica para visualizar o status do posicionamento; Parâmetro OBD para visualizar o dispositivo atual, resultados de leitura de teste e configuração de parâmetros. Depois que a fonte de dados estiver normal, verifique os campos e expressões de código selecionados pelo instrumento.