Node-RED: Erste Schritte

Wie man mit Node-RED beginnt

👋 Willkommen bei der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Node-RED Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • MQTT-Server inklusive (Mosquitto).
  • Voller Zugriff auf die Node-RED Admin-UI.
  • Dashboard von Node-RED inklusive.
  • Unbegrenzter und dedizierter SMTP-E-Mail-Server inklusive.
  • Mühelose Updates mit nur einem Klick.
  • Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://node-red.ihre-firma.com).
  • Optimale Performance und robuste Sicherheit durch eine private und dedizierte VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Node-RED Cloud Hosting Lösung von Stackhero auszuprobieren!

Jede Node-RED-Instanz auf Stackhero verfügt über einen eigenen dedizierten E-Mail-Server. Dieser Server ermöglicht es Ihnen, unbegrenzt E-Mail-Benachrichtigungen mit nur wenigen Klicks zu senden.

Um mit dem Senden von E-Mails von Ihrer Node-RED-Instanz zu beginnen, fügen Sie Ihrem Flow einen "email"-Knoten hinzu. Sie werden zwei E-Mail-Knoten in der Knotenliste bemerken. Wählen Sie den mit dem Mail-Symbol auf der rechten Seite. Sobald er hinzugefügt ist, wird der Knoten automatisch "Stackhero integrated email server" genannt und ist vorkonfiguriert.

Doppelklicken Sie auf den E-Mail-Knoten und geben Sie Ihre E-Mail-Adresse im Feld "To:" ein. Es ist am besten, die restlichen Einstellungen unverändert zu lassen.

Fügen Sie als Nächstes einen "inject"-Knoten zu Ihrem Flow hinzu und verbinden Sie ihn mit dem E-Mail-Knoten. Doppelklicken Sie auf den Inject-Knoten (standardmäßig "timestamp" genannt), wählen Sie "string" als Payload-Typ und geben Sie "This is an email from Node-RED" als Payload ein.

Überprüfen Sie Ihre Knotenkonfigurationen, deployen Sie Ihren Flow und klicken Sie auf das Aktionssymbol auf dem Inject-Knoten. Überprüfen Sie dann Ihren E-Mail-Posteingang, um die von Node-RED gesendete E-Mail zu sehen!

Tipp: Sie können E-Mails an mehrere Empfänger senden, indem Sie jede E-Mail im Feld "To:" mit einem Semikolon trennen.

In Node-RED-Funktionen führt der Versuch, ein natives Node.js-Modul direkt zu verwenden, zu dem Fehler ReferenceError: require is not defined. Dies liegt daran, dass Node-RED es nicht erlaubt, ein Node.js-Modul direkt innerhalb einer Funktion zu verwenden.

Um dies zu lösen, wurden diese Module in den globalen Kontext von Node-RED integriert. Sie können auf sie mit context.global zugreifen.

Zum Beispiel, wenn Sie das crypto-Modul benötigen, deklarieren Sie es so:

const { crypto } = context.global;

Die folgenden Node.js-Module sind verfügbar: util, buffer, child_process, crypto, fs, os, http, http2, https und zlib.

Wir haben einen Knoten entwickelt, um eine Verbindung zu einem MySQL-Server herzustellen, der vollständig mit dem neuen Authentifizierungssystem von MySQL 8, "Caching SHA2 Password", sowie mit MariaDB kompatibel ist.

MySQL/MariaDB-KnotenMySQL/MariaDB-Knoten

Für weitere Details besuchen Sie das offizielle Repository. Um diesen Knoten auf Ihrer Node-RED-Instanz zu installieren, suchen Sie einfach nach stackhero im Bereich Palette verwalten Ihres Node-RED-Dashboards.

Wir bieten einen Knoten an, der für die Verbindung zu einer InfluxDB v2-Datenbank entwickelt wurde. Dieser Knoten ermöglicht es Ihnen, Daten zu schreiben und Abfragen mit der Flux-Sprache durchzuführen.

InfluxDb-v2-KnotenInfluxDb-v2-Knoten

Zusätzliche Informationen sind im offiziellen Repository verfügbar. Um ihn zu Ihrer Node-RED-Instanz hinzuzufügen, suchen Sie im Bereich Palette verwalten nach stackhero.

Manchmal können Knoten Fehler erzeugen. Eine praktische Lösung ist es, einen "catch all debug"-Flow einzurichten, um diese Fehler zu überwachen.

Beispiel eines Node-RED-Fehlerfang-FlowsBeispiel eines Node-RED-Fehlerfang-Flows

Um dies einzurichten, fügen Sie einen catch-Knoten hinzu und verbinden Sie ihn mit einem debug-Knoten. Konfigurieren Sie den debug-Knoten so, dass er das vollständige msg-Objekt ausgibt. Diese Konfiguration protokolliert jeden im Flow erzeugten Fehler im Node-RED-Debug-Fenster.

Beispiel eines gefangenen Node-RED-KnotenfehlersBeispiel eines gefangenen Node-RED-Knotenfehlers

Ein catch-Knoten wird nur durch Fehler von Knoten im selben Flow ausgelöst. Wenn Sie mehrere Flows (oder Tabs) verwenden, müssen Sie die catch- und debug-Knoten zu jedem Flow hinzufügen.

Stackhero für Node-RED bietet lokalen Speicher, in dem Ihre Knoten Dateien speichern können. Dieser Speicher befindet sich im Verzeichnis /persistent/storage/.

Warnung Verwenden Sie niemals ein anderes Ziel für Ihren lokalen Speicher als ein Unterverzeichnis von /persistent/storage/. Wenn Sie ein anderes Verzeichnis verwenden, verlieren Sie Ihre Daten, wenn Sie ein Node-RED-Update anwenden!

In diesem Beispiel verwenden wir den node-red-node-sqlite-Knoten. Dieser Knoten benötigt ein Verzeichnis, um seine Daten zu speichern.

Sie müssen eine Datei im Verzeichnis /persistent/storage/ definieren, zum Beispiel /persistent/storage/myDatabase.sqlite.

Beispiel einer SQLite-Konfiguration auf Node-REDBeispiel einer SQLite-Konfiguration auf Node-RED

Wenn Sie Daten lokal speichern müssen, können Sie Dateien im Verzeichnis /persistent/storage/ schreiben. Einige Node-RED-Daten könnten bereits in diesem Verzeichnis vorhanden sein. Um Konflikte zu vermeiden, wird empfohlen, Unterverzeichnisse zu verwenden, zum Beispiel /persistent/storage/myFlowData, um Ihre Dateien zu speichern.

Um dieses Verzeichnis mit Node.js zu erstellen, führen Sie den folgenden Code in Ihrem Knoten aus:

fs.mkdirSync('/persistent/storage/myFlowData', { recursive: true });

Hinweis Wenn Sie planen, mehr als nur ein paar Dateien zu speichern, empfehlen wir die Verwendung eines Objektspeicherservers. Objektspeicherserver erleichtern die Verwaltung, das Teilen und den Zugriff auf Dateien über eine API, wie mit dem S3-Protokoll. Ziehen Sie den MinIO-Dienst in Betracht, der auf Stackhero verfügbar ist und Ihnen in nur 2 Minuten einen S3-kompatiblen Objektspeicherserver bietet.

Wenn Sie ein iFrame verwenden, um Inhalte über einen HTTP-Knoten anzufordern, könnte der Standard-Header X-Frame-Options: SAMEORIGIN verhindern, dass die Seite angezeigt wird. Ab Node-RED-Version 1.2.2-0 können Sie diesen Standard-Header überschreiben.

Um dies zu tun, setzen Sie den Header X-Frame-Options auf null in Ihrem HTTP-Antwortknoten. Zum Beispiel:

msg.headers = { "X-Frame-Options": null };

Beispiel eines Knotens, der den Header X-Frame-Options setztBeispiel eines Knotens, der den Header X-Frame-Options setzt

Sie können dieses Flow-Beispiel herunterladen und in Ihre Node-RED-Instanz importieren, um die Funktion zu testen.

Beachten Sie, dass Sie auch erlaubte Domains mit den Headern Content-Security-Policy: frame-ancestors <source> oder X-Frame-Options: ALLOW-FROM <source> einschränken können.

Wenn Sie einen 502-Fehler beim Zugriff auf Ihr Admin-Dashboard erhalten, beginnen Sie damit, Ihre Instanzprotokolle zu überprüfen. Sie finden diese Protokolle im Stackhero-Dashboard unter dem Tab "Logs", nachdem Sie Ihren Node-RED-Dienst ausgewählt haben.

Die Protokolle können Node-RED-Fehler enthalten, die verhindern, dass es korrekt startet. Sammeln Sie so viele Informationen wie möglich, um Ihre Flows zu debuggen.

Nachdem Sie Ihre Protokolle überprüft haben, gehen Sie zu Ihrer Dienstkonfiguration im Stackhero-Dashboard und aktivieren Sie die Option "Sicherheitsmodus". Im Sicherheitsmodus wird Node-RED neu gestartet, ohne Ihre Flows automatisch zu starten.

Dies ermöglicht Ihnen den Zugriff auf das Admin-Dashboard, um Ihre Flow-Fehler zu beheben und Ihre Änderungen zu deployen. Sobald alles reibungslos funktioniert, denken Sie daran, den Sicherheitsmodus in Ihrer Dienstkonfiguration zu deaktivieren, damit Ihre Flows beim Neustart von Node-RED automatisch starten.

Wenn Sie versuchen, einen Knoten mit dem Palettenmanager zu installieren, aber feststellen, dass die Version älter ist als die auf NPM, bedeutet dies wahrscheinlich, dass der Ersteller des Knotens die Version auf der Node-RED-Website nicht aktualisiert hat.

Früher wurden Knotenversionen automatisch aktualisiert, um die auf NPM veröffentlichte Version widerzuspiegeln. Dies ist nicht mehr der Fall.

Die gute Nachricht ist, dass Sie die Node-RED-Website dazu veranlassen können, die Version zu aktualisieren. Gehen Sie einfach zu https://flows.nodered.org/add/node, geben Sie den NPM-Modulnamen ein (zum Beispiel node-red-contrib-xxx) und klicken Sie auf die Schaltfläche "Add". Sobald dies abgeschlossen ist, kehren Sie zu Ihrem Node-RED-Dashboard zurück und öffnen Sie den Palettenmanager. Die aktualisierte Version sollte nun sichtbar und bereit zur Installation sein.

Wenn Sie diesen Fehler beim Senden einer E-Mail sehen, liegt es wahrscheinlich daran, dass Sie die Option "Use secure connection" in Ihrer E-Mail-Knotenkonfiguration ausgewählt haben.

Da der Stackhero-E-Mail-Server und der Node-RED-Server auf derselben Instanz laufen, kommunizieren sie lokal, sodass Sie keine TLS (SSL)-Verschlüsselung verwenden müssen. Das Aktivieren der sicheren Verbindungsoption führt dazu, dass Node-RED TLS verwendet, um mit dem E-Mail-Server zu kommunizieren, was zu dem SSL-Fehler über eine "wrong version number" führt.

Bitte beachten Sie, dass, wenn der Empfänger-Server Verschlüsselung unterstützt, die E-Mail automatisch mit TLS verschlüsselt wird. Dies wurde für Sie vorkonfiguriert.