Salta ai contenuti

MXL - Linguaggio di Espressioni Meddle

MXL (Meddle Expression Language) è un semplice linguaggio di espressioni utilizzato nei connettori Meddle per definire condizioni e logica.

Utilizzato in:

Le espressioni MXL valutano a valori booleani (vero/falso) basati sui dati del payload.

nome_campo operatore valore
temperature > 80
pressure < 10
status == "active"
count != 0
OperatoreDescrizioneEsempio
>Maggiore ditemperature > 80
<Minore dipressure < 10
>=Maggiore o ugualehumidity >= 60
<=Minore o ugualespeed <= 100
==Uguale astatus == "active"
!=Diverso dacount != 0
OperatoreDescrizioneEsempio
&&AND (entrambe le condizioni devono essere vere)temp > 80 && press < 10
``

Confronta valori numerici:

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

Confronta valori stringa (usa virgolette doppie):

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

Confronta valori booleani:

enabled == true
fault != false

Tutte le condizioni devono essere vere:

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

Almeno una condizione deve essere vera:

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

Usa le parentesi per il raggruppamento (se supportato):

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

Verifica se il valore è nell’intervallo:

temperature >= 20 && temperature <= 30

Avviso quando il valore supera la soglia:

temperature > 80
pressure > 150
vibration > 5.0

Verifica valori di stato specifici:

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

Avviso su più condizioni:

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

Assicura che più condizioni siano soddisfatte:

temperature > 50 && pressure > 100 && flow > 10
// Avviso alta temperatura
temperature > 80
// Temperatura fuori intervallo
temperature < 15 || temperature > 35
// Temperatura critica con pressione
temperature > 100 && pressure > 150
// Macchina fermata inaspettatamente
status == "stopped" && runtime > 0
// Condizione di errore
status == "error" || status == "fault"
// Non in modalità automatica
mode != "auto"
// Difetto rilevato
defect_count > 0
// Fuori specifica
dimension < 9.9 || dimension > 10.1
// Parametri qualità multipli
hardness < 50 || surface_finish > 2.0 || weight < 100
// Processo fuori controllo
temperature > 90 || pressure < 95 || flow < 50
// Operazione stabile
temperature >= 80 && temperature <= 85 && pressure > 100
// Condizione arresto emergenza
temperature > 120 || pressure > 200 || vibration > 10
// Anomalia rilevata
is_anomaly == true
// Punteggio anomalia alto
anomaly_score > 0.8
// Indicatori multipli
vibration > 5 || temperature > 90 || anomaly_score > 0.7
// Buono
temperature > 80
machine_status == "running"
// Evita
t > 80
s == "r"
// Per uguaglianza, usa ==
status == "active"
// Per disuguaglianza, usa !=
count != 0
// Buono - condizioni correlate insieme
temperature > 80 && pressure > 150
// Buono - condizioni alternative
status == "error" || status == "fault"

AND (&&) ha precedenza maggiore di OR (||):

// Questo verifica: (A && B) || C
temperature > 80 && pressure > 150 || humidity > 90
// Usa le parentesi per chiarezza
(temperature > 80 && pressure > 150) || humidity > 90

Testa le espressioni con vari valori di input per assicurarti che funzionino come previsto.

  • Nessuna operazione aritmetica: Non puoi fare temperature + 10 > 90
  • Nessuna chiamata a funzione: Non puoi fare abs(temperature) > 80
  • Nessun accesso a campi nidificati: Non puoi fare sensor.temperature > 80
  • Solo confronto stringhe: Nessun regex o pattern matching

Verifica:

  1. I nomi dei campi corrispondono esattamente al payload (case-sensitive)
  2. I tipi di dati corrispondono (numero vs stringa)
  3. L’operatore è corretto (== non =)
  4. I valori stringa usano virgolette doppie

Verifica:

  1. La logica è corretta (AND vs OR)
  2. I valori soglia sono appropriati
  3. Il campo esiste nel payload

Errori comuni:

  • Usare = invece di ==
  • Virgolette mancanti attorno alle stringhe
  • Errori di battitura nei nomi dei campi
  • Precedenza operatori errata
{
"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"]
}
}
}