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

Livre de recettes des flux

Dix flux à construire : filtre à bande morte, consommation de compteur, watchdog de capteur silencieux, transmission, clés d'état, alarmes par e-mail et SMS, mode nuit et plus.

Chaque recette indique les blocs, leurs réglages et l’endroit où les câbler. Les recettes 1 à 5 et 8 à 9 vont dans un flux racine sur l’hôte IoT (la racine à l’échelle du locataire ou une racine de profil) ; insérez-les sur la sortie telemetry du commutateur Message type, avant ou après Save telemetry selon l’indication. Testez chaque modification avec Test avant de déployer. Voir The flow editor.

1. Stocker une valeur uniquement lorsqu’elle change suffisamment

Un capteur de niveau envoie une valeur toutes les 10 secondes, mais un changement inférieur à 0,5 cm n’a pas d’importance.

Message type ─telemetry→ Only changes → Save telemetry
  • Only changes : propriété msg.payload.level_cm, mode deadband, valeur 0.5, first activé. Clé : laissez la valeur par défaut (une mémoire par appareil).
  • Les enregistrements sans level_cm doivent quand même être sauvegardés : placez d’abord un Switch (propriété msg.payload.level_cm, règle nempty), envoyez sa sortie de règle vers Only changes et sa sortie otherwise directement vers Save telemetry.

Cela réduit les points stockés, pas les messages comptés. Pour réduire les messages, modifiez la fréquence de remontée de l’appareil. Voir Message quota and usage.

2. Consommation d’un compteur susceptible de redémarrer

Un compteur d’eau envoie une valeur volume_m3 croissante ; après une coupure de courant, il redémarre à 0.

Message type ─telemetry→ Delta ─out→ Save telemetry
                              └other→ Save telemetry
  • Delta : entrée msg.payload.volume_m3, sortie msg.payload.volume_delta_m3, on_negative zero, seed latest, arrondi à 3.

Pour une consommation horaire ou quotidienne, vous pouvez aussi tracer le compteur brut avec l’agrégat increase. Voir Derived values.

3. Alarme lorsqu’un capteur ne répond plus

Déclenchez un avertissement lorsqu’un appareil cesse d’envoyer temperature pendant 15 minutes, et effacez-le lorsqu’il renvoie des données.

Message type ─telemetry→ Switch (msg.payload.temperature nempty) → Watchdog ─timeout→ Raise alarm
                                                                     └ok→ Clear alarm
  • Watchdog : ms 15 min, clé msg.originator (par défaut), repeat désactivé.
  • Raise alarm : alarme temperature_silent, gravité warning, texte No temperature for 15 minutes.
  • Clear alarm : alarme temperature_silent.
  • Gardez la sortie du Switch également reliée à Save telemetry, ou câblez la branche watchdog à côté de celle-ci.

Un watchdog commence à surveiller un appareil à son premier message après le déploiement. Pour les appareils totalement hors ligne, utilisez aussi une règle d’alarme hors ligne. Voir Offline alarms.

4. Transmettre chaque mesure à votre serveur

Save telemetry → HTTP request

  1. Créez une connexion HTTP endpoint vers https://ingest.example.com avec authentification bearer. Voir Connections and secrets.

  2. HTTP request : méthode POST, chemin /readings, corps template, template_format json, template :
    {"device": {{ msg.metadata.deviceName }}, "ts": {{ msg.metadata.recordTs }}, "values": {{ msg.payload }}}

  3. envoi send tardif, afin qu’un retard accumulé après une panne soit lui aussi transmis.

  4. Reliez la sortie error de la requête à un bloc System log (texte forward failed: {{ msg.error.code }}).

Un câblage après Save telemetry ne transmet que ce qui a été stocké. Pour de nombreux appareils, placez un Batch (count 50) et un Join (auto, array) avant la requête afin d’envoyer des groupes.

5. Une clé d’état pour les vues de site et les graphiques

Les vues de site colorent les pièces selon une clé status. Stockez-en une dérivée de la température :

Message type ─telemetry→ Switch (msg.payload.temperature nempty) → Calculate → Save telemetry
  • Calculate : cible msg.payload.status, expr msg.payload.temperature > 8 ? 2 : (msg.payload.temperature > 6 ? 1 : 0).

Les vues de site interprètent 2 comme critique et 1 comme avertissement. En tant que nombre, status peut aussi être tracé et agrégé. Voir Site views.

6. Envoyer un e-mail et un SMS à une adresse d’astreinte lorsqu’une alarme s’ouvre

Un flux (et non une racine) sur l’hôte IoT :

Device message (types: alarm) → Switch (msg.metadata.alarm.transition) ─created→ Rate limit → Notify
  • Device message : types alarm (cochez-le par son nom), profils : ceux qui vous concernent.
  • Switch : propriété msg.metadata.alarm.transition, règle eq created.
  • Rate limit : n 5, per_ms 1 h, mode drop, clé msg.topic (une seule limite pour tous).
  • Notify : destinataires address oncall@example.com, phone +905551112233, et role ADMIN (dans l’application et par notification push) ; titre {{ msg.payload.title }} ; texte Alarm on {{ msg.payload.deviceName }}: {{ msg.payload.title }} ({{ msg.payload.severity }}) ; urgency critical.

Les rôles atteignent les membres dans l’application, par notification push et dans les applications de messagerie ; seules les lignes address et phone reçoivent un e-mail et un SMS. Voir Alarm, command and notify blocks.

7. Mode nuit

Deux flux sur n’importe quel hôte activent un troisième flux (« Night actions ») à 22:00 et le désactivent à 06:00.

  • Flux A : Schedule (daily, 22:00, every day, tz Europe/Istanbul) → Enable or disable a flow (flow : Night actions, state enable).
  • Flux B : Schedule (daily, 06:00) → Enable or disable a flow (state disable).

Les deux exigent la confirmation saisie au déploiement. Au maximum 6 commutations par minute et par organisation.

8. Commuter une pompe entre deux niveaux

Démarrer une pompe de remplissage sous 30 % et l’arrêter au-dessus de 80 %. Entre les deux niveaux, rien n’est envoyé, si bien que la pompe ne fonctionne pas par à-coups.

Save telemetry → Switch (property msg.payload.level_pct)
                    ─rule 1: lt 30→ Not repeated → Send command pump.set {"on": true}
                    ─rule 2: gt 80→ Not repeated → Send command pump.set {"on": false}
  • Switch : propriété msg.payload.level_pct, règles lt 30 (Name low) et gt 80 (Name high), stop_first activé. Un enregistrement sans cette clé va vers otherwise et est ignoré.
  • Chaque Not repeated : période 10 min, de sorte que la commande est envoyée une fois et répétée au plus toutes les 10 minutes tant que le niveau reste hors de la plage.
  • Send command : la commande pump.set du profil avec les paramètres {"on": true} ou {"on": false}.

Les commandes issues des flux sont limitées à 30 par minute et par appareil, et un message tardif n’envoie rien. Pour une commande opérateur avec les modes Manual et Auto, la carte Rules est souvent l’outil le plus adapté : voir Rules card: actions.

9. Décoder une charge utile binaire

Un appareil envoie 4 octets : une température signée × 10 et une humidité non signée. Elle arrive sous la forme raw (base64).

Switch (msg.payload.raw nempty) → Change → Base64 (decode) → Hex (encode) → Bytes (decode) → Save telemetry
  • Change : set msg.payload vers le chemin msg.payload.raw.
  • Champs Bytes : temperature offset 0 i16 scale 0.1 ; humidity offset 2 u16.

Voir Data transform blocks.

10. Récupérer des mesures d’un autre système par webhook

Un système externe envoie du JSON à Hermetry, et le flux le transmet.

  • Déclencheur Webhook : auth hmac, parse json, reply accepted. Copiez l’adresse et le secret depuis la boîte de dialogue Webhooks.
  • Puis Switch sur msg.payload.type, Change pour remodeler, et une action : Notify, Webhook, MQTT out ou Set variable.

Par défaut, le message d’un webhook concerne l’organisation et non un appareil ; Save telemetry le refuse donc. Pour alimenter des mesures d’appareils depuis un autre système, faites-les envoyer au nom de l’appareil via MQTT ou l’API HTTP des appareils. Voir Device HTTP API.