Beelink Mini S12 Pro (Intel N100)
Intel N100 Prozessor, 16GB RAM, 500GB SSD, stromsparend (~6W).

Stufe 3 · Kapitel 6 von 14
Du kennst die Grundlagen von Node-RED? Dann lass uns tiefer gehen: Subflows für wiederverwendbare Bausteine, Join-Nodes für komplexe Datenflüsse, robuste Fehlerbehandlung und Performance-Tuning für große Installationen.
In 30 Sekunden
Partnerlinks: Die mit 🛒 markierten Links sind Affiliate-Links. Bei einem Kauf erhalten wir eine kleine Provision – ohne Mehrkosten für dich.
Wenn du denselben Flow-Abschnitt in mehreren Tabs brauchst, ist Copy & Paste der falsche Weg. Änderungen müsstest du dann an jeder Kopie einzeln vornehmen. Subflows lösen dieses Problem: Du definierst einen Flow einmal und instanziierst ihn beliebig oft. Jede Instanz teilt dieselbe Logik, aber kann eigene Eigenschaftswerte mitbekommen.
Unter dem Menüpunkt „Subflows“ legst du einen neuen Subflow an. Darin baust du wie gewohnt Nodes zusammen. Das Besondere: Du kannst im Subflow-Editor benutzerdefinierte Eigenschaften definieren — zum Beispiel einen MQTT-Topic-Prefix oder einen Schwellwert. Diese Eigenschaften erscheinen dann in jeder Instanz als konfigurierbares Feld. So wird ein Subflow zu einem parametrisierbaren Baustein.
Ein häufiges Problem: Subflows laufen im Hintergrund, und du siehst nicht, was passiert. Ab Node-RED 3.0 kannst du die Status-Node verwenden, um den Zustand einer Subflow-Instanz im Parent-Flow anzuzeigen — zum Beispiel ein grünes Häkchen bei Erfolg oder eine Fehlermeldung bei Misserfolg.
Pro-Tipp
Benenne deine Subflows mit einem klaren Präfix wiesf_mqtt_publishodersf_alert_handler. So findest du sie im Node-Palette-Filter sofort wieder — besonders wichtig, wenn dein Projekt auf 20+ Subflows anwächst.
In der echten Welt kommen Daten selten aus einer einzigen Quelle. Vielleicht willst du die Außentemperatur, den Fensterstatus und die Heizungsstellung gleichzeitig auswerten, bevor du eine Entscheidung triffst. Genau dafür gibt es die Join-Node: Sie sammelt Nachrichten aus verschiedenen Zweigen und feuert erst, wenn alle erwarteten Eingänge vorliegen.
Im Modus „manual" gibst du an, wie viele Nachrichten die Node sammeln soll, bevor sie weitergibt. Im Modus „automatic" erzeugt die Node ein Array aller eingehenden Nachrichten. Beide Modi lassen sich mit einem Timeout kombinieren — wichtig, falls eine Quelle nicht antwortet und der Flow sonst blockiert.
Der häufigste Fehler: Die Join-Node wartet ewig, weil ein Zweig keine Nachricht sendet. Lösung: Setze immer einen Timeout (z.B. 10 Sekunden) und leite die Nachricht über einen Catch-Node an eine Fehlerbehandlung weiter. Ein weiteres Problem entsteht, wenn du vergessen hast, die msg.parts-Eigenschaft korrekt zu setzen — ohne sie weiß die Join-Node nicht, welche Nachricht zu welchem Stream gehört.
Ein Flow ohne Fehlerbehandlung funktioniert — bis etwas schiefgeht. Dann stürzt der Flow stillschweigend ab oder, schlimmer, führt unerwartete Aktionen aus. Robuste Fehlerbehandlung ist kein Nice-to-have, sondern Pflicht.
Die Catch-Node fängt Fehler von beliebigen Nodes auf und leitet sie an einen Fehlerbehandlungs-Zweig weiter. Du kannst sie auf bestimmte Node-Typen oder sogar einzelne Nodes einschränken. Im Fehlerhandling-Zweig protokollierst du den Fehler (z.B. per msg.error) und entscheidest, ob der Flow fortgesetzt, abgebrochen oder ein Fallback ausgeführt wird.
Wenn ein Service wiederholt fehlschlägt, solltest du nicht endlos probieren. Ein Circuit Breaker merkt sich die Anzahl aufeinanderfolgender Fehler und öffnet den Stromkreis nach z.B. drei Fehlern. Für eine konfigurierbare Zeit werden dann keine weiteren Requests gesendet. In Node-RED baust du das mit einer Kombination aus Counter, Switch und Delay.
Wusstest du schon?
Node-RED speichert fehlerhafte Nachrichten standardmäßig nicht. Wenn du nachvollziehen willst, was schiefgelaufen ist, brauchst du eine eigene Log-Strategie — z.B. eine Function-Node, die Fehler in eine Datei oder einen MQTT-Topic schreibt.
Manche Informationen müssen über mehrere Nachrichtenaufrufe hinweg erhalten bleiben — zum Beispiel der letzte bekannte Temperaturwert oder ein Zähler. Dafür bietet Node-RED drei Context-Ebenen: Node-Context (nur für diese eine Node), Flow-Context (geteilt im gesamten Tab) und Global-Context (über alle Tabs hinweg).
Flow-Context ist die richtige Wahl, wenn Daten nur innerhalb eines Tabs geteilt werden sollen. Global-Context nutzt du, wenn mehrere Tabs auf dieselben Daten zugreifen müssen — zum Beispiel eine System-Konfiguration oder eine Liste aktiver Alarme. Achtung: Global-Context verringert die Isolation zwischen Tabs und kann ungewollte Seiteneffekte verursachen, wenn Variablen an vielen Stellen gelesen und geschrieben werden.
Standardmäßig geht der Context beim Neustart von Node-RED verloren. In der settings.js kannst du jedoch persistenten Context aktivieren. Node-RED speichert die Werte dann in einer Datei (default) oder in Redis. Das ist besonders wichtig für Zähler, Schwellwerte oder den letzten bekannten Zustand eines Geräts.
Pro-Tipp
Vermeide es, große Objekte im Global-Context zu speichern. Bei jedem Zugriff wird das gesamte Objekt serialisiert und deserialisiert. Besser: Schlüssel granular anlegen (z.B.global.heizung.wohnzimmer.soll) statt ein riesiges heizung-Objekt.
Node-RED ist erstaunlich schnell — bis es das nicht mehr ist. Wenn dein Flow hundert Function-Nodes enthält, die bei jeder Nachricht komplexe Berechnungen ausführen, spürst du die Verzögerung. Hier sind die wichtigsten Hebel:
Intel N100 Prozessor, 16GB RAM, 500GB SSD, stromsparend (~6W).
Der Preis-Leistungs-Favorit für Home Assistant und ioBroker im Einstieg.