Nouveau : le pare-feu IA surveille chaque module et explique chaque incident en termes simples. Découvrez comment ça marche

Valeurs dérivées

Calculez de nouvelles clés de télémétrie dans un flux : conversions d'unités, codes d'état, consommation à partir de compteurs, débits, valeurs combinées, et enregistrez-les avec Save telemetry.

Une valeur dérivée est une clé que vos appareils n’envoient pas, mais que vous calculez à partir de ce qu’ils envoient : une température dans une autre unité, un code d’état, la consommation depuis la dernière mesure, un débit. Vous la calculez dans un flux et l’enregistrez avec Save telemetry, afin qu’elle soit tracée, résumée et soumise aux alarmes comme n’importe quelle autre clé.

La règle : dériver dans le message de l’appareil lui-même

Save telemetry n’enregistre des valeurs que pour l’appareil qui a envoyé le message (l’originator du message). Il refuse tout autre message avec not_a_device. Par conséquent :

  • Dérivez les valeurs dans le flux racine qui reçoit les messages de l’appareil, ou dans un flux auquel la racine transmet le message avec Run flow (le message, et son appareil, restent les mêmes).
  • Un flux démarré par un déclencheur Schedule, Inject, Event ou Named timer a pour originator l’organisation (ou le flux), et non un appareil. Il ne peut pas enregistrer de télémétrie d’appareil.
  • Une valeur dérivée est enregistrée par défaut à l’heure de la mesure, afin de correspondre à la mesure dont elle provient.

Où placer les étapes

Dans le flux racine par défaut, la télémétrie va du commutateur Message type (sortie telemetry) vers Save telemetry. Insérez vos blocs sur ce fil :

Device messages → Alarm rules → Message type ─ telemetry → [your blocks] → Save telemetry

Chaque message de télémétrie contient un enregistrement : msg.payload est un objet plat tel que {"temperature": 21.5, "humidity": 40}. Ajoutez vos clés à msg.payload et toutes les clés sont enregistrées ensemble.

Si les règles d’alarme doivent aussi voir la clé dérivée, placez vos blocs avant le bloc Alarm rules, et uniquement sur les messages de télémétrie (par exemple après un Switch sur msg.metadata.msgType).

Tous les appareils n’envoient pas chaque clé dans chaque message. Commencez votre branche par un contrôle (par exemple un Switch avec nempty sur msg.payload.power), sinon le bloc de calcul échoue ou écrit null.

Exemple : conversion d’unité

Enregistrer temperature_f à côté de temperature :

  1. Ajoutez un bloc Calculate. expr : round(msg.payload.temperature * 1.8 + 32, 1). target : msg.payload.temperature_f.
  2. Reliez-le avant Save telemetry.

Utilisez un bloc Scale pour une conversion linéaire d’étendue, par exemple un signal 4–20 mA vers 0–10 bar (in_min 4, in_max 20, out_min 0, out_max 10, sur le chemin propre à la clé).

Exemple : code d’état à partir de plusieurs valeurs

Enregistrer status sous forme de nombre pour les graphiques et les couleurs de site : 2 = critique, 1 = avertissement, 0 = normal.


  1. Ajoutez un bloc Calculate avec target msg.payload.status_code et expr :
    msg.payload.temperature > 8 ? 2 : (msg.payload.temperature > 6 ? 1 : 0)

  2. Facultativement, un second Calculate avec target msg.payload.status et expr msg.payload.status_code == 2 ? "critical" : (msg.payload.status_code == 1 ? "warning" : "ok") pour les vues de site 2D et 3D, qui lisent une clé status.

Exemple : consommation à partir d’un compteur

Un compteur envoie une valeur croissante energy_kwh. Enregistrez la consommation depuis la mesure précédente sous la forme energy_delta :

  1. Ajoutez un bloc Delta. Input : msg.payload.energy_kwh. Output : msg.payload.energy_delta. Period : msg.payload.period_ms.
  2. Seed : latest, afin que le premier message après un déploiement mesure à partir de la dernière valeur enregistrée au lieu de donner 0.
  3. When negative (on_negative) : zero si le compteur peut redémarrer ; ainsi un redémarrage écrit 0 et la nouvelle valeur devient la nouvelle référence.
  4. Reliez out à Save telemetry. Reliez aussi other (messages sans la clé) directement à Save telemetry, afin que les autres mesures continuent d’être enregistrées.

Le bloc Delta conserve une valeur précédente par appareil. Pour une consommation horaire ou journalière, vous n’avez pas besoin d’une clé dérivée : lisez le compteur brut avec l’agrégat increase. Voir Aggregates and rollups.

Exemple : un débit

À partir de l’exemple Delta, ajoutez un Calculate : target msg.payload.power_kw, expr msg.payload.period_ms > 0 ? msg.payload.energy_delta / (msg.payload.period_ms / 3600000) : 0. Il s’agit de la puissance moyenne depuis la mesure précédente.

Exemple : combiner avec une valeur enregistrée

Pour calculer une valeur à partir de ce message et d’une autre clé envoyée auparavant par l’appareil (par exemple level maintenant et capacity envoyée une fois par jour) :

  1. Ajoutez un bloc Latest values. keys : capacity. target : msg.metadata.latest. When data is missing : skip.
  2. Ajoutez un Calculate : target msg.payload.fill_pct, expr round(msg.payload.level / msg.metadata.latest.capacity * 100, 1).

Les valeurs sous msg.metadata ne sont jamais enregistrées ; seul msg.payload l’est. Pour les valeurs qui appartiennent à l’appareil plutôt qu’à une mesure (une capacité, une limite), privilégiez un attribut serveur et lisez-le avec Device details.

Exemple : lissage

Un bloc Statistics (window count, size 10, outputs avg) remplace msg.payload par la moyenne des 10 dernières valeurs. Pour conserver l’enregistrement d’origine, utilisez un script, ou calculez la moyenne sur une branche séparée et enregistrez-la là. Les moyennes dérivées sont rarement nécessaires : les graphiques peuvent calculer la moyenne avec l’agrégat avg.

Points à garder à l’esprit

SujetDétail
Limite de clésChaque clé dérivée est une nouvelle clé et compte dans la limite de clés de votre forfait. Voir Telemetry keys.
Blocs de scriptUn bloc Script peut tout calculer, mais compte dans les blocs de script de votre forfait. Privilégiez Calculate, Change et Delta.
MémoireDelta, Statistics et les blocs similaires mémorisent des valeurs par appareil. Déployer une modification des réglages d’un tel bloc vide sa mémoire.
Données tardivesLes messages tardifs passent par le flux racine et sont enregistrés, valeurs dérivées comprises.
TestsTest un flux avec un message d’exemple avant de le déployer : rien n’est enregistré lors d’un test. Voir Versions, testing and rollback.
Autres enregistrementsSur l’hôte General, le bloc Save reading enregistre les mesures d’autres types d’enregistrements qui acceptent des écritures depuis les flux (par exemple les compteurs d’actifs, si votre forfait les inclut). Les données des appareils passent toujours par Save telemetry.

Voir aussi IoT data blocks, Data transform blocks et le Flow cookbook.