Transform-Blöcke ändern die Nachricht und geben sie weiter. Mit ihnen benennen Sie Schlüssel um, berechnen Werte, bauen Texte und dekodieren Rohdaten von Geräten, bevor Save telemetry ausgeführt wird. Jeder hat einen out-Ausgang und einen error-Ausgang. Keiner von ihnen speichert einen Zustand.
Change
Setzt, bearbeitet, löscht oder verschiebt Eigenschaften der Nachricht sowie von Flow- oder globalen Variablen, in Schritten von oben nach unten.
| Einstellung | Bedeutung | Werte |
|---|---|---|
| ops | Die Schritte | bis zu 16 Zeilen |
Jeder Schritt:
| op | Funktion | Felder |
|---|---|---|
set | Schreibt einen Wert; fehlende übergeordnete Pfade werden angelegt | path, value (Wert beliebigen Typs) |
change | Ersetzt jedes Vorkommen von from durch to im Text; Nicht-Text bleibt unverändert | path, from, to, regex (ein Muster mit höchstens 64 Zeichen) |
delete | Entfernt die Eigenschaft oder Variable | path |
move | Kopiert an den Pfad in to und löscht dann das Original. Das Feld to wird im Editor noch nicht angezeigt; verwenden Sie stattdessen set und delete. | path, to |
copy keys | Kopiert jeden Schlüssel der obersten Ebene des Objekts unter path, dessen vollständiger Name mit Keys matching übereinstimmt, nach To object | path, Keys matching, To object |
delete keys | Löscht jeden Schlüssel der obersten Ebene, dessen vollständiger Name übereinstimmt | path, Keys matching |
Pfade sind msg.-, flow.– oder global.-Pfade (flow.persist:x für den persistenten Speicher). Engine-Felder (_…), msg.msgType und msg.originator können nicht geschrieben werden. Fehler: invalid_value mit invalid_path, read_only, invalid_key, limit (Variablenspeicher voll) oder bad pattern; Schritte vor dem fehlerhaften sind bereits angewendet.
Beispiel: Benennen Sie den Schlüssel eines Geräts vor dem Speichern um: Schritt 1 set von msg.payload.temperature auf den Pfad msg.payload.tmp; Schritt 2 delete von msg.payload.tmp.
Calculate
Berechnet einen Ausdruck und schreibt das Ergebnis.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| expr | Der Ausdruck | erforderlich | bis zu 512 Zeichen |
| target | Wohin das Ergebnis geschrieben wird | msg.payload | ein msg.-, flow.– oder global.-Pfad |
7 / 2 ergibt 3.5; + verknüpft Text, sobald eine Seite Text ist; Arithmetik mit null oder jedem Text (auch "21.5") schlägt mit type fehl: Konvertieren Sie mit number(). Fehler: invalid_value, type, div_zero, steps, limit. Die Funktionen finden Sie unter Condition-Blöcke.
Beispiele: round(msg.payload.temperature * 1.8 + 32, 1); 10 * log10(msg.payload.ratio); clamp(msg.payload.level, 0, 100).
Scale
Bildet eine Zahl linear von einem Bereich in einen anderen ab, direkt an Ort und Stelle.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| property | Die Zahl | msg.payload | ein Pfad |
| in_min, in_max | Der Eingabebereich | 0, 4095 | Zahlen, nicht gleich |
| out_min, out_max | Der Ausgabebereich | 0, 100 | Zahlen |
| mode | Außerhalb des Ausgabebereichs | clamp | clamp (begrenzen), wrap (umlaufen), free (freilassen) |
| round | Nachkommastellen | keine | 0 bis 10 |
Formel: out_min + (value − in_min) × (out_max − out_min) / (in_max − in_min). Numerischer Text sowie true/false (1/0) zählen als Zahlen. Fehler invalid_value („not a number“ oder ein leerer Eingabebereich).
Template
Erstellt Text oder einen JSON-Wert aus {{ expression }}-Platzhaltern.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| template | Der Text | {{ msg.payload }} | bis zu 4.096 Zeichen |
| target | Wohin das Ergebnis geschrieben wird | msg.payload | ein msg.-, flow.– oder global.-Pfad |
| format | text oder json (das Ergebnis wird als JSON geparst) | text | text, json |
null wird zu leer, Objekte und Arrays werden als JSON geschrieben. Für JSON-Ausgabe setzen Sie Text-Platzhalter selbst in Anführungszeichen: {"temp": {{ msg.payload }}, "unit": "{{ flow.unit }}"}. Das Ergebnis umfasst höchstens 64 KB Text.
JSON
Wandelt JSON-Text in einen Wert oder einen Wert in JSON-Text um, direkt an Ort und Stelle.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | auto (Text parsen, Rest durchreichen), parse, stringify | auto | |
| property | Die Eigenschaft | msg.payload | ein Pfad |
Fehler: invalid_value „not JSON: …“ oder „not a string“.
CSV
Wandelt CSV-Text in Datensätze um oder Datensätze in CSV-Text, direkt an Ort und Stelle.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | auto, decode, encode | auto | |
| property | Die Eigenschaft | msg.payload | ein Pfad |
| sep | Feldtrennzeichen | Komma | Komma, Semikolon, Tabulator, Pipe |
| header | Decode: Die erste Zeile enthält die Namen. Encode: Eine Kopfzeile schreiben | off | on, off |
| columns | Spaltennamen, durch Komma getrennt | leer | bis zu 256 Zeichen |
| numbers | Decode: zahlenähnliche Felder werden zu Zahlen | off | on, off |
| output | Decode: eine Nachricht mit allen Datensätzen (array) oder eine pro Datensatz (rows) | array | array, rows |
Das Quoting folgt RFC 4180. Fehler queue_full bei mehr als 10.000 Zeilen oder Datensätzen.
XML
Wandelt XML-Text in ein Objekt um oder ein Objekt in XML-Text.
| Einstellung | Bedeutung | Standard |
|---|---|---|
| Mode | parse, build oder auto | |
| Property | Wo die Umwandlung stattfindet | msg.payload |
| Attribut-Präfix | Präfix der Attributschlüssel | @ |
| Textschlüssel | Schlüssel des Texts neben untergeordneten Elementen | #text |
| Arrays / Array-Elemente | Welche Elemente immer Arrays sind | |
| Numbers | Numerischer Text wird zu Zahlen | off |
| Select | Nur einen Elementpfad behalten, z. B. soap:Envelope/soap:Body/*/m:Price | |
| Root, Declaration | Beim Erstellen: der Name des Root-Elements, die Zeile <?xml …?> | |
| Max bytes | Größte Eingabe | 64 KiB (1 bis 256 KiB) |
Ein Dokument mit <!DOCTYPE wird abgelehnt. Höchstens 10.000 Elemente, 64 Attribute pro Element, 128 Zeichen pro Name. Fehler: parse_error, dtd_refused, too_large, too_deep, bad_name, no_root.
Hex und Base64
Kodiert eine Eigenschaft als Hex (zwei Kleinbuchstaben pro Byte) oder Base64-Text oder dekodiert sie zurück.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | Richtung | auto | auto, encode, decode |
| property | Die Eigenschaft | msg.payload | ein msg.-, flow.– oder global.-Pfad |
Bei auto wird Text, der wie Hex (oder Base64) aussieht, dekodiert, alles andere kodiert; kurze Wörter wie test oder Ziffern wie 2024 sind ebenfalls gültiges Base64 oder Hex, wählen Sie daher encode oder decode, wenn Sie die Richtung kennen. Hex-Dekodierung ignoriert Leerzeichen und Doppelpunkte.
Bytes
Liest benannte Zahlen aus Binärdaten oder erstellt Binärdaten aus Zahlen.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | Lesen oder erstellen | decode | decode, encode |
| fields | Eine Zeile pro Feld | leer | bis zu 16 Zeilen |
Jedes Feld:
| Feld | Bedeutung | Standard | Werte |
|---|---|---|---|
| name | Schlüssel im Ergebnis | erforderlich | zuerst ein Buchstabe oder _, bis zu 32 Zeichen |
| offset | Erstes Byte, ab 0 | 0 | 0 bis 4.095 |
| type | Größe und Art | u16 | u8, i8, u16, i16, u32, i32, f32 |
| le | Little Endian | off (Big Endian) | on, off |
| bits | Ein Bitbereich start:length | ganzes Feld | z. B. 0:1, 4:3 |
| scale | Decode: × scale; Encode: ÷ scale | 1 | eine Zahl |
Decode liest Hex-Text (Leerzeichen und Doppelpunkte werden ignoriert) oder ein Array von Byte-Werten in msg.payload und schreibt { name: value }. Encode schreibt Hex-Text. Fehler invalid_value, wenn die Daten kein Hex sind oder ein Feld hinter ihrem Ende liegt.
Beispiel: Eine Rohnutzlast 00d7ff9c mit temp (offset 0, i16, scale 0.1) und pressure (offset 2, i16) ergibt { "temp": 21.5, "pressure": -100 }.
Dekodieren von Rohdaten von Geräten
Ein Gerät, das Binärdaten sendet, kommt mit dem einzelnen Schlüssel raw an (Base64 für Binärdaten). Ein typischer Decoder im Root-Flow vor Save telemetry:
Switch (msg.payload.raw nempty) → Change: set msg.payload to the path msg.payload.raw
→ Base64 (decode) → Hex (encode) → Bytes (decode fields) → Save telemetry
Prüfen Sie das Ergebnis mit Test, bevor Sie es bereitstellen. Verwenden Sie für LoRaWAN-Geräte stattdessen Codecs; siehe Codecs overview. Für alles, was sich mit den Blöcken nicht ausdrücken lässt, verwenden Sie The script block.

