Cada severidad de una regla de umbral tiene una condición. Una condición es una única comparación (una hoja) o un grupo de condiciones. Esta página describe cómo Hermetry las evalúa, para que puedas predecir cuándo se abre una alarma.
Forma
Condition = { "key": …, "op": …, "value": …, "topic"?: … }
| { "all": [ Condition, … ] }
| { "any": [ Condition, … ] }
El formulario edita una comparación por severidad. Los grupos se escriben en modo JSON.
Operadores
op | Verdadero cuando |
|---|---|
> | el valor es mayor que el umbral |
>= | mayor o igual que |
< | menor que |
<= | menor o igual que |
== | igual a |
!= | distinto de |
No existe «entre»: usa all con >= y <=. No hay aritmética: una condición no puede decir «punto de consigna + 10» ni «más que el otro sensor». Para ello, calcula una clave derivada en un flujo (consulta Derived values) o usa una fórmula de la tarjeta Rules.
Cómo se comparan los valores
| Valor y umbral | Comparación |
|---|---|
Ambos son números, o texto que se lee como número ("23.5", "1e3") | Como números. "80" y 80 son iguales. |
Cualquier otro caso con == o != | Como texto: true es igual a "true". |
Cualquier otro caso con >, >=, <, <= | Siempre falso. |
El dispositivo envió null | == es falso y != es verdadero. |
Así, un estado enviado como texto funciona con ==: { "key": "state", "op": "==", "value": "fault" }. Los booleanos también funcionan: { "key": "door_open", "op": "==", "value": true } también coincide con un dispositivo que envía "true".
Umbrales por dispositivo desde atributos
En lugar de un número, el valor puede nombrar un atributo del dispositivo:
{ "key": "temperature", "op": ">", "value": { "attribute": "max_temp" } }
En el formulario, escribe attribute:max_temp en Value.
- Hermetry lee el atributo server del dispositivo con ese nombre y, después, su atributo shared. Los atributos de cliente no se usan.
- Un dispositivo que no tiene ese atributo no se comprueba en esa comparación: la hoja es falsa. Asigna el atributo a todos los dispositivos, o añade una segunda severidad con un número fijo.
- Un atributo modificado se usa en unos 30 segundos.
Esto permite que una sola regla sirva a dispositivos con límites distintos. Define los atributos en la pestaña Attributes de los dispositivos, mediante importación o a través de la API. Consulta Attributes.
Grupos: all y any
{
"all": [
{ "key": "door_open", "op": "==", "value": true },
{ "key": "pressure", "op": "<", "value": 1.2 }
]
}
alles verdadero cuando todas las partes son verdaderas;anycuando al menos una lo es.- Los grupos pueden anidarse hasta 4 niveles.
- La condición de una severidad puede contener como máximo 16 comparaciones en total.
Reglas sobre varias claves
Los dispositivos suelen enviar las claves en mensajes separados. Una regla se evalúa con los últimos valores conocidos del dispositivo, no solo con el mensaje que acaba de llegar:
- Una regla solo se evalúa con un mensaje que contenga al menos una de sus claves (de un tema coincidente). Un mensaje sin ninguna de sus claves no la abre ni la cierra, y no cuenta como muestra para el debounce.
- Para una clave que el mensaje no trae, la comparación usa el último valor de esa clave que la regla vio en este dispositivo.
- Una comparación cuya clave la regla nunca ha visto en el dispositivo es falsa.
Ejemplo: el estado de la puerta llega cada minuto y la presión cada diez segundos. La regla all de arriba se abre en cuanto ambas son verdaderas, sea cual sea el mensaje que llegue último.
Los valores recordados se guardan con el estado de la regla. Un dispositivo en silencio durante 30 días pierde ese estado y empieza de cero.
Filtros de tema
Para dispositivos que publican en sus propios temas MQTT, una hoja puede limitarse a un tema:
topic | La hoja se aplica a |
|---|---|
| ausente | mensajes de cualquier tema |
"factory/line1/temp" | mensajes solo de este tema exacto |
null | mensajes solo de los temas por defecto |
La misma clave en dos temas cuenta como dos valores distintos. En el formulario, defínelo en Advanced > Only from topic. Consulta MQTT topics and payloads.
Claves
Una clave es una clave de telemetría: sin espacios, no un número suelto, de como máximo 128 caracteres. Las claves distinguen mayúsculas y minúsculas: Temperature y temperature son claves distintas. Una clave que el perfil no declara se acepta con una advertencia; una clave con forma numérica solo si el perfil la declara.
Severidades
Con varias severidades, todas las condiciones se evalúan en cada mensaje y gana la severidad verdadera más alta:
"severities": [
{ "severity": "CRITICAL", "condition": { "key": "temperature", "op": ">", "value": 90 } },
{ "severity": "MAJOR", "condition": { "key": "temperature", "op": ">", "value": 80 } },
{ "severity": "WARNING", "condition": { "key": "temperature", "op": ">", "value": 70 } }
]
A 85 la alarma es Major; a 95 escala a Critical; de nuevo a 85 vuelve a Major (tras el debounce de cierre); por debajo de 70 (menos la histéresis) se cierra.
Lo que una condición no puede hacer
| No posible | Alternativa |
|---|---|
| Comparar dos claves o dos dispositivos | Una fórmula de la tarjeta Rules, o un flujo que escriba una clave derivada |
| Usar la hora del día o un calendario | Una regla de la tarjeta Rules con una ventana horaria |
| «No ha cambiado durante 10 minutos» | Un flujo con un bloque de watchdog o delta |
| Aritmética en el umbral | Una clave derivada, o un atributo por dispositivo |
| Leer un atributo de cliente como umbral | Guardar el límite como atributo de servidor o compartido |

