Novedad: el cortafuegos de IA supervisa cada módulo y explica cada incidente con palabras sencillas. Vea cómo funciona

Recetario de flujos

Diez flujos para construir: filtro de banda muerta, consumo de contadores, watchdog de sensor silencioso, reenvío, claves de estado, alarmas por correo y SMS, modo nocturno y más.

Cada receta indica los bloques, sus ajustes y dónde conectarlos. Las recetas 1 a 5 y 8 a 9 van en un flujo raíz en el host IoT (la raíz de todo el inquilino o una raíz de perfil); insértalas en la salida telemetry del conmutador Message type, antes o después de Save telemetry según se indica. Prueba cada cambio con Test antes de desplegarlo. Consulta The flow editor.

1. Guarda un valor solo cuando cambie lo suficiente

Un sensor de nivel informa cada 10 segundos, pero un cambio menor de 0,5 cm no importa.

Message type ─telemetry→ Only changes → Save telemetry
  • Only changes: propiedad msg.payload.level_cm, modo deadband, valor 0.5, first activado. Key: deja el valor por defecto (una memoria por dispositivo).
  • Los registros sin level_cm deben guardarse igualmente: pon primero un Switch (propiedad msg.payload.level_cm, regla nempty), envía su salida de regla por Only changes y su salida otherwise directamente a Save telemetry.

Esto reduce los puntos almacenados, no los mensajes contabilizados. Para reducir mensajes, cambia la configuración de envío del dispositivo. Consulta Message quota and usage.

2. Consumo de un contador que puede reiniciarse

Un contador de agua envía un volume_m3 creciente; tras un corte de energía se reinicia desde 0.

Message type ─telemetry→ Delta ─out→ Save telemetry
                              └other→ Save telemetry
  • Delta: entrada msg.payload.volume_m3, salida msg.payload.volume_delta_m3, on_negative zero, seed latest, round 3.

Para consumos horarios o diarios también puedes graficar el contador original con el agregado increase. Consulta Derived values.

3. Alarma cuando un sensor deja de enviar datos

Genera una advertencia cuando un dispositivo deja de enviar temperature durante 15 minutos, y bórrala cuando vuelva a informar.

Message type ─telemetry→ Switch (msg.payload.temperature nempty) → Watchdog ─timeout→ Raise alarm
                                                                     └ok→ Clear alarm
  • Watchdog: ms 15 min, key msg.originator (por defecto), repeat desactivado.
  • Raise alarm: alarm temperature_silent, severity warning, text No temperature for 15 minutes.
  • Clear alarm: alarm temperature_silent.
  • Mantén también la salida del Switch conectada a Save telemetry, o conecta la rama del watchdog junto a ella.

Un watchdog empieza a vigilar un dispositivo en su primer mensaje tras el despliegue. Para dispositivos completamente desconectados, usa también una regla de alarma de desconexión. Consulta Offline alarms.

4. Reenvía cada lectura a tu servidor

Save telemetry → HTTP request

  1. Crea una conexión HTTP endpoint a https://ingest.example.com con autenticación bearer. Consulta Connections and secrets.

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

  3. late send, para que también se reenvíe un acumulado tras una interrupción.

  4. Conecta la salida error de la petición a un bloque System log (text forward failed: {{ msg.error.code }}).

Conectar tras Save telemetry reenvía solo lo que se almacenó. Para muchos dispositivos, pon un Batch (count 50) y un Join (auto, array) antes de la petición para enviar grupos.

5. Una clave de estado para vistas de sitio y gráficos

Las vistas de sitio colorean las salas según una clave status. Guarda una derivada de la temperatura:

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

Las vistas de sitio leen 2 como crítico y 1 como advertencia. Como número, status también se puede graficar y agregar. Consulta Site views.

6. Envía correo y SMS a una dirección de guardia cuando se abra una alarma

Un flujo (no una raíz) en el host IoT:

Device message (types: alarm) → Switch (msg.metadata.alarm.transition) ─created→ Rate limit → Notify
  • Device message: types alarm (márcalo por nombre), profiles: los que te interesen.
  • Switch: propiedad msg.metadata.alarm.transition, regla eq created.
  • Rate limit: n 5, per_ms 1 h, mode drop, key msg.topic (un único límite para todos).
  • Notify: recipients address oncall@example.com, phone +905551112233, y role ADMIN (en la app y push); title {{ msg.payload.title }}; text Alarm on {{ msg.payload.deviceName }}: {{ msg.payload.title }} ({{ msg.payload.severity }}); urgency critical.

Los roles llegan a los miembros en la app, por push y en aplicaciones de chat; solo las filas address y phone reciben correo y SMS. Consulta Alarm, command and notify blocks.

7. Modo nocturno

Dos flujos en cualquier host activan un tercer flujo («Night actions») a las 22:00 y lo desactivan a las 06:00.

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

Ambos requieren la confirmación escrita al desplegar. Como máximo 6 conmutaciones por minuto por organización.

8. Conmuta una bomba entre dos niveles

Arranca una bomba de llenado por debajo del 30 % y deténla por encima del 80 %. Entre los dos niveles no se envía nada, así que la bomba no oscila.

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: propiedad msg.payload.level_pct, reglas lt 30 (Name low) y gt 80 (Name high), stop_first activado. Un registro sin la clave va a otherwise y se ignora.
  • Cada Not repeated: period 10 min, así el comando se envía una vez y se repite como máximo cada 10 minutos mientras el nivel siga fuera de la banda.
  • Send command: el comando pump.set del perfil con params {"on": true} o {"on": false}.

Los comandos desde flujos se limitan a 30 por minuto por dispositivo, y un mensaje tardío no envía nada. Para el control para operadores con modos Manual y Auto, la tarjeta Rules suele ser mejor herramienta: consulta Rules card: actions.

9. Decodifica una carga binaria

Un dispositivo envía 4 bytes: una temperatura con signo × 10 y una humedad sin signo. Llega como raw (base64).

Switch (msg.payload.raw nempty) → Change → Base64 (decode) → Hex (encode) → Bytes (decode) → Save telemetry
  • Change: set msg.payload a la ruta msg.payload.raw.
  • Campos Bytes: temperature offset 0 i16 scale 0.1; humidity offset 2 u16.

Consulta Data transform blocks.

10. Recibe lecturas de otro sistema mediante webhook

Un sistema externo envía JSON a Hermetry, y el flujo lo reenvía.

  • Disparador Webhook: auth hmac, parse json, reply accepted. Copia la dirección y el secreto desde el diálogo Webhooks.
  • Después, un Switch sobre msg.payload.type, un Change para reestructurar y una acción: Notify, Webhook, MQTT out o Set variable.

Por defecto, el mensaje de un webhook se refiere a la organización, no a un dispositivo, así que Save telemetry lo rechaza. Para incorporar lecturas de dispositivos desde otro sistema, haz que las envíe como el dispositivo por MQTT o por la API HTTP de dispositivos. Consulta Device HTTP API.