Neu: Die KI-Firewall überwacht jedes Modul und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Datentransformationsblöcke

Referenz zu Change, Calculate, Scale, Template, JSON, CSV, XML, Hex, Base64 und Bytes – den Blöcken, die Nachrichtendaten umformen, berechnen und dekodieren.

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.

EinstellungBedeutungWerte
opsDie Schrittebis zu 16 Zeilen

Jeder Schritt:

opFunktionFelder
setSchreibt einen Wert; fehlende übergeordnete Pfade werden angelegtpath, value (Wert beliebigen Typs)
changeErsetzt jedes Vorkommen von from durch to im Text; Nicht-Text bleibt unverändertpath, from, to, regex (ein Muster mit höchstens 64 Zeichen)
deleteEntfernt die Eigenschaft oder Variablepath
moveKopiert 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 keysKopiert jeden Schlüssel der obersten Ebene des Objekts unter path, dessen vollständiger Name mit Keys matching übereinstimmt, nach To objectpath, Keys matching, To object
delete keysLöscht jeden Schlüssel der obersten Ebene, dessen vollständiger Name übereinstimmtpath, 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.

EinstellungBedeutungStandardWerte
exprDer Ausdruckerforderlichbis zu 512 Zeichen
targetWohin das Ergebnis geschrieben wirdmsg.payloadein 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.

EinstellungBedeutungStandardWerte
propertyDie Zahlmsg.payloadein Pfad
in_min, in_maxDer Eingabebereich0, 4095Zahlen, nicht gleich
out_min, out_maxDer Ausgabebereich0, 100Zahlen
modeAußerhalb des Ausgabebereichsclampclamp (begrenzen), wrap (umlaufen), free (freilassen)
roundNachkommastellenkeine0 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.

EinstellungBedeutungStandardWerte
templateDer Text{{ msg.payload }}bis zu 4.096 Zeichen
targetWohin das Ergebnis geschrieben wirdmsg.payloadein msg.-, flow.– oder global.-Pfad
formattext oder json (das Ergebnis wird als JSON geparst)texttext, 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.

EinstellungBedeutungStandardWerte
modeauto (Text parsen, Rest durchreichen), parse, stringifyauto
propertyDie Eigenschaftmsg.payloadein 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.

EinstellungBedeutungStandardWerte
modeauto, decode, encodeauto
propertyDie Eigenschaftmsg.payloadein Pfad
sepFeldtrennzeichenKommaKomma, Semikolon, Tabulator, Pipe
headerDecode: Die erste Zeile enthält die Namen. Encode: Eine Kopfzeile schreibenoffon, off
columnsSpaltennamen, durch Komma getrenntleerbis zu 256 Zeichen
numbersDecode: zahlenähnliche Felder werden zu Zahlenoffon, off
outputDecode: eine Nachricht mit allen Datensätzen (array) oder eine pro Datensatz (rows)arrayarray, 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.

EinstellungBedeutungStandard
Modeparse, build oder auto
PropertyWo die Umwandlung stattfindetmsg.payload
Attribut-PräfixPräfix der Attributschlüssel@
TextschlüsselSchlüssel des Texts neben untergeordneten Elementen#text
Arrays / Array-ElementeWelche Elemente immer Arrays sind
NumbersNumerischer Text wird zu Zahlenoff
SelectNur einen Elementpfad behalten, z. B. soap:Envelope/soap:Body/*/m:Price
Root, DeclarationBeim Erstellen: der Name des Root-Elements, die Zeile <?xml …?>
Max bytesGrößte Eingabe64 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.

EinstellungBedeutungStandardWerte
modeRichtungautoauto, encode, decode
propertyDie Eigenschaftmsg.payloadein 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.

EinstellungBedeutungStandardWerte
modeLesen oder erstellendecodedecode, encode
fieldsEine Zeile pro Feldleerbis zu 16 Zeilen

Jedes Feld:

FeldBedeutungStandardWerte
nameSchlüssel im Ergebniserforderlichzuerst ein Buchstabe oder _, bis zu 32 Zeichen
offsetErstes Byte, ab 000 bis 4.095
typeGröße und Artu16u8, i8, u16, i16, u32, i32, f32
leLittle Endianoff (Big Endian)on, off
bitsEin Bitbereich start:lengthganzes Feldz. B. 0:1, 4:3
scaleDecode: × scale; Encode: ÷ scale1eine 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.