Zum Inhalt springen

MXL - Meddle Expression Language

MXL (Meddle Expression Language) ist eine einfache Ausdruckssprache, die in Meddle-Konnektoren verwendet wird, um Bedingungen und Logik zu definieren.

Verwendet in:

MXL-Ausdrücke werden zu booleschen Werten (wahr/falsch) basierend auf Payload-Daten ausgewertet.

feldname operator wert
temperature > 80
pressure < 10
status == "active"
count != 0
OperatorBeschreibungBeispiel
>Größer alstemperature > 80
<Kleiner alspressure < 10
>=Größer oder gleichhumidity >= 60
<=Kleiner oder gleichspeed <= 100
==Gleichstatus == "active"
!=Ungleichcount != 0
OperatorBeschreibungBeispiel
&&UND (beide Bedingungen müssen wahr sein)temp > 80 && press < 10
``

Numerische Werte vergleichen:

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

Zeichenkettenwerte vergleichen (verwenden Sie doppelte Anführungszeichen):

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

Boolesche Werte vergleichen:

enabled == true
fault != false

Alle Bedingungen müssen wahr sein:

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

Mindestens eine Bedingung muss wahr sein:

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

Verwenden Sie Klammern zur Gruppierung (falls unterstützt):

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

Prüfen, ob der Wert im Bereich liegt:

temperature >= 20 && temperature <= 30

Warnung, wenn der Wert den Schwellenwert überschreitet:

temperature > 80
pressure > 150
vibration > 5.0

Auf spezifische Statuswerte prüfen:

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

Warnung bei mehreren Bedingungen:

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

Sicherstellen, dass mehrere Bedingungen erfüllt sind:

temperature > 50 && pressure > 100 && flow > 10
// Hohe Temperaturwarnung
temperature > 80
// Temperatur außerhalb des Bereichs
temperature < 15 || temperature > 35
// Kritische Temperatur mit Druck
temperature > 100 && pressure > 150
// Maschine unerwartet gestoppt
status == "stopped" && runtime > 0
// Fehlerzustand
status == "error" || status == "fault"
// Nicht im Automatikmodus
mode != "auto"
// Fehler erkannt
defect_count > 0
// Außerhalb der Spezifikation
dimension < 9.9 || dimension > 10.1
// Mehrere Qualitätsparameter
hardness < 50 || surface_finish > 2.0 || weight < 100
// Prozess außer Kontrolle
temperature > 90 || pressure < 95 || flow < 50
// Stabiler Betrieb
temperature >= 80 && temperature <= 85 && pressure > 100
// Not-Stopp-Bedingung
temperature > 120 || pressure > 200 || vibration > 10
// Anomalie erkannt
is_anomaly == true
// Hoher Anomalie-Score
anomaly_score > 0.8
// Mehrere Indikatoren
vibration > 5 || temperature > 90 || anomaly_score > 0.7
// Gut
temperature > 80
machine_status == "running"
// Vermeiden
t > 80
s == "r"
// Für Gleichheit verwenden Sie ==
status == "active"
// Für Ungleichheit verwenden Sie !=
count != 0
// Gut - verwandte Bedingungen zusammen
temperature > 80 && pressure > 150
// Gut - alternative Bedingungen
status == "error" || status == "fault"

UND (&&) hat höhere Priorität als ODER (||):

// Dies prüft: (A && B) || C
temperature > 80 && pressure > 150 || humidity > 90
// Verwenden Sie Klammern zur Klarheit
(temperature > 80 && pressure > 150) || humidity > 90

Testen Sie Ausdrücke mit verschiedenen Eingabewerten, um sicherzustellen, dass sie wie erwartet funktionieren.

  • Keine arithmetischen Operationen: Sie können nicht temperature + 10 > 90 machen
  • Keine Funktionsaufrufe: Sie können nicht abs(temperature) > 80 machen
  • Kein verschachtelter Feldzugriff: Sie können nicht sensor.temperature > 80 machen
  • Nur Zeichenkettenvergleich: Kein Regex oder Pattern Matching

Prüfen Sie:

  1. Feldnamen stimmen genau mit dem Payload überein (Groß-/Kleinschreibung beachten)
  2. Datentypen stimmen überein (Zahl vs. Zeichenkette)
  3. Operator ist korrekt (== nicht =)
  4. Zeichenkettenwerte verwenden doppelte Anführungszeichen

Prüfen Sie:

  1. Logik ist korrekt (UND vs. ODER)
  2. Schwellenwerte sind angemessen
  3. Feld existiert im Payload

Häufige Fehler:

  • Verwendung von = statt ==
  • Fehlende Anführungszeichen um Zeichenketten
  • Tippfehler in Feldnamen
  • Falsche Operator-Rangfolge
{
"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"]
}
}
}