Wenn man sich mit openHAB oder mit Ortungsdaten beschäftigt, ließt man immer öfters von MQTT. Eine Grundinstallation von MQTT unter Windows ist auch nicht weiter schwierig. Aber wofür ist MQTT eigentlich gut und wofür brauch ich es.
Allgemeines zu MQTT
Ich möchte MQTT benutzen um Daten eines Arduino´s an openHAB zu schicken und Änderungen eines Status am Arduino zu erhalten. Das senden geht sicher auch über ein WebRequest aber spätestens wen man auch Informationen bei einer Änderung erhalten möchte, wird es schwierig. Ich habe es auch nach mehreren Tagen nicht geschafft, mich mit dem Arduino an die REST API Schnittstelle so zu registrieren, dass ich Nachrichten von openHAB bei Änderungen erhalte.
Ich versuche als erstes das funktionierende mit MQTT abzubilden. Das senden von Informationen vom Arduino an openHAB. openHAB bietet für MQTT eine Schnittstelle und auch der Arduino hat eine Bibliothek für MQTT.
Installation von MQTT unter Windows
Vorweg möchte ich sagen das die Beispielimplementation so einfach wie möglich gehalten ist. Wenn der Zugriff auch aus dem Internet möglich sein muss, dann sollte man die Authentifizierung und Verschlüsselung einrichten. Von MQT gibt es mehrere Implementierungen. Ich benutze die Umgebung von Mosquitto.
Abhängigkeiten
Ich habe bei neueren Versionen von Mosquitto beim Starten immer die folgenden Fehlemeldungen bekommen:
- Die Ordnungszahl 314 wurde in der DLL “<PATH>\mosquitto.exe” nicht gefunden.
- Das Programm kann nict gestartet werden, da pthreadVC2.dll auf dem Computer fehlt.
Das liegt daran, dass bestimmte Bibliotheken nicht im Installationsverzeichnis vorhanden sind. Es ist ratsam das Installationsverzeichnis z.B. “c:\Services\mosquitto” vor der Installation zu erstellen und die Dateien libeay32.dll, pthreadVC2.dll und ssleay32.dll vorher dort hinein zu kopieren. Die bezugsquellen stehen in der Datei readme-windows.txt. Die Datei ist leider erst nach der Installation da. Dadurch kann aber der Windows Dienst nicht eingerichtet werden.
Also am besten Installieren >> prüfen >> DLLs beziehen >> deinstallieren >> Verzeichnis erstellen und kopieren >> Neuinstallieren
MQTT
Von Mosquitto gibt es im Downloadbereich eine Installationsdatei für Windows. Diese Datei einfach herunterladen und Ausführen. Während der Installation muss man nur den Pfad auswählen und entscheiden ob ein Windows Dienst eingerichtet werden soll. Ich habe den Dienst mit eingerichtet. Er ist nach der Installation aber nicht gestartet, steht aber auf Automatisch.
Nach der Installation kann man einen ersten Test durchführen. In einer Eingabeaufforderung startet man den Dienst von Mosquitto (net start mosquitto) und führt eine Registrierung für ein topic aus. Dafür gibt es das Comandline Tool mosquitto_sub.exe. Der gesamte Befehl ist mosquitto_sub -d -t hallo/welt Der parameter -d steht für debug und mit -t wird das topic angegeben.
In einer zweiten Eingabeaufforderung setzt man eine Nachricht mit dem selben topic ab. Dies passiert mit dem Befehl mosquitto_pub -d -t hallo/welt -m “Hallo Mosquitto!”
Die Ausgaben sollte dann wie folgt aussehen:
Wenn man keine Nachichten sieht oder man möchte wissen welche Informationen der MQTT-Dienst gerade verarbeitet sollte man Mosquitto nicht als Windows-Dienst starten. Wenn man einen Fehler sucht kann man am einfachsten den Dienst beenden und den Server in einer Eingabeaufforderung starten. Danach sieht man alle Anmeldungen und abgesetzte Nachrichten samt topic. Der Parameter -v gibt alle Informationen aus. Einstellungen aus der Konfigurationsdatei werden ignoriert.
OpenHAB und MQTT
Als nächstes kommt die Einbindung von openHAB. Dafür habe ich mir ein aktuelle Snapshot von openHAB geholt. Es reicht das runtime und addon Paket. Nach dem entpacken kommt das “org.openhab.binding.mqtt-1.5.1.jar” AddOn in den Ordner addons von der openHAB runtime. Danach habe ich eine kleine Items und Sitemap Datei erstellt.
test.items
Group All Switch Test_Switch1 "Schalter 1" (All) Switch Test_Switch2 "Schalter 2" (All) Switch Test_Switch3 "Schalter 3" (All)
default.sitemap
sitemap default label="Test Menu" { Frame { Switch item=Test_Switch1 Switch item=Test_Switch2 Switch item=Test_Switch3 } }
openhab.cfg
Danach muss noch das Binding in der openhab.cfg koniguriert werden. Am besten kopiert man hierzu die “openhab_default.cfg” nach “openhab.cfg”. In dem Block von “MQTT Transport” habe ich folgende Zeilen hinzugefügt.
mqtt:localbroker.url=tcp://localhost:1883 mqtt:localbroker.clientId=openHABserver mqtt-eventbus:broker=localbroker mqtt-eventbus:commandPublishTopic=/openHAB/out/${item}/command mqtt-eventbus:statePublishTopic=/openHAB/in/${item}/state
Auch dies ist nur eine lokale Minimalinstallation zum testen. Eine Client-ID ist zwar optional sollte aber gesetzt werden. Es kommt manchmal vor das die ID länger als 23 Zeichen ist und dann funktioniert die registrierung von openHAB an MQTT nicht. Die “mqtt-eventbus” Einträge sorgen dafür das alle Änderungen von allen Items an MQTT übergeben werden. In der Testinstallation ist das sehr schön, da man nicht für jedes Item in der Definition ein Binding eintragen muss. In einer komplexen umgebung kann das übermitteln aller Änderung aber ungewünscht sein. Ich möchte MQTT zum Beispiel ja nur zum Austausch von Informationen mit dem Arduino verwenden.
Um die Installation zu testen starten man in einer Eingabeaufforderung den Mosquitto-Server mit “mosquitto.exe -v”
In einer zweiten Eingabeaufforderung registriert man sich für das topic “mosquitto_sub -d -t /openHAB/out/#”. Damit bekommt man alle Nachrichten unterhalb von “/openHAB/out”. Das # ist eine art Wildcard.
Zuletzt startet man openHAB über die start.bat.
Danach kann man über das Web Interface den Status der Schalter ändern.
Die Ausgabe ist dabei in den drei Eingabeaufforderungen zu sehen.
Weitere Informationen
- http://mqtt.org/wiki/
- http://mosquitto.org/
- https://github.com/openhab/openhab/wiki/MQTT-Binding
- http://blog.simonszu.de/2014/05/owntracksmosquitto-unter-debian-installieren/ Installation unter linux Debian mit Zertifikat
Vorweg vielen Dank für diese Beschreibung.
Hab momentan auch OpenHab am laufen und möchte über Mqtt auf einen Arduino mit Lan zugreifen. Genau gesagt möchte ich RGB led’s steuern. Des weiteren will ich einen Mini Bewegungssensor an den Arduino anschließen und den Status +ber Mqtt melden. Leider bin ich noch nicht so erfahren in Java wie auch Arduino. Könntest du vielleicht über die Anbindung an den Arduino auch noch was schreiben. Vielen dank für deine Mühe
Hallo Fabian,
ich habe gerade noch ein Beitrag freigeschaltet. Dort Beschreibe ich wie ein Arduino eine Temperatur an MQTT sendet und den Status eines Schalters von openHAB über MQTT empfängt. Vielleicht hilft dir das weiter. Meine Dioder-Leiste steuere ich im Moment über WebRequests. Das werde ich aber auch umstellen. Dann bekommt der Arduino auch noch ein paar Schalter um diese in openHAB auswerten zu können.
Viele Grüße,
Jörg
Pingback: Erste Schritte MQTT unter Windows | Gerhards Make
Wessen Sie Wahrscheinlich, warum ich beim mosquitto_pub oder mosquitto_sub Start, die Fehlermeldung “Die Anwendung konnte nicht korrekt gestartet werden(0xc000007b). Klicken Sie auf “OK”, um die Anwendung zu schließen.” bekomme?
Hallo,
haben Sie die fehlenden DLLs aus der Readme Datei heruntergeladen und ins Mosquitto Verzeichnis kopiert?
hallo,
ich habe auch den fehler:
Die Ordnungszahl 314 wurde in der DLL „\mosquitto.exe“ nicht gefunden.
ich habe mosquitto wieder deinstalliert, libeay32.dll, ssleay32.dll und pthreadVC2.dll in den ordner kopiert und mosquitto wieder in den selben ordner installiert.
hat leider nicht geholfen, immernoch der selbe fehler.
gibts es noch weitere ansätze oder ideen?
Moin,
den Fehler “Ordnungsszahl 341′ habe ich auch bekommen. Nur eine Maßnahme hat funktioniert: die nächstältere Version von mosquitto installieren (Win10 – Creators Update)
Vielen Dank für den Tipp von wegen erst die DLLs rein kopieren und dann nochmal mosquitto drüber installieren!
Ich (Windows 7) hatte auch erst die Fehlermeldung mit der Ordnungszahl 314 bekommen – und später auch die mit dem Fehler 0xc000007b.
Zunächst waren bei meiner OpenSSL Installation die DLLs gar nicht vorhanden. Dafür müsste ich auf die ältere OpenSSL Version v1_0_2_L Light gehen. Nach dieser Installation waren die libeay32.dll und ssleay32.dll im OpenSSL Installationsordner/bin vorhanden (bei mir C:\OpenSSL-Win32\bin).
Des Weiteren bekam ich die Meldung mit einem Problem bzgl. vcruntime140.dll. Ich hatte zwar gelesen, dass man eine 2015er Visual C++ redistributable installieren soll – dafür hätte man sich aber bei Microsoft anmelden müssen, also hab ich die vcruntime140.dll auf meinem PC (C:\Windows\System32) gesucht und ebenfalls vor der mosquitto Installation in den Ordner kopiert.
Meine vcruntime140.dll ist vom 26.08.2016. Danach musste ich trotzdem noch mosquitto in der älteren Version 1.3.5 installieren.
UND SCHON GEHT ES!!!
I believe this is one of the so much important information for me. And i am happy studying your article. However want to remark on some basic things, The website style is ideal, the articles is truly nice : D. Just right job, cheers
I learn some good stuff here. Certainly value bookmarking for revisiting. I wonder how much attempt you put to make this sort of wonderful informative web site.
Oh three or four only for the Screenshoot 😉
Great weblog here! Also your site quite a bit up very fast! What host are you the use of? Can I am getting your associate link to your host? I want my site loaded up as quickly as yours lol
It is really a great and helpful piece of information. I glad that you shared this helpful info with us. Please keep us up to date like this. Thank you for sharing.
Have you ever considered about including a little bit more than just your articles? I mean, what you say is fundamental and all. Nevertheless just imagine if you added some great pictures or video clips to give your posts more, “pop”! Your content is excellent but with pics and video clips, this site could definitely be one of the very best in its niche. Terrific blog!
This actually answered my problem, thanks!
Hello.This post was really remarkable, particularly since I was browsing for thoughts on this topic last Wednesday.
Awsome article and straight to the point. I don’t know if this is truly the best place to ask but do you folks have any thoughts on where to employ some professional writers? Thanks 🙂