Ja ja die Homelab-Reihe geht MEEEEGA langsam voran, ABER sie geht voran
So... was wollen wir machen? Ganz einfach, wir wollen einen MQTT-Server installieren, damit Ihr alles habt, was Ihr benötigt um an Homeassistant z.B. Tasmota geflashte Geräte anbinden könnt oder wie in meinem anderen Tutorials beschrieben, DoorPi anbinden etc.
MQTT: Kurz zur Geschichte
Es wurde wohl damals (1999) entwickelt um Informationen von Sensoren über weite Distanzen zu übertragen, dabei jedoch die Bandbreite möglicht gering zu halten. Man spricht auch von M2M (Machine-to-Machine). Soweit mir bekannt werden die Daten auch nur dann gesandt, wenn sich ein State ändert.
So... jetzt starten wir aber voll durch
MQTT: Was benötigt Ihr?
Im Grunde nicht viel! Es läuft auf sämtlichen Linux-Distributionen, ich habe es z.B. unter Debian laufen. Auch die Hardwareanforderungen sind verschwindend gering.
Früher hatte ich es auf einem Raspberry Pi, jetzt nutze ich einen LinuxContainer mit 128 MB RAM (wovon nur 32 MB aktuell in Benutzung sind) und 2 GB Festplatte.
MQTT: Installation
Für diejenigen unter euch, die ein Raspberry Pi einsetzen möchten, denke ich, dass Ihr wisst, wie Ihr das Betriebssystem auf die Karte flashen könnt, SSH vorher schon frei schaltet sowie (sofern notwendig) es in euer WLAN einbindet etc. ansonsten könnt Ihr dies hier nachlesen: Raspberry Pi - Vorbereitung
Wie schon erwähnt, könnt Ihr aber auch ein beliebiges Linux verwenden. In meinem Fall Debian:
Updaten!
apt update && apt upgrade -y
Ihr müsst absolut nichts vorbereiten, sondern einfach direkt mit folgendem Command installieren:
apt-get install mosquitto mosquitto-clients
MQTT: Konfiguration
Eigentlich müsst Ihr hier auch nichts weiter tun, da der Server jetzt schon funktioniert ABER, sofern Ihr das Problem habt wie ich:
Ich habe mein System gewechselt von einem Pi auf einen Linux-Container. Ich installierte MQTT wie gewohnt ABER ehemals benötigte man nicht zwingend einen Benutzer und Passwort. Bei aktuellen Installationen wird dies jedoch vorausgesetzt! Wenn Ihr wie ich jetzt mal eben >20 Aktoren oder mehr im Einsatz habt, dann will man glaub nicht zwingend alle neu konfigurieren. Daher, und vor allem weil meine Hausautomation komlett abgeschottet ist, habe ich mich dazu entschieden die Authentifizierung ohne Benutzer und PW zu realisieren. Dazu müsst Ihr eine Datei z.B. bind0.0.0.0.conf anlegen in:
/etc/mosquitto/conf.d
mit folgendem Inhalt:
listener 1883 0.0.0.0 allow_anonymous true
Die erste Zeile bedeutet, dass der MQTT Server auf den Port 1883 (der Port ist default!) lauscht und zwar aus JEDEM Netz, in meinem Fall ist die Klingel z.B. nicht im gleichen Netz und nur durch die Firewall geregelt!
Jetzt muss nur noch der MQTT Dienst neu gestartet werden mit:
service mosquitto restart
Ab diesem Zeitpunkt können die Geräte ohne Benutzer und Passwort angebunden werden.
MQTT: Konfiguration testen
Ok... wir haben nun den Server installiert und konfiguriert, aber wie können wir nun ohne einbinden von Geräten testen, ob er funktioniert? Das ist ebenfalls kinderleicht. Ihr verbindet euch zwei Mal via SSH auf eure Maschine. In einer Session tragt ihr folgendes ein:
mosquitto_sub -h 127.0.0.1 -t Test/#
(-h 127.0.0.1 würdet Ihr nicht benötigen, aber falls Ihr von einer anderen Maschine aus testen wollt, dann einfach die IP eintragen von dem entfernten MQTT-Server)
Mit dem Subscripe (mosquitto_sub) wartet der MQTT-Server darauf, dass er in dem Topic "Test" etwas rein kommt. Wenn Ihr von allen Geräten Informationen wollt, dann reicht auch nur # (siehe Screenshot weiter unten)
In der zweiten Session published Ihr sozusagen eine Information. Ihr simuliert also, dass ein Gerät mit dem Topic "Test" Informationen an den MQTT schickt:
mosquitto_pub -h 127.0.0.1 -t Test/Temperature -m "19.5"
Wir wechseln wieder in die erste SSH-Session und sehen, dass die Information angekommen ist:
MQTT: Gerät einbinden
Sind wir uns nun sicher, dass der Server funktioniert, können wir auch schon ein Gerät einbinden. Hierzu bediene ich mich z.B. einem Sonoff Touch mit Tasmota Firmware. Es würde natürlich mit jedem anderen Gerät mit Tasmota ODER grundsätzlich mit Geräten die MQTT unterstützen funktionieren!
Auf der Tasmotaoberfläche einfach auf "Einstellungen --> MQTT konfigurieren"
Die Einstellungen an sich sind schon fast selbsterklärend. Oben tragen wir unseren Server ein, entweder via IP, wie im Screenshot oder eben per Name, sofern bei euch ein DNS-Server im Einsatz ist. Der Port bleibt gleich und wenn Ihr wie oben ohne Authentifizierung arbeitet, dann bleiben die Felder Benutzer und Passwort unberührt und benötigt noch einen sinnvollen Topic (in unserem Test: TouchTest).
Die Gegenprobe könnte Ihr auf der Hauptseite in Tasmote unter Konsole machen und seht, wie im nachfolgenden Screenshot, dass er in Richtung MQTT funkt.
Ebenfalls (markiert) gut zu erkennen, welchen Command er erwartet für die Schaltung ON/OFF.
Sooo... jetzt öffnen wir wieder zwei SSH-Sessions.
Eine, in der wir wieder subscriben und warten, dass etwas rein kommt:
mosquitto_sub -v -t '#'
Diesmal im Format, dass der MQTT auf alles lauscht, was rein kommt, also egal welcher Topic!
Und in der zweiten Session wollen wir simulieren, wie wenn wir, z.B. von Homeassistant einen Command für ON oder OFF abschicken um eben den Sonoff Touch zu schalten:
mosquitto_pub -t cmnd/TouchTest/POWER -m OFF <-- für z.B. Licht aus
mosquitto_pub -t cmnd/TouchTest/POWER -m ON <-- für z.B. Licht an
Wurden beide Commands abgesetzt, sieht das z.B. so in der ersten SSH-Session aus:
Alternativ kann man dies auch entweder auf der Tasmota-Hauptseite sehen, dass der Aktor wechselt zw. ON/OFF (oder das Klicken der Relais) oder man schaut in die Konsole der Tasmota Firmware (siehe Markierung)
Ab jetzt könnt Ihr euch zu 100% sicher sein, dass alles einwandfrei funktioniert und bindet nun all eure Aktoren/Sensoren etc. ein.
Der nächste Schritt wäre nun den MQTT-Server in eure Hausautomation einzubinden z.B. in Homeassistant. Diese wird in einem weiteren Beitrag beschrieben.
MQTT: Allgemeine Info
In der Regel werdet Ihr MQTT ja dazu verwenden, dass Ihr diesen als Zwischenhändler zw. Aktoren/Sensoren und eurer Hausautomation bindet von welcher Ihr dann Events triggert.
Natürlich müsst Ihr NICHT zwingend physikalische Geräte haben, welche Ihr zum Auslösen nutzt. Wie oben schon beschrieben, könnt Ihr ja selbst entscheiden, wann Ihr und wie Ihr Informationen an den MQTT schickt, so wie im Test die 19.5 Grad.
Ich nutze diese Möglichkeit z.B. für meine Türklingel. Dort vergebe ich manuell zwei States und zwar "True" und "False". Wenn der Klingelknopf gedrückt wird (im gedrückten Zustand), dann wird ein "True" gesendet und beim Loslassen ein "False". Dieses Event schicke ich an den MQTT und dieser wiederum an mein Homeassistant. Durch diese Möglichkeit, konnte ich entsprechend auf dieses Event mit Automatismen reagieren. DoorPi kann leider nicht von Haus aus MQTT, daher muss ich mir über diesen Weg helfen. Eine Anleitung habe ich hierzu schon hier (DoorPi + MQTT) geschrieben.
Viel Erfolg beim Nachbauen.