> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/user/pt-br/guide/account/iot-logic/nodes/initiate-attribute-node/calculation-examples.md).

# Exemplos de cálculo

Exemplos práticos para escrever cálculos de atributos na linguagem de expressão do IoT Logic. Inclui orientações sobre nomeação de atributos e tratamento seguro de valores nulos.

O nó Iniciar Atributo em IoT Logic oferece uma ampla gama de cálculos por meio da [Linguagem de Expressões do Navixy IoT Logic](/docs/iot-logic-api/technologies/navixy-iot-logic-expression-language.md). Este guia fornece exemplos práticos de cálculos comuns para ajudar você a extrair o máximo valor dos seus dados de IoT.

## Considerações importantes

Ao criar cálculos, mantenha estes pontos em mente:

* **Validade dos nomes de atributos**: Certifique-se de usar nomes de atributos corretos nos cálculos. Você pode consultar nomes de atributos existentes usando [Analisador de dados](/docs/user/pt-br/guide/account/iot-logic/data-stream-analyzer.md), ou inseri-los com [Gerenciando atributos](/docs/user/pt-br/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#short-syntax) usando [autocompletar](/docs/user/pt-br/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names).
* **Validade dos dados**: Uma fórmula que lê um valor que o pacote não carrega não produz nada, e o atributo então fica sem valor para esse pacote. Proteja o cálculo com `!= null`, ou substitua por um valor alternativo com `??`. Veja [Valores ausentes em expressões](/docs/user/pt-br/guide/account/iot-logic/nodes/missing-values-in-expressions.md).
* **Impacto no desempenho**: Cálculos complexos com muitas funções aninhadas podem impactar a velocidade de processamento de dados de alta frequência
* **Restrições matemáticas**: Funções como logaritmo e raiz quadrada exigem valores de entrada positivos
* **Referências históricas**: Ao usar valores indexados (por exemplo, `value('param', 1, 'valid')`), certifique-se de ter dados históricos suficientes e use [sintaxe completa da expressão](/docs/user/pt-br/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#full-syntax)

{% hint style="info" %}
Funções matemáticas podem ser aplicadas a qualquer parâmetro numérico ou atributo calculado anteriormente. Sempre valide seus cálculos com dados de teste antes de implantá-los em fluxos de produção.
{% endhint %}

{% hint style="info" %}
Para preencher um atributo com o nome da geocerca em que um dispositivo está, em vez de um cálculo, use `geofenceName()`. Trata-se de uma opção paga, desativada por padrão. Veja [Funções de geocerca](/docs/user/pt-br/guide/account/iot-logic/nodes/geofence-functions.md).
{% endhint %}

## Cálculos básicos

### Conversões de unidades

Converter medições entre diferentes unidades é uma das operações mais comuns no processamento de dados de IoT.

#### **Conversão de velocidade (km/h para mph)**

```jexl
can_speed/1.609
```

**Aplicação prática:** Esta conversão padroniza os dados de velocidade do veículo para regiões que usam medições imperiais. Ao realizar esse cálculo no IoT Logic em vez de em aplicações posteriores, você garante consistência em todos os sistemas que consomem os dados.

**Conversão de temperatura (Celsius para Fahrenheit)**

```jexl
temperature * 1.8 + 32
```

**Aplicação prática:** Esta conversão torna as leituras de temperatura compreensíveis para usuários mais familiarizados com Fahrenheit. Ela é especialmente valiosa para organizações multinacionais que operam em regiões com diferentes padrões de medida.

### Calcular diferenças

Comparar leituras atuais com valores anteriores ajuda a identificar mudanças e tendências nos seus dados.

#### **Detectar variação de temperatura**

```jexl
temperature - value('temperature', 1, 'valid')
```

**Aplicação prática:** Este cálculo ajuda a detectar flutuações rápidas de temperatura que podem indicar problemas no equipamento ou mudanças ambientais. Ao criar um atributo dedicado para essa diferença, você pode configurar alertas para mudanças repentinas sem processamento subsequente complexo.

{% hint style="info" %}
**Exemplo:** Para uma frota de caminhões refrigerados, este cálculo pode identificar imediatamente quando a temperatura da carga começa a subir rápido demais, permitindo que os despachantes entrem em contato com os motoristas antes que as mercadorias perecíveis sejam comprometidas. O atributo pode disparar alertas quando a variação de temperatura exceder 3 graus em um curto período, o que pode indicar uma falha no sistema de refrigeração ou uma porta deixada aberta.
{% endhint %}

## Cálculos baseados em tempo

Cálculos de tempo ajudam você a entender o comportamento do dispositivo ao longo do tempo e medir padrões operacionais.

### **Encontrar o tempo decorrido entre as últimas leituras válidas**

```jexl
srvTime('avl_25', 0, 'valid') - srvTime('avl_25', 1, 'valid')
```

**Aplicação prática:** Este cálculo mede o intervalo entre transmissões de dados consecutivas, o que pode ajudar a identificar problemas de comunicação ou validar se os dispositivos estão reportando nas frequências esperadas. Este exemplo mostra o cálculo entre as duas últimas leituras válidas, mas pode ser ajustado para lidar com quaisquer dois valores históricos.

{% hint style="info" %}
**Exemplo:** Para uma Frota de táxis, este cálculo pode ajudar a identificar problemas de conectividade com os rastreadores GPS. Se o tempo entre as leituras aumentar repentinamente do padrão de 30 segundos para vários minutos, isso pode indicar áreas com cobertura celular ruim ou mau funcionamento do dispositivo, permitindo que as equipes de Manutenção resolvam os problemas antes que eles afetem a qualidade do serviço.
{% endhint %}

### **Convertendo carimbo de data/hora para um formato legível por humanos**

```jexl
dtFormat(genTime('can_fuel_1', 0, 'all'))
```

**Aplicação prática:** Converter timestamps Unix para o formato ISO 8601 torna os dados mais legíveis em logs e Relatórios. Esse formato é amplamente suportado por ferramentas de análise e bancos de dados, simplificando a integração com outros sistemas.

## Funções matemáticas avançadas

IoT Logic oferece suporte a operações matemáticas sofisticadas por meio de suas funções matemáticas integradas.

### Arredondamento de valores

**Arredondar a temperatura para o inteiro mais próximo**

```jexl
math:round(value('temperature_2', 0, 'valid'))
```

**Aplicação prática:** Arredondar é valioso quando a precisão exata não é necessária ou quando você quer reduzir o ruído nas leituras dos sensores. Por exemplo, arredondar os dados de sensores ambientais pode ser suficiente para o monitoramento climático geral, ao mesmo tempo em que reduz os requisitos de armazenamento. Essa função também é útil ao criar categorias ou faixas de valores (por exemplo, agrupar leituras de temperatura em incrementos de 5 graus).

{% hint style="info" %}
**Exemplo:** Na Gestão de Frotas, as leituras de temperatura do motor frequentemente incluem casas decimais que não são relevantes para alertas do Motorista ou Agendamento de Manutenção. Arredondar esses valores simplifica a exibição nos painéis e torna os limites de temperatura mais fáceis de definir. Por exemplo, os Alertas de Manutenção podem ser acionados quando a temperatura arredondada do motor exceder 90°C, em vez de lidar com valores precisos como 89,7°C.
{% endhint %}

### Cálculos logarítmicos

**Logaritmo natural de um valor**

```jexl
math:log(value('temperature_2', 0, 'valid'))
```

**Aplicação prática:** As transformações logarítmicas são particularmente úteis para:

* Comprimir dados que abrangem várias ordens de magnitude em uma faixa mais gerenciável
* Converter relações exponenciais em lineares para facilitar a análise
* Trabalhar com certos tipos de sensores que possuem características de resposta logarítmica
* Cálculos de nível sonoro, em que os decibéis são unidades logarítmicas
* Medições de pH no monitoramento ambiental

{% hint style="info" %}
**Exemplo:** Ao analisar o comportamento do Motorista com um Acelerômetro, a função logarítmica pode ajudar a normalizar dados de aceleração que variam de movimentos leves a eventos de frenagem brusca. Isso facilita a criação de uma pontuação significativa de Segurança do Motorista que não fique excessivamente distorcida por eventos extremos ocasionais. Outro exemplo prático é ao trabalhar com sensores de Combustível que não fornecem leituras lineares. Alguns sensores de nível de Combustível têm valores de resistência não lineares que correspondem ao nível real de Combustível. O uso de cálculos logarítmicos pode ajudar a transformar essas leituras em percentuais de nível de Combustível mais precisos.
{% endhint %}

### Operações de raiz quadrada

**Calcular a raiz quadrada de uma leitura**

```jexl
math:sqrt(value('temperature_2', 0, 'valid'))
```

**Aplicação prática:** As funções de raiz quadrada são úteis para:

* Converter entre potência e amplitude em medições elétricas
* Calcular desvios padrão na análise estatística de dados de sensores
* Determinar valores de raiz quadrada média (RMS) para parâmetros elétricos
* Cálculos de distância em espaço multidimensional (por exemplo, trilateração para posicionamento)
* Normalizando certos tipos de dados de sensores

{% hint style="info" %}
**Exemplo:** Ao calcular a distância real entre dois pontos de GPS (latitude e longitude), você precisa usar a função raiz quadrada como parte da fórmula de distância. Por exemplo, se você estiver calculando a distância percorrida por um veículo entre duas leituras de GPS usando a fórmula de distância euclidiana, a função raiz quadrada é essencial. Outra aplicação comum é calcular a magnitude de eventos de vibração ou impacto a partir de múltiplos eixos do acelerômetro (X, Y, Z). A raiz quadrada da soma dos valores ao quadrado de cada eixo fornece a magnitude geral da vibração, o que é útil para detectar impactos no veículo ou condições de estrada irregulares.
{% endhint %}

## Operações combinadas

Você pode criar cálculos ainda mais complexos combinando várias funções e operações.

### **Média geométrica com arredondamento**

{% code overflow="wrap" %}

```jexl
math:round(math:sqrt(value('temperature_1', 0, 'valid') * value('temperature_2', 0, 'valid')))
```

{% endcode %}

**Aplicação prática:** Este cálculo computa a média geométrica das leituras de dois sensores de temperatura e arredonda o resultado para fornecer um valor mais limpo. A média geométrica costuma ser mais apropriada do que uma média aritmética ao lidar com taxas, razões ou medições em que a multiplicação é a forma natural de combinar valores.

{% hint style="info" %}
**Exemplo:** Em um cenário de transporte refrigerado, você pode ter vários sensores de temperatura posicionados ao longo da área de carga. Este cálculo fornece uma leitura de temperatura equilibrada que considera ambos os valores, ao mesmo tempo que minimiza a influência de valores discrepantes extremos. Em vez de disparar alertas com base em apenas um sensor (que pode ser afetado pela abertura das portas), esse cálculo combinado oferece uma condição geral de temperatura mais representativa para a carga sensível.
{% endhint %}

### **Cálculo de valor padronizado**

{% code overflow="wrap" %}

```jexl
(value('sensor_reading', 0, 'valid') - value('sensor_min', 0, 'valid')) / (value('sensor_max', 0, 'valid') - value('sensor_min', 0, 'valid')) * 100
```

{% endcode %}

**Aplicação prática:** Isso normaliza a leitura de um sensor para uma escala percentual de 0-100%, permitindo comparações padronizadas entre diferentes sensores com faixas variadas. Isso é particularmente útil para criar painéis uniformes ou acionar Alertas com base em valores relativos, em vez de medições absolutas.

{% hint style="info" %}
**Exemplo:** Um gestor de Frota supervisiona Veículos de vários fabricantes, cada um com leituras diferentes do sensor de Combustível (ohms, volts, valores digitais brutos). Ao normalizar essas leituras diversas para uma escala percentual consistente, o gestor pode aplicar os mesmos Alertas de baixo nível de Combustível em toda a Frota e gerar Relatórios padronizados de Consumo de combustível sem precisar considerar as características específicas do sensor de cada modelo de veículo.
{% endhint %}

## Operações com strings

As operações com strings permitem combinar vários valores de atributos em uma única saída de string.

### Unir valores de atributos

Combinar valores de vários atributos é útil quando você precisa consolidar dados de várias fontes em um único campo para exibição ou transmissão.

```jexl
util:joinNonNull(', ', ble_name_1, ble_name_2, ble_name_3, ble_name_4, ble_name_5, ble_name_6, ble_name_7, ble_name_8)
```

**Aplicação prática:** Dispositivos com capacidade de escaneamento BLE podem detectar vários sensores periféricos simultaneamente, mas nem todos os slots de sensores estão sempre ocupados. Esse cálculo produz uma lista limpa de sensores ativos, separada por vírgulas, ignorando automaticamente slots sem pareamento. O resultado está pronto para exibição ou envio a sistemas externos sem limpeza adicional.

{% hint style="info" %}
**Exemplo**: Um caminhão refrigerado suporta até oito sensores de temperatura BLE distribuídos pela área de carga, mas apenas três estão instalados no momento. Em vez de produzir "Sensor A, Sensor B, Sensor C, , , , , " com entradas vazias para os slots não utilizados, `util:joinNonNull` gera "Sensor A, Sensor B, Sensor C", uma lista limpa que é atualizada automaticamente à medida que sensores são adicionados ou removidos. Se você precisar que posições vazias sejam preservadas na saída, use `util:join` em vez disso, que trata valores nulos como cadeias de caracteres vazias em vez de ignorá-los.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://navixy.com/docs/user/pt-br/guide/account/iot-logic/nodes/initiate-attribute-node/calculation-examples.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
