> 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/fr/guide/account/iot-logic/nodes/initiate-attribute-node/calculation-examples.md).

# Exemples de calcul

Exemples pratiques pour écrire des calculs d'attributs dans le langage d'expression IoT Logic. Inclut des conseils sur le nommage des attributs et la gestion sûre des valeurs nulles.

Le Nœud Initialiser un Attribut dans IoT Logic prend en charge un large éventail de calculs via [le langage d'expression Navixy IoT Logic](/docs/iot-logic-api/technologies/navixy-iot-logic-expression-language.md). Ce guide fournit des exemples pratiques de calculs courants pour vous aider à tirer le maximum de valeur de vos données IoT.

## Considérations importantes

Lorsque vous créez des calculs, gardez les points suivants à l’esprit :

* **Validité des noms d’attributs**: Veillez à utiliser les bons noms d’attributs dans les calculs. Vous pouvez consulter les noms d’attributs existants à l’aide de [Analyseur de données](/docs/user/fr/guide/account/iot-logic/data-stream-analyzer.md), ou les insérer avec [Gestion des attributs](/docs/user/fr/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#short-syntax) en utilisant [l’autocomplétion](/docs/user/fr/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names).
* **Validité des données**: Une formule qui lit une valeur que le paquet ne contient pas ne produit rien, et l'attribut n'a alors aucune valeur pour ce paquet. Protégez le calcul avec `!= null`, ou substituez une valeur de repli avec `??`. Voir [Valeurs manquantes dans les expressions](/docs/user/fr/guide/account/iot-logic/nodes/missing-values-in-expressions.md).
* **Impact sur les performances**: Des calculs complexes comportant de nombreuses fonctions imbriquées peuvent avoir un impact sur la vitesse de traitement des données à haute fréquence
* **Contraintes mathématiques**: Les fonctions telles que le logarithme et la racine carrée nécessitent des valeurs d'entrée positives
* **Références historiques**: Lors de l’utilisation de valeurs indexées (par ex., `value('param', 1, 'valid')`), assurez-vous de disposer de suffisamment de données historiques et utilisez [la syntaxe complète des expressions](/docs/user/fr/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#full-syntax)

{% hint style="info" %}
Les fonctions mathématiques peuvent être appliquées à n’importe quel paramètre numérique ou attribut calculé précédemment. Validez toujours vos calculs avec des données de test avant de les déployer dans des flux de production.
{% endhint %}

{% hint style="info" %}
Pour renseigner un attribut avec le nom de la Zone géographique dans laquelle se trouve un appareil, plutôt qu’avec un calcul, utilisez `geofenceName()`. Il s’agit d’une option payante, désactivée par défaut. Voir [Fonctions de zone géographique](/docs/user/fr/guide/account/iot-logic/nodes/geofence-functions.md).
{% endhint %}

## Calculs de base

### Conversions d’unités

La conversion de mesures entre différentes unités est l’une des opérations les plus courantes dans le traitement des données IoT.

#### **Conversion de vitesse (km/h en mph)**

```jexl
can_speed/1.609
```

**Application pratique :** Cette conversion standardise les données de vitesse du véhicule pour les régions utilisant le système impérial. En effectuant ce calcul dans IoT Logic plutôt que dans les applications en aval, vous garantissez une cohérence sur tous les systèmes qui consomment les données.

**Conversion de la température (Celsius en Fahrenheit)**

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

**Application pratique :** Cette conversion rend les relevés de température compréhensibles pour les utilisateurs plus familiers avec les mesures Fahrenheit. Elle est particulièrement utile pour les organisations multinationales qui opèrent dans des régions ayant des normes de mesure différentes.

### Calcul des écarts

Comparer les relevés actuels aux valeurs précédentes aide à identifier les changements et les tendances dans vos données.

#### **Détection des variations de température**

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

**Application pratique :** Ce calcul aide à détecter les fluctuations rapides de température qui peuvent indiquer des problèmes d’équipement ou des changements environnementaux. En créant un attribut dédié pour cette différence, vous pouvez configurer des Règles d’alertes pour les changements soudains sans traitement complexe en aval.

{% hint style="info" %}
**Exemple :** Pour une Flotte de camions réfrigérés, ce calcul peut identifier immédiatement quand la température de la cargaison commence à augmenter trop rapidement, ce qui permet aux répartiteurs de contacter les Conducteurs avant que les marchandises périssables ne soient compromises. L’attribut peut déclencher des Règles d’alertes lorsque la variation de température dépasse 3 degrés sur une courte période, ce qui peut indiquer une défaillance du système de refroidissement ou une porte laissée ouverte.
{% endhint %}

## Calculs basés sur le temps

Les calculs temporels vous aident à comprendre le comportement de l’appareil au fil du temps et à mesurer les schémas opérationnels.

### **Calcul du temps écoulé entre les dernières lectures valides**

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

**Application pratique :** Ce calcul mesure l’intervalle entre les transmissions de données consécutives, ce qui peut aider à identifier des problèmes de communication ou à vérifier que les appareils transmettent des données aux fréquences attendues. Cet exemple illustre le calcul entre les deux dernières lectures valides, mais il peut être adapté pour traiter n’importe quelles deux valeurs historiques.

{% hint style="info" %}
**Exemple :** Pour une flotte de taxis, ce calcul peut aider à identifier des problèmes de connectivité avec les trackers GPS. Si le temps entre les relevés augmente soudainement, passant de la valeur standard de 30 secondes à plusieurs minutes, cela peut indiquer une mauvaise couverture cellulaire ou des dysfonctionnements de l’appareil, ce qui permet aux équipes d’Entretien de traiter les problèmes avant qu’ils n’affectent la qualité du service.
{% endhint %}

### **Conversion de l’horodatage en un format lisible par l’humain**

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

**Application pratique :** La conversion des horodatages Unix au format ISO 8601 rend les données plus lisibles dans les journaux et les Rapports. Ce format est largement pris en charge par les outils d’analyse et les bases de données, ce qui simplifie l’intégration avec d’autres systèmes.

## Fonctions mathématiques avancées

IoT Logic prend en charge des opérations mathématiques sophistiquées grâce à ses fonctions mathématiques intégrées.

### Arrondi des valeurs

**Arrondir la température à l'entier le plus proche**

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

**Application pratique :** L'arrondi est utile lorsque la précision exacte n'est pas nécessaire ou lorsque vous souhaitez réduire le bruit dans les relevés des capteurs. Par exemple, arrondir les données du capteur environnemental peut suffire pour la surveillance générale du climat tout en réduisant les besoins de stockage. Cette fonction est également utile lors de la création de catégories ou de plages de valeurs (par exemple, regrouper les relevés de température par incréments de 5 degrés).

{% hint style="info" %}
**Exemple :** Dans la gestion de flotte, les relevés de température du moteur comprennent souvent des décimales qui n'ont pas de sens pour les règles d’alertes du conducteur ou l'ordonnancement de l'entretien. L'arrondi de ces valeurs simplifie l'affichage des tableaux de bord et facilite la définition des seuils de température. Par exemple, des règles d’alertes d'entretien peuvent être déclenchées lorsque la température arrondie du moteur dépasse 90 °C, plutôt que de gérer des valeurs précises comme 89,7 °C.
{% endhint %}

### Calculs logarithmiques

**Logarithme naturel d'une valeur**

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

**Application pratique :** Les transformations logarithmiques sont particulièrement utiles pour :

* Compresser des données couvrant plusieurs ordres de grandeur dans une plage plus facile à gérer
* Convertir des relations exponentielles en relations linéaires pour faciliter l'analyse
* Travailler avec certains types de capteurs qui présentent des caractéristiques de réponse logarithmique
* Calculs du niveau sonore, où les décibels sont des unités logarithmiques
* Mesures de pH dans la surveillance environnementale

{% hint style="info" %}
**Exemple :** Lorsque vous analysez le comportement du conducteur à l'aide d'un accéléromètre, la fonction logarithmique peut aider à normaliser les données d'accélération qui vont de légers mouvements à des événements de freinage brusque. Cela permet de créer plus facilement un score de sécurité du conducteur pertinent, qui ne soit pas excessivement faussé par des événements extrêmes occasionnels. Un autre exemple pratique est celui des capteurs de carburant qui ne fournissent pas de relevés linéaires. Certains capteurs de niveau de carburant présentent des valeurs de résistance non linéaires qui correspondent au niveau réel de carburant. L'utilisation de calculs logarithmiques peut aider à traduire ces relevés en pourcentages de niveau de carburant plus précis.
{% endhint %}

### Opérations de racine carrée

**Calculer la racine carrée d'un relevé**

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

**Application pratique :** Les fonctions de racine carrée sont utiles pour :

* Convertir la puissance en amplitude dans les mesures électriques
* Calculer les écarts types dans l'analyse statistique des données du capteur
* Déterminer les valeurs efficaces (RMS) des paramètres électriques
* Calculs de distance dans un espace multidimensionnel (par exemple, trilatération pour le positionnement)
* Normaliser certains types de données de capteurs

{% hint style="info" %}
**Exemple :** Lors du calcul de la distance réelle entre deux points GPS (latitude et longitude), vous devez utiliser la fonction racine carrée dans le cadre de la formule de distance. Par exemple, si vous calculez la distance parcourue par un véhicule entre deux relevés GPS à l'aide de la formule de distance euclidienne, la fonction racine carrée est indispensable. Une autre application courante consiste à calculer l'amplitude d'événements de vibration ou de choc à partir de plusieurs axes d'accéléromètre (X, Y, Z). La racine carrée de la somme des valeurs mises au carré de chaque axe donne l'amplitude globale de vibration, ce qui est utile pour détecter les impacts du véhicule ou les conditions de route dégradées.
{% endhint %}

## Opérations combinées

Vous pouvez créer des calculs encore plus complexes en combinant plusieurs fonctions et opérations.

### **Moyenne géométrique avec arrondi**

{% code overflow="wrap" %}

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

{% endcode %}

**Application pratique :** Ce calcul calcule la moyenne géométrique des relevés de deux capteurs de température et arrondit le résultat pour fournir une valeur plus nette. La moyenne géométrique est souvent plus appropriée qu'une moyenne arithmétique lorsqu'il s'agit de taux, de rapports ou de mesures pour lesquelles la multiplication est la manière naturelle de combiner les valeurs.

{% hint style="info" %}
**Exemple :** Dans un scénario de transport frigorifique, vous pouvez avoir plusieurs capteurs de température placés dans toute la zone de chargement. Ce calcul fournit un relevé de température équilibré qui tient compte des deux valeurs tout en minimisant l'influence des valeurs aberrantes extrêmes. Plutôt que de déclencher des règles d’alertes sur la base d'un seul capteur (qui pourrait être affecté par l'ouverture des portes), ce calcul combiné donne une condition de température globale plus représentative pour la cargaison sensible.
{% endhint %}

### **Calcul de valeur standardisée**

{% 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 %}

**Application pratique :** Cela normalise un relevé de capteur sur une échelle de pourcentage de 0 à 100 %, ce qui permet des comparaisons standardisées entre différents capteurs ayant des plages variées. C'est particulièrement utile pour créer des tableaux de bord uniformes ou déclencher des alertes sur la base de valeurs relatives plutôt que de mesures absolues.

{% hint style="info" %}
**Exemple :** Un gestionnaire de flotte supervise des véhicules de plusieurs constructeurs, chacun ayant des relevés de capteurs de carburant différents (ohms, volts, valeurs numériques brutes). En normalisant ces relevés divers sur une échelle de pourcentage cohérente, le gestionnaire peut appliquer les mêmes alertes de faible niveau de carburant à l'ensemble de la flotte et générer des rapports standardisés de consommation de carburant sans avoir à tenir compte des caractéristiques spécifiques des capteurs de chaque modèle de véhicule.
{% endhint %}

## Opérations sur les chaînes

Les opérations sur les chaînes vous permettent de combiner plusieurs valeurs d'attributs en une seule chaîne de sortie.

### Concaténation des valeurs d'attributs

La combinaison de valeurs provenant de plusieurs attributs est utile lorsque vous devez consolider des données issues de plusieurs sources dans un seul champ pour l'affichage ou la transmission.

```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)
```

**Application pratique :** Les appareils dotés d'une capacité de balayage BLE peuvent détecter simultanément plusieurs capteurs périphériques, mais tous les emplacements de capteurs ne sont pas toujours occupés. Ce calcul produit une liste propre, séparée par des virgules, des capteurs actifs, en ignorant automatiquement les emplacements non appariés. Le résultat est prêt à être affiché ou transmis à des systèmes externes sans nettoyage supplémentaire.

{% hint style="info" %}
**Exemple** : Un camion frigorifique prend en charge jusqu'à huit capteurs de température BLE placés dans toute la zone de chargement, mais seuls trois sont actuellement installés. Au lieu de produire « Sensor A, Sensor B, Sensor C, , , , , » avec des entrées vides pour les emplacements inutilisés, `util:joinNonNull` produit « Sensor A, Sensor B, Sensor C », une liste propre qui se met à jour automatiquement lorsque des capteurs sont ajoutés ou retirés. Si vous devez conserver les emplacements vides dans la sortie, utilisez `util:join` à la place, qui traite les valeurs nulles comme des chaînes vides plutôt que de les ignorer.
{% 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/fr/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.
