Das ich MQTT eine eigene Seite würdige zeigt, wie wichtig dieses Protokoll im Bereich Smarthome ist. Dieses Kapitel hätte auch in die Grundlagen gepasst, allerdings gibt es für mich, abgesehen von Fhem bzw. dem Bereich Hausautomatisierung, keinen echten Grund dafür MQTT näher zu betrachten.
Für Laien erklärt funktioniert MQTT so:
Ein Server hostet einen entsprechenden MQTT Broker – dieser Broker ist über die IP Adresse und den entsprechenden Port des Host zu erreichen. Clients (z.B. ein Temperatursensor) können nun unter einem sog. Topic etwas posten/publishen (z.B. die aktuelle Temperatur). Ein anderer Client (z.B. Fhem) können diesen Wert, der unter dem Topic gepostet wurde lesen und verarbeiten.
Eine mit Tasmota geflashte Sonoff S20 z.B. postet unter dem Topic mit ihrem Netzwerknamen (z.B. S20_1) und einem Prefix (z.B. Power) ihren aktuellen Status (On / Off). Fhem kann diese Daten auslesen und entsprechend darstellen, dass die Steckdose nun ein- oder ausgeschaltet ist. Desweiteren kann Fhem unter dem entsprechenden Topic auch einen Befehl posten, den die Steckdose interpretiert und den gewünschten Zustand einnimmt – die Steckdose gibt dann auch die entsprechende Rückmeldung an Fhem.
MQTT hat nicht nur für Sonoff-Komponenten eine tragende Rolle, mittlerweile kommunizieren auch viele Zigbee-Komponenten (z.B. von Xiaomi, Osram, Ikea) über MQTT. Ebenfalls ist es möglich Readings eines Fhem-Devices auf den MQTT-Broker zu publishen und in anderen Anwendungen zu nutzen. In vielen weiteren Anleitung ist das Vorhandensein eines Brokers eine Grundvoraussetzung, daher kann ich die Installation nur empfehlen (auch wenn man derzeit möglicherweise keine derartigen Geräte besitzt).
Inhalt
MQTT-Broker installieren und in Fhem angelegen
Um MQTT unter Debian-Linux und Fhem nutzen zu können, muss natürlich erstmal der Broker installiert werden. Ein solcher Broker ist zum Beispiel Mosquitto. Unter Raspbian müssen unter Umständen manuell Paketquellen hinzugefügt werden.
sudo apt-get install mosquitto mosquitto-clients
gefolgt von den Perl-Modulen
sudo cpan install Net::MQTT:simple
&
sudo cpan install Net::MQTT:Constants
In Fhem kann der Broker nun als „Brücke“ angelegt werden
define MQTT 192.168.XXX.XXX:1883
Die 1883 ist der verwendete Port des Brokers. Sollte der Broker auf dem selben Gerät wie Fhem installiert sein, kann man als IP Adresse und Port natürlich auch 127.0.0.1:1883 eintragen.
Mit folgendem Befehl könnt ihr euch anzeigen lassen, was auf dem Broker grade so abläuft
mosquitto_sub -d -v -t \#
Ich hatte zu dem Zeitpunkt drei Sonoff S20 online. Die S20_3 habe ich mal ein- und ausgeschaltet.
Hat man nun seinen Broker eingerichtet und die Brücke in Fhem hergestellt, kann man z.B. eine Sonoff S20 mit folgendem Befehl in Fhem einbinden
define Name MQTT_DEVICE
Fhem weiß jetzt zumindest, dass ein Gerät vorhanden ist, dass über MQTT kommuniziert. Damit auch explizit das entsprechende Gerät angesprochen wird sind noch einige Angaben zu machen.
Im Fall einer S20 muss angegeben werden unter welchem Topic ein Schaltbefehl an die Steckdose gesendet werden kann, das geschieht mit
attr Name publishSet ON OFF cmnd/MQTT-Devicename/POWER
Der MQTT-Devicename entspricht den der Angabe in der Firmware des Geräts. Dieser kann beim Flashen des Geräts, oder über die Weboberfläche (z.B. Tasmota) geändert/gesetzt werden.
Damit wir den ON/OFF-Befehl direkt in der Fhem-Weboberfläche schalten können folgt noch
attr Name webCmd ON:OFF
Nun kann die S20 über die Weboberfläche ein- oder ausgeschaltet werden.
Schaltet man die Steckdose am Gerät selbst ein- oder aus, bekommt Fhem das allerdings von selbst nicht mit, daher müssen wir uns den Status der Steckdose direkt aus dem Broker holen
attr Name subscribeReading_state stat/MQTT-Devicename/POWER
Fhem bekommt den Status der Steckdose so nun direkt aus MQTT heraus – auch wenn die Steckdose am Taster geschaltet wurde.
Grafisch darstellen kann man das mit dem Attribut devStateIcon
attr Name devStateIcon ON:black_Steckdose.on OFF:black_Steckdose.off
Im Großen und Ganzen hat man die Einrichtung damit abgeschlossen, wer möchte kann mit
attr Name subscribeReading_network tele/MQTT-Devicename/LWT
anzeigen lassen, ob das MQTT-Device derzeit im Netzwerk online ist – oder eben nicht.
MQTT.fx (Windows)
MQTT.fx ist ein MQTT-Client Programm für Windows. Wer viel mit MQTT zu tun hat, oder zwischendurch mal einen Blick auf den Broker werden will, ohne sich erst über PuTTy im Terminal einzuloggen, kann auch dieses Programm nutzen.
Einrichtung
Nach dem Download und der Installation muss man dem Programm natürlich erstmal starten. Oben links in der Ecke sieht man dann folgendes
Das Programm nimmt erstmal an, dass der MQTT-Broker auf dem selben Rechner läuft. Um einen anderen Server anzusprechen klickt man einmal auf den Blitz, aus dem Dropdown kann man jetzt die Option „local mosquitto“ auswählen
und auf das Zahnrad rechts daneben klicken. Dann öffnet sich ein Fenster, wo die Daten des MQTT-Servers eingetragen werden können.
Wenn die Daten korrekt eingetragen wurden, klickt man unten rechts im Fenster auf „Apply“ und „Ok“. Nun kann man sich mit seinem MQTT-Server verbinden.
In dem ersten Reiter „Publish“, befindet man sich ab dem Programmstart. Hier könnte man jetzt etwas auf den Broker publishen und so manuell z.B. eine Tasmota-Sonoff-Steckdose abschalten.
Die meiner Meinung nach wichtigste Funktion und der Grund warum ich euch das ganze hier überhaupt vorstelle, ist aber der Reiter „Subscribe“.
Hier hat man die Möglichkeit alle Topics des MQTT-Brokers mitzuschneiden und sich so einen guten Überblick verschaffen. Insbesondere wenn man Geräte hat, bei denen durch schlechte Dokumentation nicht ganz klar ist, welche Topics man für welchen Zweck benutzen kann, ist das eine sehr nützliche Funktion.
Wenn man also auf den Reiter „Subscribe“ klickt, hat man im unteren linken Fenster einen „Topic Collector“
Mit einem Klick auf „Scan“ kann man nun die entsprechenden Topics auf dem MQTT-Server sammeln
Das ist jetzt ein Teil der Topics, die auf meinem MQTT-Server aktuell laufen. Unter dem Topic tele/S20_1/LWT läuft z.B. der Online-Status einer Tasmota-Sonoff-Steckdose.
Für mich waren seinerzeit die Steuer-Topics für meine Xiaomi Dafang Kamera mit der Dafang_Hacks Firmware interessant. Ich hab zwar die ganze Dokumentation der Firmware gelesen – aber an keiner Stelle die Topics gefunden, die eine Steuerung der Firmware/Kamera über MQTT ermöglichen, erst mit diesem Programm konnte ich herausfinden wie ich an die entsprechenden Topics herankomme.
Wie man sieht laufen dort eine menge Topics unter „homeassistant/“ – das sind nämlich genau die Topics zur Steuerung der Kamera.
Als Beispiel nehmen wir uns nun einfach mal das Topic „homeassistant/switch/dafang/blue_led/config“ – darin ist enthalten, welches Topic man publishen muss, um via MQTT die blaue LED an der Kamera ein oder auszuschalten.
Mit einem Doppelklick auf das Topic im Topics Collector, öffnet sich rechts der Inhalt

{„name“: „dafang blue led“, „icon“: „mdi:led-on“, „state_topic“: „deele/dafang/leds/blue“, „command_topic“: „deele/dafang/leds/blue/set“}
Man erhält so nun das „state_topic“, unter dem der Status der LED ausgegeben wird und das „command_topic“ mit dem die Steuerung der LED möglich ist.
Setzt man nun also einen Publish mit dem Inhalt
deele/dafang/leds/blue/set ON
kann man die LED an der Kamera über MQTT einschalten.
Über die anderen gesammelten Topics erhält man entsprechend weitere Informationen über die entsprechenden Geräte. So enthalten einige Topics nur Statusberichte

OFF
und wieder andere ganze Pools an Informationen

{„uptime“:“ 23:26:51 up 1:17, 0 users, load average: 3.19, 2.94, 2.88″, „ssid“:“FRITZ!Box 7490″, „bitrate“:“72.2 Mb/s“, „signal_level“:“74%“, „link_quality“:“78%“, „noise_level“:“0%“ }
Die gezeigten Inhalte nennen sich übrigens „Payload“ – was für „Nutzdaten“ steht. Falls euch dieses Begriff also einmal im Zusammenhang mit MQTT über den Weg läuft wisst ihr nun etwas damit anzufangen.
Fazit
Wie man sieht kann man mit MQTTfx bequem alle möglichen Daten vom MQTT-Server abgreifen und anschließend für seine Zwecke optimal nutzen. Für Windows-Nutzer, die einen MQTT-Server betreiben und verwalten müssen ein Must-have.