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

Bloques de condición

Referencia de Compare, Any / all of, If / else, In range, Device state, Changed, Not repeated y Happened n times, además de valores y expresiones.

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.

AjusteSignificadoPor defectoValores
propiedadQué se pruebamsg.payloaduna ruta msg., flow., global. o sys.
opLa comparacióneqver los operadores abajo
valorCon qué se comparavacíocualquier 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:

OperadorVerdadero cuando
eq, neIgual, 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, geMenor, 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.
containsEl texto contiene el valor; un array tiene un elemento igual; un objeto tiene una clave con ese nombre
regexEl texto (o un número como texto) coincide con el patrón: distingue mayúsculas y minúsculas, como máximo 64 caracteres
true, falseExactamente el booleano true / false (no 1, no "true")
nullAusente o null
empty, nemptynull, "", [] o {} / cualquier otra cosa
typeEl 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».

AjusteSignificadoPor defectoValores
modeCómo se unen las filasanyany (o), all (y)
itemsUna comparación por fila: propiedad, op, valorningunohasta 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.

AjusteSignificadoValores
exprLa expresiónobligatorio, 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.

AjusteSignificadoPor defectoValores
propiedadEl númeromsg.payloaduna ruta
minLímite inferior, incluido; vacío = ningunovacíoun número
maxLímite superior, incluido; vacío = ningunovacíoun número
hystCuánto debe superar el valor un límite para que cambie la respuesta00 o más
keyUna memoria separada por cada valor de esta rutamsg.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.

AjusteSignificadoPor defectoValores
rutaQué se prueba, p. ej. flow.mode, global.persist:countobligatoriouna ruta sys., flow. o global.
opLa comparacióneqigual que arriba
valorCon qué se comparavacíocualquier 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.

AjusteSignificadoPor defectoValores
propiedadEl valor vigiladomsg.payloaduna ruta
keyUn último valor separado por cada valor de esta rutamsg.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.

AjusteSignificadoPor defectoValores
Periodo (window_ms)Cuánto tiempo después de un yes se retiene la clave1 h0 a 7 días; 0 deja pasar todo
keyClaves contadas por separadomsg.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.

AjusteSignificadoPor defectoValores
nCuántas veces31 a 1.000
Periodo (window_ms)Ventana deslizante10 min1 ms a 7 días
keyClaves contadas por separadomsg.originator (una por dispositivo)una ruta
reset_on_yesEmpezar a contar desde cero después de un yesoffon, 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:

TipoEjemploSignificado
Número, Texto, Sí / no, JSON30, "alarm", true, {"on": true}Un valor fijo
Variable (ruta)msg.payload.level, flow.limit, global.persist:site.maxSe lee al ejecutar el bloque
Expresiónmsg.payload.a + msg.payload.bSe calcula para cada mensaje
Variable de entornoUn valor del entorno
Hora actualLa hora en que llega el mensaje

Rutas

  • msg.…: el mensaje. Los campos que empiezan por _ pertenecen al motor y no se pueden escribir; msg.msgType y msg.originator son de solo lectura.
  • flow.…: variables de este flujo. global.…: variables compartidas por todos los flujos de la organización. Añada persist: 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.

ParteDisponible
Valoresnúmeros, "texto", true, false, null, [arrays], {objetos}, rutas
Operadores?: || && == != < <= > >= in + - * / % !
Funciones numéricasabs, 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 textostring, len, lower, upper, trim, substr, replace, split, join, contains, starts, ends, matches
Otraskeys, has, now, fmt_time, typeof, exists, default(x, fallback), empty
  • == compara números numéricamente y el resto por tipo y valor; < y > con null son falsos.
  • La aritmética con texto falla con type, incluso con texto numérico: escriba number(msg.payload).
  • {{ expression }} en los ajustes de texto (plantillas) inserta un valor: Level {{ msg.payload.level }} %.