MQTT

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 \#

mosquitto

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.

zurück zum Inhalt

 

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

mqttfxstart

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

mqttconection0

und auf das Zahnrad rechts daneben klicken. Dann öffnet sich ein Fenster, wo die Daten des MQTT-Servers eingetragen werden können.

mqttfxconnection

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.

mqttconnect

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“

subscribe

Mit einem Klick auf „Scan“ kann man nun die entsprechenden Topics auf dem MQTT-Server sammeln

collector

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

topicled

{„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

statuss20

OFF

und wieder andere ganze Pools an Informationen

pool

{„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.

zurück zum Inhalt