# Exemplos de cálculo

O nó de atributo Initiate no IoT Logic oferece uma ampla gama de cálculos por meio de [Navixy IoT Logic Expression Language](https://app.gitbook.com/s/tx3J5BxnWyPV0nP2xr0z/technologies/navixy-iot-logic-expression-language). Este guia fornece exemplos práticos de cálculos comuns para ajudá-lo a extrair o máximo valor dos seus dados de IoT.

## Considerações importantes

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

* **Validade dos nomes de atributos**: Certifique-se de usar nomes de atributos corretos nos cálculos. Você pode consultar os nomes de atributos existentes usando [Data Stream Analyzer](https://www.navixy.com/docs/user/pt-br/guide/account/iot-logic/data-stream-analyzer), ou inseri-los com g[#short-syntax](https://www.navixy.com/docs/user/pt-br/guide/account/iot-logic/flow-management/managing-attributes#short-syntax "mention") usando [autocompletar](https://www.navixy.com/docs/user/pt-br/guide/account/iot-logic/flow-management/managing-attributes#autofill-attribute-names).
* **Validade dos dados**: Garanta que suas expressões tratem valores nulos potenciais ou leituras inválidas de forma adequada
* **Impacto no desempenho**: Cálculos complexos com muitas funções aninhadas podem afetar a velocidade de processamento para 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](https://www.navixy.com/docs/user/pt-br/guide/account/iot-logic/flow-management/managing-attributes#full-syntax)

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

## Cálculos básicos

### Conversões de unidade

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 utilizam medidas imperiais. Ao realizar este 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 a escala Fahrenheit. É especialmente valiosa para organizações multinacionais que atuam em regiões com diferentes padrões de medição.

### Cálculo de diferenças

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

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

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

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

{% hint style="info" %}
**Exemplo:** Para uma frota de caminhões refrigerados, esse cálculo pode identificar imediatamente quando a temperatura da carga começa a subir muito rápido, permitindo que os despachantes entrem em contato com os motoristas antes que mercadorias perecíveis sejam comprometidas. O atributo pode acionar 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 porta deixada aberta.
{% endhint %}

## Cálculos baseados em tempo

Cálculos de tempo ajudam 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:** Esse 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, esse cálculo pode ajudar a identificar problemas de conectividade com os rastreadores GPS. Se o tempo entre leituras aumentar subitamente 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 problemas antes que afetem a qualidade do serviço.
{% endhint %}

#### **Converter timestamp para 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

O IoT Logic suporta operações matemáticas sofisticadas por meio de suas funções matemáticas incorporadas.

### Arredondamento de valores

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

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

**Aplicação prática:** O arredondamento é valioso quando a precisão exata não é necessária ou quando se deseja reduzir ruído nas leituras de sensores. Por exemplo, arredondar dados de sensores ambientais pode ser suficiente para monitoramento climático geral, ao mesmo tempo em que reduz 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:** Em gestão de frotas, leituras de temperatura do motor frequentemente incluem casas decimais que não são significativas para alertas ao motorista ou agendamento de manutenção. Arredondar esses valores simplifica a exibição em painéis e torna os limiares de temperatura mais fáceis de definir. Por exemplo, 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:** Transformações logarítmicas são particularmente úteis para:

* Comprimir dados que abrangem várias ordens de magnitude em uma faixa mais manejável
* Converter relações exponenciais em lineares para análise mais fácil
* Trabalhar com certos tipos de sensores que possuem características de resposta logarítmica
* Cálculos de nível de som, onde decibéis são unidades logarítmicas
* Medições de pH em 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 frenagens bruscas. Isso facilita a criação de uma pontuação de segurança do motorista significativa que não seja excessivamente influenciada 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. Usar cálculos logarítmicos pode ajudar a traduzir essas leituras em porcentagens de nível de combustível mais precisas.
{% endhint %}

### Operações de raiz quadrada

**Calcular raiz quadrada de uma leitura**

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

**Aplicação prática:** Funções de raiz quadrada são valiosas 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 root mean square (RMS) para parâmetros elétricos
* Cálculos de distância em espaço multidimensional (por exemplo, trilateração para posicionamento)
* Normalizar certos tipos de dados de sensores

{% hint style="info" %}
**Exemplo:** Ao calcular a distância real entre dois pontos de GPS (latitude e longitude), é necessário usar a função de raiz quadrada como parte da fórmula de distância. Por exemplo, se você estiver calculando a distância que um veículo percorreu entre duas leituras de GPS usando a fórmula de distância euclidiana, a função de raiz quadrada é essencial. Outra aplicação comum é no cálculo da magnitude de eventos de vibração ou choque 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, que é útil para detectar impactos no veículo ou condições de estrada ruim.
{% endhint %}

## Operações combinadas

Você pode criar cálculos ainda mais complexos combinando múltiplas 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 é frequentemente 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 colocados por toda a área da carga. Esse cálculo fornece uma leitura de temperatura equilibrada que considera ambos os valores enquanto minimiza a influência de extremos. Em vez de acionar alertas com base em apenas um sensor (que pode ser afetado por abertura de portas), esse cálculo combinado oferece uma condição de temperatura geral 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 uma leitura de 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 gerente de frotas supervisiona veículos de vários fabricantes, cada um com diferentes leituras de sensores de combustível (ohms, volts, valores digitais brutos). Ao normalizar essas leituras diversas para uma escala percentual consistente, o gerente 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 %}
