Node-RED Grundlagen
Node-RED ist das Fundament von ProcessCube® LowCode. Diese Seite erklärt die grundlegenden Konzepte, die Sie verstehen müssen, um effektiv mit ProcessCube® LowCode zu arbeiten.
Was ist Node-RED?
Node-RED ist eine Open-Source-Programmierumgebung für Flow-basierte Programmierung (Flow-Based Programming, FBP). Sie wurde ursprünglich von IBM entwickelt und ist heute ein eigenständiges Projekt der OpenJS Foundation.
Kernmerkmale
- Visueller Editor: Browser-basierter Editor zum Erstellen von Flows
- JavaScript-Basis: Runtime basiert auf Node.js
- Event-Driven: Asynchrone, non-blocking Verarbeitung
- Erweiterbar: Über 4.000 Community-Nodes verfügbar
- Produktionsreif: Millionen Deployments weltweit
Flows
Ein Flow ist eine Sammlung von Nodes, die durch Verbindungen (Wires) miteinander verknüpft sind.
Flow-Struktur
[Node 1] ──wire──> [Node 2] ──wire──> [Node 3]Jeder Flow hat:
- Eindeutige ID: Zur Identifikation
- Tab im Editor: Eigener Workspace
- Eigener Context: Isolierter Datenspeicher
- Deploy-Status: Kann einzeln deployed werden
Flow-Beispiel
Einfacher HTTP-Endpunkt:
[http in: GET /hello] → [function: create response] → [http response]Function Node Code:
msg.payload = {
message: "Hello from Node-RED!",
timestamp: new Date().toISOString()
};
return msg;Flows exportieren/importieren
Export:
- Flow auswählen
- Menü → Export → Clipboard
- JSON-Code kopieren
Import:
- Menü → Import
- JSON-Code einfügen
- Import bestätigen
Nodes
Nodes sind die Bausteine von Flows. Jede Node führt eine spezifische Aufgabe aus.
Node-Typen
Input-Nodes
Empfangen Daten von externen Quellen:
- http in: HTTP-Requests empfangen
- mqtt in: MQTT-Messages empfangen
- inject: Manuell triggern oder zeitgesteuert
- websocket in: WebSocket-Verbindungen
Function-Nodes
Verarbeiten und transformieren Daten:
- function: JavaScript-Code ausführen
- template: Text-/JSON-Templates rendern
- change: Message-Properties ändern
- switch: Bedingte Verzweigung
Output-Nodes
Senden Daten an externe Systeme:
- http response: HTTP-Response senden
- debug: Debug-Ausgabe anzeigen
- mqtt out: MQTT-Message senden
- http request: HTTP-Request ausführen
Node-Konfiguration
Jede Node hat Configuration Properties:
- Name: Beschreibender Name (optional)
- Type-Specific Settings: Node-spezifische Parameter
- Credentials: Passwörter und API-Keys (verschlüsselt)
Beispiel - http in Node:
Name: "API Endpoint"
Method: POST
URL: /api/usersNode-Status
Nodes zeigen ihren Status unterhalb der Node an:
- Grüner Punkt: Erfolgreich
- Roter Punkt: Fehler
- Gelber Punkt: Warnung
- Blauer Ring: In Bearbeitung
Messages
Messages sind JavaScript-Objekte, die zwischen Nodes fließen.
Message-Struktur
{
payload: ..., // Hauptdaten (beliebiger Typ)
topic: "...", // Thema/Kategorie (String)
_msgid: "...", // Eindeutige Message-ID
// ... weitere Properties
}Message Properties
payload: Die Nutzdaten
msg.payload = "Hello World"; // String
msg.payload = 42; // Number
msg.payload = {name: "Max", age: 30}; // Object
msg.payload = ["a", "b", "c"]; // Arraytopic: Klassifizierung
msg.topic = "temperature";
msg.topic = "user/login";Custom Properties: Beliebige Properties
msg.timestamp = Date.now();
msg.userId = 123;
msg.headers = {"Content-Type": "application/json"};Message-Manipulation
In Function Node:
// Payload ändern
msg.payload = "New Value";
// Property hinzufügen
msg.timestamp = new Date().toISOString();
// Property löschen
delete msg.topic;
// Message weitergeben
return msg;
// Keine Message senden
return null;
// Mehrere Messages senden
return [msg1, msg2, msg3];Verbindungen (Wires)
Wires verbinden Output-Ports von Nodes mit Input-Ports anderer Nodes.
Einfache Verbindung
[Node A] ──wire──> [Node B]Mehrere Outputs
Nodes können mehrere Output-Ports haben:
[switch]
├──output 1──> [Node A]
├──output 2──> [Node B]
└──output 3──> [Node C]Switch Node Beispiel:
// Routing basierend auf msg.payload
if (msg.payload > 100) return [msg, null]; // Output 1
else return [null, msg]; // Output 2Multiple Targets
Ein Output kann an mehrere Inputs gehen:
┌──> [Node B]
[Node A] ───┤
└──> [Node C]Hinweis: Message wird an beide Nodes gesendet (Broadcast).
Deployment
Deployment ist der Prozess, Änderungen an Flows zu aktivieren.
Deploy-Modi
Full: Alle Flows neu deployen (Standard)
Alle Nodes werden neugestartetModified Flows: Nur geänderte Flows deployen
Nur betroffene Flows werden neugestartetModified Nodes: Nur geänderte Nodes deployen
Minimal-invasiv, schnellster DeployDeploy-Button
Der Deploy-Button (rot, oben rechts) zeigt den Status:
- Rot: Änderungen vorhanden, Deploy notwendig
- Grau: Keine Änderungen, bereits deployed
Was passiert beim Deploy?
- Flows stoppen: Aktuell laufende Flows werden gestoppt
- Flows laden: Neue Flow-Definitionen werden geladen
- Nodes initialisieren: Alle Nodes werden neu initialisiert
- Flows starten: Flows werden gestartet
Wichtig: Während des Deployments sind Flows kurzzeitig nicht verfügbar!
Subflows
Subflows sind wiederverwendbare Flow-Komponenten.
Subflow erstellen
- Nodes auswählen
- Rechtsklick → “Subflow” → “Selection to Subflow”
- Subflow benennen
- Input/Output Ports definieren
Subflow-Beispiel
Subflow: “Validate User”:
[Input] → [function: check required fields] → [function: validate email] → [Output]Verwendung:
[http in] → [Subflow: Validate User] → [database] → [http response]Vorteile
- Wiederverwendbarkeit: Einmal definieren, mehrfach nutzen
- Übersichtlichkeit: Komplexe Logik kapseln
- Wartbarkeit: Änderungen an einer Stelle
Context
Context ermöglicht das Speichern von Daten über mehrere Messages hinweg.
Context-Arten
Node Context
Privater Speicher für eine Node:
// In Function Node
context.set("counter", 0);
let count = context.get("counter") || 0;
context.set("counter", count + 1);Flow Context
Geteilt zwischen Nodes eines Flows:
// In Function Node A
flow.set("userToken", "abc123");
// In Function Node B (gleicher Flow)
const token = flow.get("userToken");Global Context
Geteilt zwischen allen Flows:
// In Flow 1
global.set("config", {apiUrl: "http://api.example.com"});
// In Flow 2
const config = global.get("config");Context Storage
Context kann persistent gespeichert werden:
settings.js:
contextStorage: {
default: "memoryOnly", // Im RAM (verloren nach Neustart)
file: {
module: "localfilesystem" // Auf Festplatte (persistent)
}
}Verwendung:
flow.set("data", value, "file"); // In Datei speichern
const data = flow.get("data", "file"); // Aus Datei ladenEnvironment Variables
Environment Variables ermöglichen Konfiguration ohne Hard-Coding.
In Docker setzen
environment:
- ENGINE_URL=http://engine:8000
- AUTHORITY_URL=http://authority:5000In Flows verwenden
// In Function Node
const engineUrl = env.get("ENGINE_URL");
msg.url = `${engineUrl}/api/process-models`;
return msg;Debugging
Node-RED bietet mehrere Debugging-Tools.
Debug Node
[any node] → [debug]Configuration:
- Output:
msg.payload(Standard) - To: Debug Console
- Format: auto, JSON, String
Debug Console
Ansicht: Rechtes Panel → Debug
Zeigt:
- Message-Inhalt
- Timestamp
- Node-Name
- Message-ID
Catch Node
Fängt Fehler in Flows ab:
[function] ──error──> [catch] → [debug: error] → [email: alert]Status Node
Reagiert auf Status-Änderungen:
[http request] ──status change──> [status] → [debug]Best Practices
1. Nodes benennen
❌ function 1, http in 1, debug 1
✅ validate input, API endpoint, log error2. Flows strukturieren
Empfohlene Tab-Organisation:
APIs- REST-EndpunkteEngine- ProcessCube® IntegrationDashboards- UI-FlowsUtilities- HilfsfunktionenConfig- Konfiguration
3. Comments nutzen
Verwenden Sie comment Nodes zur Dokumentation:
[comment: "Dieser Flow verarbeitet User-Registrierungen"]4. Link Nodes
Vermeiden Sie lange Verbindungen mit link Nodes:
[http in] → [link out: "process"]
[link in: "process"] → [function] → [http response]5. Error Handling
Immer catch Nodes für Error Handling:
[function] ──error──> [catch] → [log] → [send alert]6. Subflows für Wiederverwendbarkeit
Lagern Sie wiederkehrende Logik in Subflows aus.
Editor-Shortcuts
Wichtige Tastenkombinationen
| Shortcut | Aktion |
|---|---|
Strg/Cmd + I | Import aus Clipboard |
Strg/Cmd + E | Export zu Clipboard |
Strg/Cmd + F | Suche |
Strg/Cmd + Z | Rückgängig |
Strg/Cmd + Y | Wiederholen |
Strg/Cmd + A | Alle auswählen |
Strg/Cmd + C | Kopieren |
Strg/Cmd + V | Einfügen |
Del | Löschen |
Nächste Schritte
Jetzt, da Sie die Node-RED Grundlagen kennen:
- ProcessCube®-spezifische Konzepte - Engine-Integration lernen
- Portal-Integration - UserTask-UIs erstellen
- Beispiel-Flows - Praktische Flows ausprobieren
Ressourcen
- Node-RED Dokumentation - Offizielle Docs
- Node-RED Cookbook - Rezepte für häufige Aufgaben
- Node-RED Forum - Community-Support
- Node-RED Flow Library - Community-Flows durchsuchen