Diese Bausteine entscheiden, wohin eine Nachricht geht und wann. Bausteine, die Nachrichten warten lassen oder zurückhalten, speichern sie dauerhaft: Ein Neustart der Plattform verwirft sie nicht. Sofern kein Schlüssel gesetzt ist, behalten Bausteine, die sich pro Schlüssel etwas merken, je einen Speicher pro Gerät (den Originator der Nachricht). Jeder Baustein verwaltet höchstens 10.000 Schlüssel und hält höchstens 16 MiB Nachrichten.
Switch
Leitet eine Nachricht anhand des Werts einer Eigenschaft weiter. Jede Regel hat einen eigenen Ausgang.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| property | Der Wert, den die Regeln prüfen | msg.payload | ein Pfad |
| rules | Eine Zeile und ein Ausgang je Regel: op, value (und value2 für between), optional Name | keiner | bis zu 16 Regeln |
| stop_first | Nur an die erste passende Regel senden | on | on, off |
Outputs: o0 … o15 (one per rule, labelled with the rule’s Name if set), else (shown as „otherwise“), error. Operators are those of Compare, plus between (from value to value2, both included) and expr (the rule’s own expression is true). With stop_first off, every matching rule gets the message.
Gate
Lässt Nachrichten durch, solange offen; hält sie zurück oder verwirft sie, solange geschlossen.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| initial | Zustand beim Start des Flows | open | open, closed |
| control_topic | Topic der Steuernachrichten; leer = keines | gate | bis zu 64 Zeichen |
| condition | Optionaler Ausdruck: offen nur, solange wahr | leer | ein Ausdruck |
| closed | Eine Nachricht im geschlossenen Zustand | drop | drop, queue |
| max_queue | Anzahl der Nachrichten, die beim Warten gespeichert werden | 32 | bis 1.000 |
Steuernachrichten haben msg.topic gleich dem Steuer-Topic und msg.payload open (oder true, 1, on), close (oder false, 0, off), toggle oder status; sie werden nicht weitergeleitet. Ausgänge: out, dropped (verworfen im geschlossenen Zustand oder aus einer vollen Warteschlange verdrängt), error. Beispiel für eine Bedingung für Arbeitszeiten: number(fmt_time(now(), "%H")) >= 8 && number(fmt_time(now(), "%H")) < 18.
Alle von
Wartet, bis Nachrichten mit unterschiedlichen Schlüsseln (standardmäßig unterschiedlichen Topics) innerhalb eines Zeitfensters alle eingetroffen sind, und sendet dann eine Nachricht mit allen ihren Payloads.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| window_ms | Alle Nachrichten müssen jünger als dieser Wert sein; 0 = keine Begrenzung | 10 s | 0 bis 24 h |
| key | Woher der Schlüssel gelesen wird | msg.topic | ein Pfad |
| min_inputs | Wie viele verschiedene Schlüssel benötigt werden | 2 | 2 bis 16 |
Ausgang out: die abschließende Nachricht mit msg.payload = { key: payload, … }. Nur die abschließende Nachricht wird ausgegeben. Was sie sammelt, wird standardmäßig pro Gerät gespeichert (group_by: Originator oder Flow).
Beliebige von
Lässt jede Nachricht passieren; optional werden Wiederholungen eines Schlüssels verworfen.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| dedup_ms | Eine Nachricht verwerfen, deren Schlüssel vor weniger als dieser Zeit durchgelaufen ist; 0 = alle durchlassen | 0 | 0 bis 24 h |
| key | Der Schlüssel für die Wiederholungsprüfung | msg.topic | ein Pfad |
Nicht
Ersetzt msg.payload durch sein logisches Gegenteil, true oder false. false, null, 0, "" und Nicht-Zahl werden zu true; alles andere (auch "0", "false", [], {}) wird zu false. Keine Einstellungen.
Split
Eine Nachricht pro Teil von msg.payload: pro Array-Element, pro Objektschlüssel, pro Textzeile oder pro Block fester Größe.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | auto (Element, Schlüssel oder Trennzeichen) oder length (Blöcke) | auto | auto, length |
| delimiter | Wo der Text geteilt wird; \n Zeilenumbruch, \t Tabulator | \n | bis zu 16 Zeichen |
| length | Blockgröße in Elementen oder Zeichen | 1 | 1 bis 65.536 |
Jeder Teil trägt msg.parts (id, index, count, type, key …) für Join. Fehler queue_full ab 10.000 Teilen.
Join
Sammelt Nachrichten zu einer einzigen.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | auto fügt zusammen, was Split zerteilt hat; manual baut aus beliebigen Nachrichten | auto | auto, manual |
| build | Was gebaut werden soll (manuell) | array | array, object, string |
| joiner | Zwischen den Textteilen | \n | bis zu 16 Zeichen |
| key | Objektschlüssel jeder Nachricht | msg.topic | ein Pfad |
| count | Nach so vielen Nachrichten senden; 0 = keine Zählung | 0 | 0 bis 10.000 |
| timeout_ms | Senden, was so lange nach der ersten Nachricht eingetroffen ist; 0 = warten | 0 | 0 bis 24 h |
msg.complete (beliebiger Wert) sendet eine manuelle Gruppe sofort. Im manuellen Modus count, timeout_ms oder msg.complete setzen, sonst wird die Gruppe erst bei der Obergrenze von 10.000 Nachrichten ausgegeben.
Sort
Sorts a list (array mode: property, optional field) or the messages of a group made by Split or Batch (messages mode: key, timeout_ms). Settings: order asc/desc, numeric on/off (without it, "10" sorts before "9"). Error queue_full over 10,000 elements.
Batch
Sendet Nachrichten gruppenweise weiter.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| mode | Nach Anzahl oder nach Zeit | count | count, interval |
| count | Nachrichten in einer Gruppe | 10 | 1 bis 10.000 |
| overlap | Nachrichten der letzten Gruppe werden mit der nächsten erneut gesendet | 0 | 0 bis count − 1 |
| interval_ms | Zeit von der ersten wartenden Nachricht, bis die Gruppe ausgegeben wird | 1 s | 1 ms bis 24 h |
Jede Nachricht einer Gruppe erhält msg.parts; ein Join im Modus auto macht daraus dann eine Liste.
Delay
Hält jede Nachricht zurück und sendet sie dann unverändert weiter.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| ms | Wartezeit | 1 s | 0 bis 7 Tage |
| ms2 | Obere Grenze einer zufälligen Wartezeit | leer | 0 bis 7 Tage |
| from_msg | Die Wartezeit aus msg.delay übernehmen | off | on, off |
| max_pending | Gleichzeitig wartende Nachrichten | 1,000 | 1 bis 100.000 |
| on_new | queue: jede wartet ihre eigene Zeit; restart: eine neue Nachricht verwirft die wartenden Nachrichten ihres Schlüssels | queue | queue, restart |
| key | Schlüssel für restart | msg.originator | ein Pfad |
msg.reset = true verwirft alle wartenden Nachrichten. Fehler queue_full, wenn max_pending erreicht ist.
Debounce
Eine Nachricht pro Schwall.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| ms | Ruhezeit, die einen Schwall beendet | 500 ms | 0 bis 24 h |
| edge | trailing: die letzte Nachricht nach der Ruhezeit; leading: die erste sofort | trailing | trailing, leading |
| key | Jeder Schlüssel wird separat entprellt | msg.originator | ein Pfad |
Deduplizieren
Eine Nachricht pro Zeitraum und Schlüssel, egal wie viele eintreffen.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| strategy | first, last oder all (eine Nachricht, deren Payload jedes { payload, metadata } auflistet) | first | first, last, all |
| window_ms (Period) | Beginnt mit der ersten Nachricht eines Schlüssels | 60 s | 1 s bis 24 h |
| key | Ein Paket pro Wert | msg.originator | ein Pfad |
| time | message (die eigene Zeit des Messwerts, aus ts_path oder der Aufzeichnungszeit) oder arrival | message | message, arrival |
| ts_path | Wo die Zeit des Messwerts steht (time = message) | die Aufzeichnungszeit | ein Pfad |
| max_pending | Gespeicherte Nachrichten pro Schlüssel für all | 100 | 1 bis 1.000 |
| msg_type | Nachrichtentyp des all-Ergebnisses | der Nachrichtentyp der ersten Nachricht | bis zu 64 Zeichen |
Das Ergebnis trägt msg.metadata.dedup mit count, start und end. Bei Time message ergibt ein nachgeholter Rückstau ein Ergebnis pro Zeitraum der Gerätezeit.
Ratenbegrenzung
Höchstens n Nachrichten pro Zeitraum und Schlüssel.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| n | Nachrichten pro Zeitraum | 1 | 1 bis 10.000 |
| per_ms | Der gleitende Zeitraum | 1 s | 1 ms bis 24 h |
| mode | Bei Überschreitung: drop, latest (nur die neueste behalten), queue | drop | drop, latest, queue |
| max_queue | Wartende Nachrichten pro Schlüssel | 32 | 1 bis 1.000 |
| key | Jeder Schlüssel hat eine eigene Begrenzung | msg.originator | ein Pfad |
Ausgänge: out, dropped. Vor einem SMS-, E-Mail- oder externen Aufruf einsetzen.
Nur Änderungen
Leitet eine Nachricht nur weiter, wenn sich ihr Wert seit der letzten weitergeleiteten geändert hat.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| property | Der Wert | msg.payload | ein Pfad |
| mode | change, deadband (um mindestens value), deadband_pct (um mindestens value % des letzten Werts) | change | |
| value | Das Totband | 0 | 0 oder mehr |
| key | Jeder key hat seinen eigenen letzten Wert | msg.originator | ein Pfad |
| first | Den ersten Wert eines key durchlassen | on | on, off |
Der neue Wert wird mit dem letzten Wert verglichen, der durchgelassen wurde, sodass langsame Drift gemeldet wird, sobald sie sich summiert.
Trigger
Sendet eine erste Nachricht, wartet und sendet dann eine zweite.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| first | Sofort gesendet: die Nachricht selbst, nichts oder ein Wert für msg.payload | the message | |
| then | Nach der Wartezeit gesendet: nichts, die Nachricht oder ein Wert | nothing | |
| ms | Wait | 1 s | 0 bis 7 Tage |
| extend | Eine neue Nachricht während der Wartezeit startet die Wartezeit neu | off | on, off |
| key | Jeder key hat seine eigene Wartezeit | msg.originator | ein Pfad |
msg.reset = true bricht die Wartezeit dieses key ab.
Detach
Der restliche Zweig läuft separat, sodass die nächste Nachricht des Geräts nicht auf ihn wartet. Vor einem langsamen Zweig verwenden. Danach ist die Reihenfolge der Nachrichten nicht garantiert. Keine Einstellungen.
Link call
Sendet die Nachricht an einen Link in (oder mit flow:<slug> an den Flow input eines anderen Flows) und wartet auf die Antwort von einem Link out im Modus return.
| Einstellung | Bedeutung | Standard | Werte |
|---|---|---|---|
| target | Der Name des Link in | erforderlich | |
| timeout_ms | Auf die Antwort warten | 30 s | 1 ms bis 1 h |
| returns | Benannte Rückgaben des Ziels; jede wird zu einem Ausgang | none |
Ausgänge: out (die Antwort), einer pro benannter Rückgabe, timeout (keine Antwort rechtzeitig; die ursprüngliche Nachricht), error (invalid_value kein solcher Link, queue_full, unknown_return, loop). Aufrufe sind höchstens 16 Ebenen tief verschachtelt; ein Aufruf in den eigenen Aufrufstapel schlägt mit loop fehl.

