Algunos bloques recuerdan mensajes anteriores: un recuento, el valor previo, una ventana de valores, la hora del último mensaje. Esta página enumera esos bloques y explica cómo se comporta su memoria, lo que importa al desplegar cambios.
Cómo funciona la memoria de los bloques
| Regla | Detalle |
|---|---|
| Una memoria por dispositivo | A menos que establezca key, estos bloques mantienen una memoria independiente por cada origen del mensaje: cada dispositivo tiene su propio recuento, valor previo o vigilancia. Establezca key en msg.topic u otra ruta para agrupar de otra forma. |
| Sobrevive a los reinicios | La plataforma conserva la memoria y los mensajes en espera; un reinicio o un traslado a otro worker no los pierde. Las esperas se vuelven a armar en su hora de vencimiento original. |
| Se reinicia al cambiar la configuración | Un bloque conserva su memoria tras un despliegue cuando su configuración no ha cambiado. Un bloque cuya configuración ha cambiado empieza con una memoria vacía (los mensajes que estaba retención se conservan). Un bloque eliminado, o cuyo tipo ha cambiado, pierde todo. |
| Se conserva en pausa | Un flujo desactivado o en pausa conserva la memoria de sus bloques; un flujo eliminado la pierde. |
| Tamaño | Como máximo 10.000 claves por bloque; si se supera, se olvida la clave más antigua. Los mensajes retenidos cuentan contra 16 MiB por bloque. |
| Pruebas | Una prueba parte de una memoria vacía, o de una copia de solo lectura de la memoria activa cuando marca Start from the live state and context. Una prueba nunca modifica la memoria activa. |
Así pues: si cambia una ventana de Statistics, sus promedios empiezan desde cero; si solo reconecta alrededor de él, continúan.
Contador
Cuenta mensajes por clave, en todo el tiempo o dentro de una ventana deslizante, y añade el recuento al mensaje.
| Ajuste | Significado | Predeterminado | Valores |
|---|---|---|---|
| n | El recuento que envía una copia a reached; vacío o 0 = nunca | vacío | 0 o más |
| window_ms | Contar solo el último este tiempo; 0 = todos | 0 | 0 a 7 días |
| reset_at_n | Empezar de nuevo desde 0 al alcanzar n | off | on, off |
| key | Cada clave tiene su propio recuento | msg.originator | una ruta |
| store | memory, o persist (se conserva en el contexto persistente del flujo) | memory | memory, persist |
Salidas: out (cada mensaje, con msg.count), reached (una copia cuando el recuento es n o más). msg.reset = true pone el recuento de la clave a 0. Sin reset_at_n, cada mensaje desde el n-ésimo también va a reached.
Ejemplo: «3 aperturas de puerta en 10 minutos»: n 3, window_ms 10 min, reset_at_n on, reached → Raise alarm.
Delta
La diferencia entre un número y el número anterior de la misma clave: consumo de un contador, pulsos desde el último informe.
| Ajuste | Significado | Predeterminado | Valores |
|---|---|---|---|
| input | El número | msg.payload | una ruta |
| output | Dónde se escribe la diferencia | msg.payload.delta | una ruta |
| period | Dónde escribir los milisegundos desde el valor anterior | none | una ruta |
| round | Decimales, aplicados primero | none | 0 a 15 |
| on_negative | Una caída (reinicio del contador) | error | error (negative_delta), pass (escrito con su signo), zero |
| skip_zero | Deja pasar un delta cero sin cambios, sin escribirlo | off | on, off |
| key | Cada clave tiene su propio valor previo | msg.originator | una ruta |
| seed | El valor previo del primer mensaje | none (delta 0) | none, latest (el último valor almacenado del dispositivo) |
| seed_key | La clave almacenada de la que tomar el valor inicial (seed = latest) | hasta 128 caracteres | |
| ts_path | Dónde está la hora de la lectura | la hora del registro | una ruta |
Salidas: out, other (sin valor en la ruta de entrada), error (not_a_number, negative_delta). Tras una caída, el nuevo valor pasa a ser la base en todos los modos. Delta no lee la base de datos por mensaje, por eso es la forma eficiente de calcular consumos.
Statistics
Recuento, suma, promedio, mínimo, máximo, desviación estándar, último valor y tasa sobre los últimos valores o el último periodo, por clave.
| Ajuste | Significado | Predeterminado | Valores |
|---|---|---|---|
| property | El número | msg.payload | una ruta |
| window | count (los últimos size valores) o time (los últimos size ms) | count | count, time |
| size | Número de valores, o la ventana en ms | 10 | count: 1 a 10.000; time: 1 ms a 7 días |
| outputs | Qué cifras | count, avg, min, max | cualquiera de count, sum, avg, min, max, stddev, last, rate |
| emit | each mensaje, o una vez por ventana completa (end_of_window) | each | each, end_of_window |
| key | Cada clave tiene su propia ventana | msg.originator | una ruta |
msg.payload se sustituye por la cifra (una salida elegida) o por un objeto de cifras. rate son valores por segundo. Una ventana de tiempo guarda como máximo 10.000 valores. Tras cambiar window a time, establezca size en milisegundos: el valor predeterminado 10 sería 10 ms. Error invalid_value «not a number».
Ejemplo: promedio horario enviado una vez por hora: window time, size 3600000, outputs avg, emit end_of_window.
Watchdog
Avisa cuando los mensajes dejan de llegar: si no llega ningún mensaje de una clave dentro del tiempo, envía un mensaje de timeout; cuando los mensajes vuelven, también lo informa.
| Ajuste | Significado | Predeterminado | Valores |
|---|---|---|---|
| ms | Cuánto tiempo puede estar en silencio una clave | 1 min | 100 ms a 7 días |
| key | Cada clave se vigila por separado | msg.originator | una ruta |
| repeat | Envía timeout de nuevo cada ms mientras esté en silencio | off | on, off |
Salidas:
timeout: un mensaje nuevo (una nueva ejecución) conmsg.payload= la clave,msg.topicdel último mensaje,msg.timeout_ms, y el origen del último mensaje, de modo que Raise alarm funciona sobre él.ok: el primer mensaje de una clave tras un timeout, sin cambios.
Los demás mensajes no se pasan. La vigilancia de una clave empieza con su primer mensaje: un dispositivo que nunca envía no se detecta (para eso use una regla de alarma de desconexión; véase Offline alarms). Un mensaje tardío (tras una interrupción) no alimenta ni dispara el watchdog, de modo que una alarma de silencio no se borra con lecturas antiguas. Para vigilar por dispositivo, key debe establecerse en el dispositivo: msg.originator (el predeterminado) o msg.metadata.deviceId.
Inicio / fin
Marca el inicio y el fin de un periodo de actividad.
| Ajuste | Significado | Predeterminado | Valores |
|---|---|---|---|
| ms | Tiempo de calma tras el último mensaje que termina el periodo | 1 min | 0 a 7 días |
| key | Cada clave tiene su propio periodo | msg.originator | una ruta |
Salidas: start (una copia del primer mensaje de un periodo, de inmediato), end (el último mensaje, ms después de su llegada). Los mensajes intermedios no salen.
Variables como memoria
Para valores que comparten varios bloques o flujos, escriba variables con Set variable o Change y léalas con rutas:
| Almacén | Alcance | Límite |
|---|---|---|
flow.x | Este flujo | 1 MiB por flujo |
global.x | Todos los flujos de la organización | 4 MiB por organización |
flow.persist:x, global.persist:x | El almacén persistente del mismo alcance | dentro de los mismos límites |
Una escritura por encima de un límite falla con limit y conserva el valor anterior. La pestaña Activity > Data del editor muestra los valores y el grado de ocupación de los almacenes. Véase Action blocks.
Temporizadores
Para «si nada lo cancela en 10 minutos, haz esto» entre flujos, use el bloque de acción Timer con un disparador Named timer. Véanse Action blocks y Trigger blocks.

