Un bloque de condición prueba algo y envía el mensaje, sin cambios, por su salida yes o no. Úselos para filtrar y bifurcar. Todos los bloques de condición también tienen una salida error para una prueba que no pudo realizarse. Esta página enumera los bloques tal como los define y luego explica los valores, rutas y expresiones que utilizan.
Compare
Compara una propiedad con un valor.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| propiedad | Qué se prueba | msg.payload | una ruta msg., flow., global. o sys. |
| op | La comparación | eq | ver los operadores abajo |
| valor | Con qué se compara | vacío | cualquier tipo de valor; no se muestra para true, false, null, empty, nempty |
Una propiedad ausente cuenta como null: gt 30 es entonces falso. Errores: invalid_value (un patrón u operador incorrecto), o el código de un valor que no pudo calcularse.
Operadores
Compartidos por Compare, Any / all of, Device state y Switch:
| Operador | Verdadero cuando |
|---|---|
eq, ne | Igual, distinto. Un número y un número o texto numérico se comparan como números ("5" es igual a 5, true cuenta como 1); cualquier otra cosa se compara por contenido como JSON. |
lt, le, gt, ge | Menor, menor o igual, mayor, mayor o igual. Números y texto numérico como números; dos textos alfabéticamente; cualquier otra mezcla es falsa. |
contains | El texto contiene el valor; un array tiene un elemento igual; un objeto tiene una clave con ese nombre |
regex | El texto (o un número como texto) coincide con el patrón: distingue mayúsculas y minúsculas, como máximo 64 caracteres |
true, false | Exactamente el booleano true / false (no 1, no "true") |
null | Ausente o null |
empty, nempty | null, "", [] o {} / cualquier otra cosa |
type | El tipo es number, string, boolean, array, object o null |
Los patrones no pueden usar lookahead, lookbehind ni referencias hacia atrás; un patrón así se rechaza al desplegar (regex_unsupported).
Any / all of
Hasta 8 comparaciones unidas por «or» o «and».
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| mode | Cómo se unen las filas | any | any (o), all (y) |
| items | Una comparación por fila: propiedad, op, valor | ninguno | hasta 8 filas |
Las filas se revisan en orden y la revisión se detiene en cuanto se conoce la respuesta. Sin filas, any es falso y all es verdadero.
If / else
Verdadero cuando una expresión es verdadera.
| Ajuste | Significado | Valores |
|---|---|---|
| expr | La expresión | obligatorio, hasta 512 caracteres |
no cuando el resultado es false, null, 0, "" o no es un número; un array u objeto vacío cuenta como verdadero. Errores: invalid_value (no compila), type, div_zero, steps, regex, limit.
Ejemplo: msg.payload.temperature > 30 && flow.mode == "auto".
En rango
Es un número entre un mínimo y un máximo, con histéresis opcional.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| propiedad | El número | msg.payload | una ruta |
| min | Límite inferior, incluido; vacío = ninguno | vacío | un número |
| max | Límite superior, incluido; vacío = ninguno | vacío | un número |
| hyst | Cuánto debe superar el valor un límite para que cambie la respuesta | 0 | 0 o más |
| key | Una memoria separada por cada valor de esta ruta | msg.originator (una por dispositivo) | una ruta |
Una vez dentro, la respuesta sigue siendo yes hasta que el valor baje de min − hyst o suba de max + hyst; una vez fuera, vuelve a ser yes solo dentro de min + hyst … max − hyst. No es un número: no, memoria sin cambios.
Device state
Prueba una variable almacenada (flow., global.) o un valor de la plataforma (sys.) en lugar del mensaje. El mensaje solo decide cuándo se realiza la prueba.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| ruta | Qué se prueba, p. ej. flow.mode, global.persist:count | obligatorio | una ruta sys., flow. o global. |
| op | La comparación | eq | igual que arriba |
| valor | Con qué se compara | vacío | cualquier tipo de valor |
Changed
yes cuando una propiedad difiere de su valor en el mensaje anterior de la misma clave; el primer mensaje de una clave es yes.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| propiedad | El valor vigilado | msg.payload | una ruta |
| key | Un último valor separado por cada valor de esta ruta | msg.originator (uno por dispositivo) | una ruta |
Los valores se comparan como texto JSON: 5 y "5" difieren.
Not repeated
yes solo si nada con la misma clave pasó por yes dentro del periodo.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
Periodo (window_ms) | Cuánto tiempo después de un yes se retiene la clave | 1 h | 0 a 7 días; 0 deja pasar todo |
| key | Claves contadas por separado | msg.originator (una por dispositivo) | una ruta |
Solo un yes inicia el periodo; con un periodo de 1 hora, un flujo constante da un yes por hora. Úselo para evitar notificaciones repetidas.
Happened n times
yes cuando este mensaje hace al menos n mensajes de la misma clave dentro del periodo.
| Ajuste | Significado | Por defecto | Valores |
|---|---|---|---|
| n | Cuántas veces | 3 | 1 a 1.000 |
Periodo (window_ms) | Ventana deslizante | 10 min | 1 ms a 7 días |
| key | Claves contadas por separado | msg.originator (una por dispositivo) | una ruta |
| reset_on_yes | Empezar a contar desde cero después de un yes | off | on, off |
Memoria de los bloques de condición
In range, Changed, Not repeated y Happened n times recuerdan valores por clave. En Hermetry la clave por defecto es el originador del mensaje, de modo que cada dispositivo tiene su propia memoria; establezca key en msg.topic (u otra ruta) para compartirla o separarla de otra forma. Cada bloque conserva como máximo 10.000 claves; más allá de eso se olvida la más antigua. La memoria sobrevive a los reinicios. Desplegar un cambio en los ajustes del bloque vacía su memoria. Consulte Counters, statistics and watchdogs.
Valores, rutas y expresiones
Muchos ajustes admiten un valor de estos tipos:
| Tipo | Ejemplo | Significado |
|---|---|---|
| Número, Texto, Sí / no, JSON | 30, "alarm", true, {"on": true} | Un valor fijo |
| Variable (ruta) | msg.payload.level, flow.limit, global.persist:site.max | Se lee al ejecutar el bloque |
| Expresión | msg.payload.a + msg.payload.b | Se calcula para cada mensaje |
| Variable de entorno | Un valor del entorno | |
| Hora actual | La hora en que llega el mensaje |
Rutas
msg.…: el mensaje. Los campos que empiezan por_pertenecen al motor y no se pueden escribir;msg.msgTypeymsg.originatorson de solo lectura.flow.…: variables de este flujo.global.…: variables compartidas por todos los flujos de la organización. Añadapersist:para usar el almacén persistente (flow.persist:total). La primera clave empieza por una letra o_y tiene como máximo 32 letras, dígitos o_.sys.…: valores de plataforma de solo lectura.- Las rutas ausentes dan
null.
Expresiones
Hasta 512 caracteres, como máximo 10.000 pasos de evaluación.
| Parte | Disponible |
|---|---|
| Valores | números, "texto", true, false, null, [arrays], {objetos}, rutas |
| Operadores | ?: || && == != < <= > >= in + - * / % ! |
| Funciones numéricas | abs, round(x, decimals), floor, ceil, min, max, clamp(x, lo, hi), sqrt, pow, number, int, fixed, sum, avg, y funciones trigonométricas y logarítmicas (sin, cos, asin, rad, log10 …) |
| Funciones de texto | string, len, lower, upper, trim, substr, replace, split, join, contains, starts, ends, matches |
| Otras | keys, has, now, fmt_time, typeof, exists, default(x, fallback), empty |
==compara números numéricamente y el resto por tipo y valor;<y>connullson falsos.- La aritmética con texto falla con
type, incluso con texto numérico: escribanumber(msg.payload). {{ expression }}en los ajustes de texto (plantillas) inserta un valor:Level {{ msg.payload.level }} %.

