> 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ção sobre nomeação de atributos e tratamento seguro de valores nulos.

O Nó Iniciar Atributo no IoT Logic oferece suporte a uma ampla variedade de cálculos por meio de [Linguagem de Expressão do Navixy IoT Logic](/docs/iot-logic-api/technologies/navixy-iot-logic-expression-language.md). Este guia apresenta 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 estes pontos em mente:

* **Validade dos nomes dos atributos**: Certifique-se de usar os nomes de atributos corretos nos cálculos. Você pode consultar os nomes de atributos existentes usando [Analisador de dados](/docs/user/pt-br/guide/account/iot-logic/data-stream-analyzer.md), ou inseri-los com [Gerenciar atributos](/docs/user/pt-br/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#short-syntax) usando [preenchimento automático](/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 contém não produz nada, e o atributo então não tem valor para esse pacote. Proteja o cálculo com `!= null`, ou substitua por um valor de fallback 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 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 que você tenha dados históricos suficientes e use [sintaxe de expressão completa](/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 usar um cálculo, use `geofenceName()`. É uma opção paga, desativada por padrão. Consulte [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 medidas 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:** Essa conversão padroniza os dados de velocidade do veículo para regiões que usam medidas 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:** Essa conversão torna as leituras de temperatura compreensíveis para usuários mais familiarizados com as medidas em Fahrenheit. É especialmente valiosa para organizações multinacionais que operam em regiões com diferentes padrões de medição.

### Calcular diferenças

Comparar as leituras atuais com valores anteriores ajuda a identificar alterações e tendências nos 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 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 complexo em aplicações posteriores.

{% 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 rápido demais, permitindo que os despachantes entrem em contato com os motoristas antes que os produtos perecíveis sejam comprometidos. 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 uma porta deixada aberta.
{% endhint %}

## Cálculos baseados em tempo

Os cálculos de tempo ajudam você a entender o comportamento do dispositivo ao longo do tempo e a 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 consecutivas de dados, o que pode ajudar a identificar problemas de comunicação ou validar que os dispositivos estão enviando dados nas frequências esperadas. Este exemplo demonstra 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 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 timestamp para formato legível por humanos**

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

**Aplicação prática:** A conversão de carimbos de data/hora 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

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

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

**Aplicação prática:** Arredondar é valioso quando não é necessária precisão exata ou quando você quer reduzir o ruído nas leituras dos sensores. Por exemplo, arredondar 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 da temperatura do motor geralmente incluem casas decimais que não são significativas para alertas do motorista ou para o 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, alertas de manutenção podem ser acionados quando a temperatura arredondada do motor ultrapassar 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 gerenciável
* Converter relações exponenciais em lineares para facilitar a análise
* Trabalhar com certos tipos de sensores que têm características de resposta logarítmica
* Cálculos de nível sonoro, em que 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 pequenos movimentos a eventos de frenagem brusca. Isso facilita a criação de uma pontuação 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 converter essas leituras em porcentagens mais precisas do nível de combustível.
{% endhint %}

### Operações com 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 RMS (valor quadrático médio) 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 GPS (latitude e longitude), você precisa usar a função de raiz quadrada como parte da fórmula da 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 da distância euclidiana, a função de raiz quadrada é essencial. Outra aplicação comum é calcular a magnitude de eventos de vibração ou choque a partir de vários 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 calcula 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 maneira natural de combinar valores.

{% hint style="info" %}
**Exemplo:** Em um cenário de transporte refrigerado, você pode ter vários sensores de temperatura distribuídos por toda a área de carga. Esse cálculo fornece uma leitura de temperatura equilibrada que considera ambos os valores ao mesmo tempo, minimizando a influência de valores discrepantes extremos. Em vez de acionar 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 uma leitura de sensor para uma escala percentual de 0 a 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 frota 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 dos sensores 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 textual.

### Unindo 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 varredura BLE podem detectar vários sensores periféricos simultaneamente, mas nem todos os slots de sensor estão sempre ocupados. Esse cálculo produz uma lista limpa de sensores ativos, separada por vírgulas, pulando automaticamente os slots não pareados. O resultado fica pronto para exibição ou encaminhamento 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` produz "Sensor A, Sensor B, Sensor C", uma lista limpa que se atualiza automaticamente conforme os sensores são adicionados ou removidos. Se você precisar manter posições vazias na saída, use `util:join` em vez disso, que trata valores nulos como cadeias 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
