Skip to Content
Low-CodeDevelopmentEigene Nodes entwickeln

Eigene Nodes entwickeln

Eigene Nodes (Custom Nodes) erweitern Node-RED um projektspezifische Funktionalität. Dieser Abschnitt erklärt die Node-Architektur, zeigt die Entwicklung Schritt für Schritt und beschreibt, wie Sie das ProcessCube® AppTemplate als Ausgangspunkt nutzen.

Node-Architektur

Jeder Node-RED Node besteht aus drei Bestandteilen:

DateiZweckBeschreibung
*.jsRuntimeEnthält die Logik, die auf dem Server ausgeführt wird
*.htmlEditorDefiniert die Konfigurationsoberfläche im Node-RED Editor
package.jsonRegistrierungOrdnet die Node-Dateien einem npm-Paket zu

Schritt-für-Schritt: Eigene Node erstellen

1. Projektstruktur anlegen

my-custom-node/ ├── nodes/ │ └── convert-temperature/ │ ├── convert-temperature.js │ └── convert-temperature.html ├── package.json └── README.md

2. package.json konfigurieren

Der node-red-Abschnitt teilt Node-RED mit, welche Nodes das Paket bereitstellt:

{ "name": "node-red-contrib-convert-temperature", "version": "1.0.0", "description": "Konvertiert Temperaturen zwischen Celsius, Fahrenheit und Kelvin", "keywords": ["node-red"], "node-red": { "nodes": { "convert-temperature": "nodes/convert-temperature/convert-temperature.js" } } }

3. Runtime-Datei erstellen (JS)

module.exports = function(RED) { function ConvertTemperatureNode(config) { RED.nodes.createNode(this, config); const node = this; const targetUnit = config.targetUnit || 'celsius'; node.on('input', function(msg, send, done) { try { const value = parseFloat(msg.payload); if (isNaN(value)) { done(new Error("Payload ist keine gültige Zahl")); return; } switch (targetUnit) { case 'celsius': msg.payload = (value - 32) * 5/9; break; case 'fahrenheit': msg.payload = (value * 9/5) + 32; break; case 'kelvin': msg.payload = value + 273.15; break; } node.status({ fill: "green", shape: "dot", text: `${value} → ${msg.payload.toFixed(2)} ${targetUnit}` }); send(msg); done(); } catch (err) { done(err); } }); node.on('close', function(done) { // Ressourcen freigeben (z.B. Datenbankverbindungen) done(); }); } RED.nodes.registerType("convert-temperature", ConvertTemperatureNode); }

4. Editor-Datei erstellen (HTML)

Die HTML-Datei besteht aus drei <script>-Blöcken — Registrierung, Edit-Dialog und Hilfetext:

<!-- 1. Node-Registrierung im Editor --> <script type="text/javascript"> RED.nodes.registerType('convert-temperature', { category: 'function', color: '#f7a823', defaults: { name: { value: "" }, targetUnit: { value: "celsius", required: true } }, inputs: 1, outputs: 1, icon: "font-awesome/fa-thermometer-half", label: function() { return this.name || "convert temperature"; } }); </script> <!-- 2. Edit-Dialog --> <script type="text/html" data-template-name="convert-temperature"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-targetUnit">Ziel-Einheit</label> <select id="node-input-targetUnit"> <option value="celsius">Celsius</option> <option value="fahrenheit">Fahrenheit</option> <option value="kelvin">Kelvin</option> </select> </div> </script> <!-- 3. Hilfetext --> <script type="text/html" data-help-name="convert-temperature"> <p>Konvertiert Temperaturwerte zwischen verschiedenen Einheiten.</p> </script>

Die RED.nodes.registerType API

OptionTypBeschreibung
categoryStringKategorie in der Node-Palette
colorStringHintergrundfarbe (Hex-Code)
defaultsObjectKonfigurationseigenschaften mit Standardwerten
credentialsObjectVerschlüsselt gespeicherte Felder (Passwörter, API-Keys)
inputsNumberAnzahl der Eingänge (0 oder 1)
outputsNumberAnzahl der Ausgänge (0+)
iconStringIcon (Font Awesome oder eigene Datei)
labelFunctionDynamische Beschriftung

Das ProcessCube® AppTemplate nutzen

Das AppTemplate ist der empfohlene Weg, eigene Nodes zu entwickeln. Es bietet eine Docker-Compose-Umgebung mit Engine, Authority und LowCode.

git clone https://github.com/5minds/ProcessCube.AppTemplate.git cd ProcessCube.AppTemplate docker compose up

Eigene Node hinzufügen

  1. Neuen Ordner unter apps/lowcode/src/nodes/ anlegen
  2. JS- und HTML-Datei erstellen
  3. Node in apps/lowcode/src/package.json registrieren
  4. Container neu starten: docker compose restart lowcode

Das AppTemplate mountet den Source-Code per Volume — Änderungen an HTML-Dateien werden nach einem Browser-Refresh wirksam. Für JS-Änderungen muss der Container neu gestartet werden.

Nodes lokal testen

Volume-Mount in Docker

Ohne AppTemplate können Sie Ihre Node per Volume direkt in einen LowCode-Container mounten:

services: lowcode: image: marketplace.processcube.io/processcube-io/processcube_lowcode:latest ports: - "1880:1880" volumes: - ./my-custom-node:/data/node_modules/my-custom-node

Für lokale Entwicklung ohne Docker:

cd my-custom-node && npm link cd ~/.node-red && npm link my-custom-node node-red

Auf npm veröffentlichen

npm login npm publish

Checkliste: Paketname mit node-red-contrib- Präfix, keywords enthält "node-red", Hilfetext vollständig, keine Secrets im Paket.

Weiterführende Informationen