Ir al contenido

MXL - Lenguaje de Expresiones de Meddle

MXL (Meddle Expression Language) es un lenguaje de expresiones simple usado en conectores de Meddle para definir condiciones y lógica.

Usado en:

Las expresiones MXL se evalúan a valores booleanos (verdadero/falso) basados en datos de carga.

nombre_campo operador valor
temperature > 80
pressure < 10
status == "active"
count != 0
OperadorDescripciónEjemplo
>Mayor quetemperature > 80
<Menor quepressure < 10
>=Mayor o igual quehumidity >= 60
<=Menor o igual quespeed <= 100
==Igual astatus == "active"
!=No igual acount != 0
OperadorDescripciónEjemplo
&&AND (ambas condiciones deben ser verdaderas)temp > 80 && press < 10
``

Comparar valores numéricos:

temperature > 25.5
pressure >= 101.3
count == 100
speed != 0

Comparar valores de cadena (usar comillas dobles):

status == "active"
mode != "manual"
error_code == "E001"

Comparar valores booleanos:

enabled == true
fault != false

Todas las condiciones deben ser verdaderas:

temperature > 20 && temperature < 30
pressure > 100 && humidity < 80 && status == "running"

Al menos una condición debe ser verdadera:

temperature > 80 || pressure > 150
status == "error" || status == "fault" || status == "stopped"

Usa paréntesis para agrupar (si está soportado):

(temperature > 80 || pressure > 150) && status == "active"

Verificar si el valor está dentro del rango:

temperature >= 20 && temperature <= 30

Alertar cuando el valor excede el umbral:

temperature > 80
pressure > 150
vibration > 5.0

Verificar valores de estado específicos:

status == "error"
status != "running"
mode == "manual"

Alertar sobre múltiples condiciones:

temperature > 100 || pressure > 150 || vibration > 5

Asegurar que se cumplan múltiples condiciones:

temperature > 50 && pressure > 100 && flow > 10
// Advertencia de temperatura alta
temperature > 80
// Temperatura fuera de rango
temperature < 15 || temperature > 35
// Temperatura crítica con presión
temperature > 100 && pressure > 150
// Máquina detenida inesperadamente
status == "stopped" && runtime > 0
// Condición de error
status == "error" || status == "fault"
// No en modo automático
mode != "auto"
// Defecto detectado
defect_count > 0
// Fuera de especificación
dimension < 9.9 || dimension > 10.1
// Múltiples parámetros de calidad
hardness < 50 || surface_finish > 2.0 || weight < 100
// Proceso fuera de control
temperature > 90 || pressure < 95 || flow < 50
// Operación estable
temperature >= 80 && temperature <= 85 && pressure > 100
// Condición de apagado de emergencia
temperature > 120 || pressure > 200 || vibration > 10
// Anomalía detectada
is_anomaly == true
// Puntuación de anomalía alta
anomaly_score > 0.8
// Múltiples indicadores
vibration > 5 || temperature > 90 || anomaly_score > 0.7
// Bueno
temperature > 80
machine_status == "running"
// Evitar
t > 80
s == "r"
// Para igualdad, usa ==
status == "active"
// Para desigualdad, usa !=
count != 0
// Bueno - condiciones relacionadas juntas
temperature > 80 && pressure > 150
// Bueno - condiciones alternativas
status == "error" || status == "fault"

AND (&&) tiene mayor precedencia que OR (||):

// Esto verifica: (A && B) || C
temperature > 80 && pressure > 150 || humidity > 90
// Usa paréntesis para claridad
(temperature > 80 && pressure > 150) || humidity > 90

Prueba expresiones con varios valores de entrada para asegurar que funcionen como se espera.

  • Sin operaciones aritméticas: No se puede hacer temperature + 10 > 90
  • Sin llamadas a funciones: No se puede hacer abs(temperature) > 80
  • Sin acceso a campos anidados: No se puede hacer sensor.temperature > 80
  • Solo comparación de cadenas: Sin regex o coincidencia de patrones

Verificar:

  1. Los nombres de campos coinciden exactamente con la carga (sensible a mayúsculas/minúsculas)
  2. Los tipos de datos coinciden (número vs cadena)
  3. El operador es correcto (== no =)
  4. Los valores de cadena usan comillas dobles

Verificar:

  1. La lógica es correcta (AND vs OR)
  2. Los valores de umbral son apropiados
  3. El campo existe en la carga

Errores comunes:

  • Usar = en lugar de ==
  • Faltan comillas alrededor de cadenas
  • Errores tipográficos en nombres de campos
  • Precedencia de operadores incorrecta
{
"type": "MeddleTrigger",
"config": {
"mode": "DirectDispatch",
"condition": "temperature > 80 && status == \"active\"",
"payload": {
"alert": "high_temperature"
}
}
}
{
"type": "MeddleAlert",
"config": {
"name": "Critical Alert",
"condition": "temperature > 100 || pressure > 200",
"minDuration": 10,
"cooldown": 300,
"notification": {
"type": "Email",
"toEmails": ["alerts@example.com"]
}
}
}