Ich habe bereits einige Geräte angesammelt, die man in einem Smarthome auch steuern könnte. Dazu gehören die Wlan-Steckdosen von TP-Link⭐, einen ESP8266⭐ mit Tasmota-Firmware, ein IKEA Floalt LED-Panel und auch meinen Desktop-PC. Die generelle Erweiterbarkeit (m)eines Smarthomes kann ich mir dabei auch leicht vorstellen. (=Ich werde weitere Geräte und Einsatzwecke finden, die ich steuern möchte.)
Ich habe einige andere Smarthome-Hubs angesehen und mich für Node-Red + MQTT (Mosquitto) entschieden. Mir war wichtig, dass möglichst viel des Smarthomes lokal ohne Clouddienste läuft. Das schließt Lösungen mit Alexa und Google Home direkt weitestgehend aus. Ich will, dass auch bei einem Ausfall des Dienstleisters oder des Internets so viel des Smarthomes noch funktioniert, wie nur möglich. Was kann ein Amazon Echo noch ohne Internetzugang?
Weiterhin bastel ich gerne, so dass eine Lösung, die mehr Richtung DIY und Basteln/Programmieren geht, gut zu mir passt.
Schau dir gerne das Video an!
Ich möchte Node-Red und einen MQTT-Broker auf einem Raspberry-PI betreiben. Dafür verwende ich folgende Hardware:
Auf der Homepage vom RaspberryPI habe ich Raspbian heruntergeladen. Es gibt da aktuell mehrere Versionen, ich habe Raspbian Buster with desktop
gewählt, später aber festgestellt, dass ich den Desktop niemals brauche, es sollte also auch problemlos mit Raspbian Buster Lite
funktionieren.
Um das jetzt auf die microSD Karte drauf zu bekommen, benutze ich Etcher. Ich habe balenaEtcher-Setup-1.5.60.exe
gewählt, aber der Link zeigt immer zur neuesten Version. Es gibt auch Varianten für Mac.
Nach der Installation startet man Etcher und wird mit dem sehr übersichtlichen UI begrüßt:
Hier muss man entsprechend des UIs 3 Schritte durchführen:
Select target
auswählen. Bitte wähle hier nicht deine Festplatte aus. Etcher hilft hier aber auch etwas.Etcher wirft die microSD Karte aus, wenn es fertig ist, eigentlich will ich aber noch mehr machen. Daher muss man jetzt die Karte einmal aus dem Leser ziehen und wieder rein stecken. Jetzt sollte im Arbeitsplatz ein Laufwerk auftauchen, was boot
heißt. Dort geht man rein und legt eine ganz leere Datei mit dem Namen SSH
(alles groß!) an. Das geht z.B. in dem man eine neue txt-Datei anlegt und die Dateiendung entfernt. Das signalisiert Raspbian, dass der remote SSH Zugang von Anfang an aktiviert werden soll. Das ist mir wichtig, denn ich will weder später noch zur Ersteinrichtung Monitor und Maus und Keyboard usw. anschließen müssen.
Wenn man den PI über ein Netzwerkkabel betreiben will (oder muss), ist man jetzt fertig. Ich will ihn über WLAN nutzen, daher muss man auf der microSD Karte auch noch die eigenen WLAN Anmeldedaten hinterlegen. Dazu macht man eine neue Datei mit dem Namen wpa_supplicant.conf
. Diese öffnet man dann mit einem Texteditor - ich verwende Visual Studio Code - und fügt folgenden Text ein:
country=US # Your 2-digit country code
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid="Hier muss der Name deines WLANs rein"
psk="und hier das Passwort"
key_mgmt=WPA-PSK
}
…dass du an den richtigen Stellen deine Datein eintragen musst, hast du dir bestimmt gedacht?
Jetzt ist die microSD Karte fertig und kann in den PI gesteckt werden. Dann kann der PI an den Strom angeschlossen werden.
Wenn der PI hochgefahren ist und alles geklappt hat, sollte er im WLAN erreichbar sein. Du benötigst nun seine IP-Adresse. Du solltest dich auf deinem Router (z.B. Fritzbox) einloggen können und dort die IP des Gerätes bekommen. Falls du dort einstellen kannst, dass dieses Gerät immer die gleiche IP bekommen soll, empfehle ich dir auch diese Einstellung. Falls du die IP nicht raus bekommst, kannst du es stattdessen auch mit dem Gerätenamen raspberrypi
statt einer IP versuchen.
Zum Verbinden über SSH verwende ich Putty. Nach dem Download musst du es nur starten und IP/Namen des PIs angeben und auf Open
klicken. Beim ersten Mal muss man eine Sicherheitsfrage bestätigen, dann kommt der Login des PI.
Benutzername = pi
Standardpassword = raspberry
Mit dem Standardlogin kann man sich dann einloggen.
Ist man eingeloggt auf dem PI, macht man immer erst mal ein generelles Update des Systems mit den folgenden zwei Befehlen:
sudo apt-get update
sudo apt-get upgrade -y
Danach macht man sudo raspi-config
und kann erstmal grundlegende Einstellungen für den PI vornehmen. Wenn man will, kann man hier VNC aktivieren, um sich auch remote mit einer grafischen Oberfläche verbinden zu können. Ich hab das nicht getan.
Dann habe ich eingestellt, dass bei Bootvorgang nur ins Terminal bzw. in die Konsole gebootet werden soll. Warum soll der PI die graphische Oberfläche laden, wenn die doch nie jemand sehen wird? Falls du das machst und sie dann doch mal brauchst, tippe einfach startx
auf der Konsole.
Als Locale habe ich dann noch de_DE.UTF8
ausgewählt, das sorgt dafür, dass einige Texte und Fehlermeldungen auf Deutsch sind.
Außerdem kann man hier auch den Hostname des PIs ändern. Ich habe ihn auf smarthome
gesetzt, so dass ich den anstatt der IP-Adresse ab sofort verwenden kann.
Das wars mit raspi-config und wenn man es verlässt, fragt er, ob man neustarten möchte, das habe ich getan.
Ich bleibe noch einen Moment in Putty. Auf der Homepage von Node-Red gibt es ein handliches Kommando, was man nur in die Kommandozeile kopieren muss und das Skript sorgt dann dafür, dass alles richtig für Node-Red eingerichtet wird.
Hier ist eine Kopie der Zeile:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Wenn Node-Red installiert ist, will ich noch, dass es mit dem System zusammen automatisch startet, dafür füre ich folgende Zeilen aus. Die erste aktiviert den Start bei Systemstart, die zweite startet Node-Red jetzt sofort.
sudo systemctl enable nodered.service
sudo systemctl start nodered.service
Jetzt brauchen wir nur noch Mosquitto, das wird mit folgendem Kommando installiert:
sudo apt-get install mosquitto mosquitto-clients -y
Mosquitto startet ohne weitere Eingriffe mit dem System und auch sofort. Das Setup ist damit fertig, jetzt kann man Testen!
Dieser Unterpunkt ist kein Lerntutorial für Mosquitto. Auf der Kommandozeile kann man ein Topic abonnieren mit
mosquitto_sub -d -t /home/data
Wenn man das gemacht hat, bleibt das Programm an, bis man es mit STRG+c unterbricht. Es wird jede Nachricht des Topics (hier /home/data
) ausgeben. Man kann sich übrigens auch auf alle Topics abonnieren, in dem man mosquitto_sub -d -t "#"
macht.
Jetzt öffne ich eine zweite Putty-Instanz, verbinde mich wieder mit dem PI und mache dann das folgende Kommando, um auf das gleiche Topic eine Nachricht zu senden mit dem Inhalt Hello World
:
mosquitto_pub -d -t /home/data -m "Hello World"
Man kann auch noch eine Session öffnen und ein weiteres mosquitto_sub
ausführen. Dann wird deutlich, dass Mosquitto Nachrichten auch vervielfachen kann.
Das Hauptinterface von Node-Red läuft im Browser, dementsprechend kannst du an deinem PC oder Mac jetzt den Browser nehmen und die URL http://smarthome:1880
öffnen. Falls du einen anderen Hostnamen vergeben hast, musst du den natürlich ersetzen. Der Standardport von Node-Red ist jedenfalls 1880.
Zum ersten Testen habe ich hier eine Inject-Node in den Flow gezogen mit Drag’n’Drop und eine Debug-Node. Wenn man jetzt eine Linie zwischen dein beiden zieht, kann man Deploy (oben rechts) klicken. Dann kann man auf das kleine Viereck bei der Timestamp-Node klicken und sieht auf der rechten Debugausgabe dann einen neuen Eintrag. Das sieht insgesamt ungefähr so aus:
Im Video zeige ich auch noch, wie man mit Node-Red MQTT-Nachrichten senden und empfangen kann und so schließt sich dann der Kreis mit Mosquitto.
Kommentare sind abgeschaltet.