c't 19/2019
S. 180
FAQ
Node-Red
Aufmacherbild

Node-Red

Die IoT-Automationssoftware Node-Red kann praktisch alles miteinander verbinden. Egal, ob das MQTT-fähige Hardware ist oder ein proprietärer Webdienst, den man nur per API erreicht. Gerade deshalb ist sie Kern des c’t-Smart-Home-Projekts. Der Umgang mit der Flussdiagramm-basierten Programmierung von Node-Red wirft aber manchmal Fragen auf.

Man spricht deutsh

#£Seit Kurzem spricht Node-Red auch Deutsch. Leider sind die Übersetzungen eine Katastrophe. Wie kann ich wieder auf Englisch wechseln?

¢Mit Bordmitteln leider nicht. Node-Red erkennt die vom Browser bevorzugte Sprache und stellt diese ein. Die schlechte Qualität der Übersetzung ist den Entwicklern aber bekannt und zahlreiche Verbesserungen sind bereits eingeflossen. Wenn Sie nicht warten möchten, bis die Entwickler alle Übersetzungen korrigiert haben, können Sie die Lokalisierung mit Gewalt entfernen. Wechseln Sie dazu in den node_modules Pfad Ihrer Node-Red-Installation und löschen Sie dort das Verzeichnis @node-red/editor-client/locales/de.

Google Assistant integrieren

#£Ich möchte gern meine Node-Red-Installation per Google Assistant steuern. Wie kann ich die beiden verbinden?

¢Das geht auf mehreren Wegen und alle sind steinig. Anders als Amazons Alexa hat Googles Assistant bislang keine brauchbare Unterstützung für lokale Geräte integriert. Alle in Google Home und dem Assistant verfügbaren Dienste laufen über die Hersteller-Clouds. Diese reichen die Kommandos des Assistant dann an die Geräte weiter. Das Problem ist, dass die Hersteller sich vorher bei Google registrieren müssen, daher kann man nicht einfach einen MQTT-Server eintragen.

Ein möglicher Umweg geht über IFTTT, einem Webdienst, über den man Kommandos vom Google Assistant abfangen und an einen Webhook, also eine von Node-Red bereitgestellte URL, weiterleiten kann. Das funktioniert aber auch nur leidlich gut, denn man kann keine Geräte hinterlegen, sondern nur Phrasen mit einem variablen Parameter. Die Phrasen dürfen den von Google belegten auch nicht zu ähnlich sein, sonst funktionieren sie nicht. Wer also „Wohnzimmerlicht an“ hinterlegt, bekommt nur den Hinweis, dass Google kein Wohnzimmerlicht kennt und der Webhook wird nicht ausgelöst. Es hilft ein Codewort wie „Kommando“ oder „Smart Home“ voranzustellen. Das fühlt sich dann aber alles andere als „smart“ an.

Möglicherweise bessert sich die Situation mit der auf der Entwicklerkonferenz I/O vorgestellten Steuerung von lokalen Geräten. Die ist aber noch in der Beta-Phase und uns ist noch keine Node-Red-Erweiterung bekannt, die die Steuerung unterstützt.

Der steinigste, aber wohl auch flexibelste Weg, ist die Integration einer eigenen Google-Actions-App. Diese Lösung erfordert etwas Gefummel in Googles Entwicklerkonsole. Als Node-Red-Erweiterung bieten sich dafür sowohl node-red-contrib-google-smarthome als auch node-red-contrib-google-action.

Zugriff beschränken

#£Gibt es einen Weg, den Zugriff auf das Node-Red-Backend oder das Dashboard einzuschränken?

¢Beides geht, aber ist unelegant gelöst. Man muss Benutzer und Passwort-Hashes für die nötigen Accounts in der Datei settings.js hinterlegen. Um das Passwort zu hashen, benötigen Sie das Programm node-red-admin, das Sie per npm installieren können. Beim Aufruf von node-red-admin hash-pw werden Sie nach dem Passwort gefragt und bekommen nach dessen Eingabe den Hash angezeigt. Kopieren Sie diesen, um ihn gleich in der settings.js zu ergänzen. Der für die Anmeldung nötige Block sieht wie folgt aus und muss vor der letzten geschweiften Klammer in die Datei eingefügt werden:

adminAuth: {

type: "credentials",

users: [{

username: "admin",

password: "PASSWORTHASH",

permissions: "*"

}]

}

Bei password fügen Sie den eben generierten Hashwert ein. Anschließend starten Sie Node-Red neu. Sie können auch weitere Benutzer mit eingeschränkten Rechten hinterlegen. Leider haben die Node-Red-Entwickler den Prozess dafür bislang noch nicht gut dokumentiert. Wer Node-Red lieber per OAuth oder mit einem eigenen Anmeldedienst verbinden will, kann auch das tun. Details dazu finden Sie über ct.de/ydbj.

Für den passwortgeschützten Zugriff auf das Dashboard ist ein weiterer Schritt nötig. Das Dashboard, wie auch viele andere Erweiterungen die HTTP-Endpunkte bereitstellen, sichert die Option httpNodeAuth ab. Diese erwartet nur Benutzername und Passwort-Hash als Parameter:

httpNodeAuth:{

user:"user",

pass:"PASSWORTHASH"

},

Hier kann man leider keine OAuth-Verfahren einsetzen, sondern bleibt auf Benutzernamen und Hashes beschränkt.

Node-Red kann auch ein Login verlangen, aber dafür muss man ein bisschen Hand anlegen.

Node-Red von außen erreichen

#£Wie kann ich Node-Red von außen erreichbar machen?

¢Am besten eignet sich dafür ein Reverse-Proxy wie Traefik. Der übernimmt nicht nur das Durchleiten der HTTP-Anfragen, sondern kann auch das TLS-Management inklusive der Zertifikatsbeschaffung regeln. Das selbstverständlich auch für andere Dienste als Node-Red.

Eine Einführung in die bald erscheinende Version 2.0 von Traefik war in c’t 17/2019 [1] zu lesen. Zudem müssen Sie den Zugriff per Passwort absichern, damit nicht jeder, der sich auf Ihrer IP-Adresse umschaut, die Lichter kontrollieren kann. Mehr dazu in der vorhergehenden Frage.

Apps fürs Smartphone

#£Kann ich Node-Red auch auf meinem Smartphone oder Tablet verwenden, ohne jedes Mal den Browser aufzumachen? Gibt es vielleicht eine App?

¢Sie können den Browser etwas verstecken, indem Sie das Dashboard als Progressive Web App (PWA) installieren. Dann erscheint es je nach Smartphone-Betriebssystem in der Liste der Apps oder auf dem Startbildschirm. Native Apps gibt es nur indirekt. Einige Apps wie Home Remote für Android und iOS können per MQTT mit Node-Red kommunizieren. Für andere, wie zum Beispiel RemoteXY, muss man Erweiterungen installieren, die passende Schnittstellen nachrüsten.

Besseres Heizungs-Dashboard

#£Ich will meine Heizung steuern. Die entsprechenden Schnittstellen habe ich bereits in Node-Red integriert, aber es fehlt mir eine flexible Dashboard-Oberfläche. Gibt es da was?

¢Ja. Mit der Erweiterung node-red-contrib-heater-controller können Sie den aktuellen Status der Raumtemperatur einsehen und diesen auch regulieren, denn sie bringt ein eigenes Dashboard-Element mit. Darüber hinaus können Sie flexible Heizpläne hinterlegen, die von dem Node ausgeführt werden. Sie müssen die Kommandos nur so umwandeln, dass die Schnittstelle Ihrer Heizung sie versteht.

Heizungssteuerung ist ein Klassiker der Hausautomation. Mit einer Erweiterung sieht das Dashboard dafür nicht nur besser aus, sondern ist auch flexibler.

Node-Red-Konfiguration in Git

#£Gibt es einen Weg, um meine Node-Red-Konfiguration bei Änderungen automatisch zu sichern?

¢Einen integrierten leider nicht. Sie können die Dateien flows.json und flows_cred.json aber jederzeit automatisch sichern. Alternativ gibt es noch die Projektfunktion, die die Node-Red-Konfiguration in einem Git-Repository speichert. Das hat den Vorteil, dass man bei misslungenen Änderungen immer den vorherigen Zustand wiederherstellen kann. Die Projektfunktion muss erst in der settings.js aktiviert werden. Dafür fügen Sie folgenden Code ein:

editorTheme: {

projects: {

enabled: true

}

},

Starten Sie Node-Red nun neu. Über das Hamburger-Menü öffnen Sie anschließend die Einstellungen. Dann klicken Sie auf „Git-Konfiguration“. Tragen Sie einen Benutzernamen und Ihre E-Mail-Adresse ein. Als nächstes klicken Sie auf den kleinen Knopf „Schlüssel hinzufügen“, um einen SSH-Schlüssel zu erzeugen, den Node-Red zur Anmeldung beim Git-Server verwendet. Vergeben Sie einen Namen und optional ein Passwort. Nach einem weiteren Klick auf „Schlüssel generieren“ können Sie den öffentlichen SSH-Schlüssel kopieren und bei Ihrem Git-Server eintragen.

Damit Node-Red weiß, wohin die Daten sollen, müssen Sie noch das Git-Repository angeben. Die Einstellung dafür finden Sie im Hamburger-Menü unter „Projekt/Projekteinstellungen/Einstellungen“. Dort können Sie über den Knopf „ferne hinzufügen“ („add remote“) ein Git-Repository eintragen. Sie sollten, wenn Sie ein GitHub-Repository nutzen, dafür das SSH-Protokoll verwenden und nicht HTTPS.

Wer seine Flows extern sichern will, kann Node-Reds integrierte Git-Funktion namens „Projekte“ verwenden.

Token für Staubsaugerroboter gesucht

#£Wie kann ich meinen Roborock/Xiaomi-Staubsaugerroboter in Node-Red integrieren? Ich werde immer nach einem Token gefragt, weiß aber nicht, wo ich das herbekomme.

¢Das Token ist für den Zugriff auf die Schnittstellen der Saugerroboter nötig – sowohl per Cloud als auch lokal – und ist für jedes Gerät einzigartig. Bei älteren Modellen kommen Sie über die Android-App FloleVac oder mit dem Kommandozeilenprogramm Miio an das Token. Bei neueren Modellen wie dem T6, S6 oder 1S (2. Generation) klappt das nicht. Sie müssen in den sauren Apfel beißen und eine gehackte Version der Xiaomi-Android-App installieren. Diese zeigt das Token in den Einstellungen an. Links zu Anleitungen finden Sie über ct.de/ydbj.

Node-Red ohne Docker

#£Ich bin kein Freund von Docker. Kann ich Node-Red auch ohne betreiben?

¢Selbstverständlich. Die Node-Red-Entwickler stellen Skripte und Anleitungen für allerhand Plattformen auf ihrer Website bereit. Von der Raspi-Installation bis hin zum Cloud-Deployment wird dabei alles angeboten – und natürlich auch die lokale Installation ohne Container. (mls@ct.de)