Smart Home OpenHAB 2 MQTT Mosquitto

Smart Home OpenHAB 2 MQTT Binding mit Mosquitto

In diesem Beitrag geht es um die Installation von dem openHAB 2 MQTT Binding und Mosquitto als Server. Ich werde einige grundlegende Worte zu MQTT schreiben, damit ihr die Idee hinter MQTT versteht. Weiterhin wird erklärt wie ihr den lokalen MQTT Broker Mosquitto zum Laufen bekommt. Im Anschluss werden wir einen Client einrichten und ihr erfahrt wie ihr den Broker einem ersten Test unterzieht. Abschließend wird die Item-Konfiguration beschrieben und wie ihr die Werte in Eure UI bekommt.

OpenHAB 2 MQTT – Grundlagen

MQTT steht für Message Queue Telemetry Transport. Es handelt um eine Nachrichtendienst zur Kommunikation zwischen Maschinen. Es ist das Nachrichten-Protokoll für das Internet of Things (IoT) Es lassen sich über einen sogenannten Broker (Server) Nachrichten empfangen. Dieser verteilt die Informationen an die Clients, die aus diesen Informationen etwas nützliches ableiten und entsprechend reagieren. Ihr könnt es Euch ähnlich wie ein Gruppe über ein bestimmtes Thema bei Telegram oder WhatsApp vorstellen. Sobald eine Nachricht von jemanden gesendet wird,  erhalten alle Kontakte der Gruppe diese Information. Nehmen wir mal es wird folgende Nachricht in der Gruppe openHAB 2 verschickt „Treffen 18 Uhr bei der JAX Konferenz zum openHAB 2 Vortag von Kai Kreuzer!“. Die Kontakte empfangen die Nachricht und machen sich entsprechend auf den Weg.

Die Gruppen heißen bei MQTT Topics und ihr könnt ihr wieder Eure Gebäudestruktur abbilden. Empfehlenswert ist eine Struktur wie Gebäude/Geschoss/Raum/Gewerk. Diese bietet Euch später den Zugriff auf die verschiedenen Ebenen. Mittels sogenannter Wildcards könnt ihr so den Status aller gleichen Gewerke übermitteln oder prüfen. Die Wildcard + ersetzt hierbei bestimmte Topics in der Struktur.  +/+/+/Temperatur liefert Euch alle Temperaturwerte zurück. Haus/EG/Wohnzimmer/+ liefert die Werte aller Gewerke wie Licht, Jalousie, Heizung aus dem Wohnzimmer. Eine weitere Wildcard ist # diese kann verwendet werden, um mehrere Level der Struktur zur ersetzen. Haus/EG/# liefert entsprechend die Werte aller Räume und aller Gewerke. Ich denke, es ist klar welche Möglichkeiten sich hierdurch ergeben. Doch nun erst mal zur Installation.

Werbung
IA0KPHNjcmlwdCBhc3luYyBzcmM9Ii8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2pzL2Fkc2J5Z29vZ2xlLmpzIj48L3NjcmlwdD4NCjwhLS0gT25lU21hcnRIb21lIC0tPg0KPGlucyBjbGFzcz0iYWRzYnlnb29nbGUiDQogICAgIHN0eWxlPSJkaXNwbGF5OmJsb2NrIg0KICAgICBkYXRhLWFkLWNsaWVudD0iY2EtcHViLTY4ODcwMjQzNzgwMDQzMjEiDQogICAgIGRhdGEtYWQtc2xvdD0iNzcxMjIyOTQ0MCINCiAgICAgZGF0YS1hZC1mb3JtYXQ9ImF1dG8iPjwvaW5zPg0KPHNjcmlwdD4NCihhZHNieWdvb2dsZSA9IHdpbmRvdy5hZHNieWdvb2dsZSB8fCBbXSkucHVzaCh7fSk7DQo8L3NjcmlwdD4NCg==

OpenHAB 2 MQTT – Mosquitto Installation

Ich empfehle Euch als MQTT Broker Mosquitto. Ladet Euch mosquitto herunter. Ich installiere wieder auf Windows 10, daher lade ich mir die Windows Binary runter.

openhab-2-mqtt-install

Folgt nun einfach der Installationsanleitung.

Drückt im ersten Dialog auf Next >

openhab-2-mqtt-mosquitto-install-1

Drückt wieder auf Next. Ignoriert die Nachrichten erstmal. Den Download der DLLs machen wir anders. Erklär ich unten.

openhab-2-mqtt-mosquitto-install-2

Mosquitto soll als Service starten. Daher lasst den Eintrag markiert und drückt wieder auf Next >

openhab-2-mqtt-mosquitto-install-3

Die Installation erfolgt bei mir im Verzeichnis C:\Programme\mosquitto. Ändert das Verzeichnis ab und kopiert Euch den Pfad in den Zwischenspeicher. Drückt auf Install. Passt später die Hinweise auf das Verzeichnis unten im Beitrag entsprechend an.

openhab-2-mqtt-mosquitto-install-4

Im letzten Bild klickt auf Finish.

openhab-2-mqtt-mosquitto-install-5

Mosquitto Installation – dynamische Programmbibliothek (DLL) installieren

Nun kommen wir zu den im zweiten Schritt erwähnten Abhängigkeiten. Ich gehe hier nicht über die erwähnte Win32OpenSSL Variante, sondern über Raumserver. Raumserver läuft sowieso bei mir und weiterhin braucht ihr die Datei nur entpacken und nichts installieren. Ladet Euch die Raumserver Datei runter und entpackt diese. Aus dem Verzeichnis kopiert die Dateien libeay32.dll und ssleay32.dll in das Verzeichnis  von mosquitto (C:\Programme\mosquitto). Weiterhin ladet direkt die Datei pthreadVC2.dll herunter.  Diese Datei kopiert ihr auch in das Verzeichnis von mosquitto.

Ladet Euch bei Bedarf weiterhin die Visual C++ Redistributable Packages für Visual Studio 2013 und installiert die heruntergeladene Datei.

Mosquitto Installation – Erneut Installieren und Broker Dienst starten

Habt ihr alle DLL Dateien im mosquitto Verzeichnis führt die Installation von oben erneut aus. Kontrolliert im Anschluss, ob der Service läuft. Drückt die Windows Taste + R, gebt services.msc ein und drückt Enter. Hier sucht den Mosquitto Broker Eintrag. Sieht es wie unten aus, drückt auf starten.

openhab-2-mqtt-mosquitto-services

Um ganz sicher zu gehen könnt ihr noch die Eingabeaufforderung als Administrator aufrufen bei Windows 10 drückt einfach Windows + X und wählt den Eintrag Eingabeaufforderung (Administrator). In die Eingabeaufforderung kopiert ihr „netstat -an“ und drückt Enter.

Hier muss nun der Eintrag „TCP    0.0.0.0:1883           0.0.0.0:0              ABHÖREN“ erscheinen. Der Service läuft dann korrekt.

openhab-2-mqtt-mosquitto-port

Mosquitto Installation – User und Passwort erstellen

Falls ihr die Eingabeaufforderung nicht mehr als Admin geöffnet habt, tut dies wie oben beschrieben. Ansonsten bleibt in der Eingabeaufforderung und gebt „CD C:\Programme\mosquitto“ ein. Hiermit wechselt ihr direkt in das Installationsverzeichnis. Damit ihr Mosquitto sicher macht, legt eine Passwortdatei mit einem User an. Hierzu gebt „mosquitto_passwd -c <passworddatei> <username>“ ein.  <passworddatei> und <username> ersetzt durch euren Wunschnamen. Enter drücken und im Anschluss könnt ihr ein Passwort vergeben.

Nun öffnet im Verzeichnis C:\Programme\mosquitto die Datei mosquitto.conf. Ich kann Euch hierfür notepad++ empfehlen. Sobald die Datei geöffnet ist, könnt ihr die einzelnen Zeilen entkommentieren, indem ihr die Raute vor den Einträgen entfernt. Alternativ könnt ihr aber auch einfach die folgenden drei Zeilen oben einfügen. <user> und <passworddatei> entsprechend anpassen.

Damit diese Änderungen aktiv werden, startet den Mosquitto Dienst neu. Ruft hierzu wie oben beschrieben wieder die Dienste auf und wählt den Eintrag Mosquitto Broker. Auf der linken Seite wo „Dienst starten“ stand gibt es nun den Punkt „Dienst neu starten“. Drückt auf den Link „neu starten“. Falls ihr eine Fehlermeldung beim erneuten Start bekommt, gibt es mit großer Wahrscheinlichkeit einen Fehler in der mosquitto.conf. Bei mir lage es am exakten Dateipfad zur Passwort Datei. Achtet hier auf den korrekten Verweis auf die Datei mittels password_file.

Mosquitto Installation – Verbindung

Wurde der Broker wieder gestartet könnt ihr die Übermittlung der Nachrichten bereits testen. Die für mich einfachste Methode war die Nutzung des Chrome Addon MQTTLens. Keine Lust auf Chrome? Dann könnt ihr Alternativ auch Mqtt.fx nutzen. Mqtt.fx finde ich für unseren Fall aber viel zu unübersichtlich, daher beschränke ich mich auf MQTTLens.

Als erstes richtet ihr eine neue Verbindung ein. Vergebt einen Namen (1) und die IP Adresse / den Port (2) des Rechner auf dem der Broker läuft. Weiterhin tragt den zuvor gewählten User und das Passwort ein (3) und übernehmt die Einstellungen (4).

openhab-2-mqtt-lens-connection-add

Anhand des folgenden Beispiels solltet ihr auch verstehen welche Möglichkeiten der Strukturierung und Verteilung von Daten mittels MQTT sich ergeben.

Nehmen wir folgende Struktur an. EuerGebäude/EuerRaum/EuerGewerk. Ihr habt die Räume Wohnzimmer und Esszimmer. In beiden Räumen Lichtquellen und Temperaturfühler. Ihr würdet über die Struktur folgende Elemente erhalten.

  • Haus/Wohnzimmer/Licht
  • Haus/Wohnzimmer/Temperatur
  • Haus/Esszimmer/Licht
  • Haus/Esszimmer/Temperatur

Gebt bei MQTTLens nun bei Subscribe (1) im Feld Topic Haus/Wohnzimmer/Licht ein und bestätigt mit Subscribe. Weiterhin gebt Haus/+/Licht sein und drückt wieder Subscribe. Als letztes gebt Haus/Wohnzimmer/+ ein und drückt wieder auf Subscribe. Der Client folgt nun Änderungen von insgesamt drei Themen (2).

openhab-2-mqtt-lens-subscribe

Der Client bekommt somit Änderungen von Haus/Wohnzimmer/Licht, Haus/Wohnzimmer/Temperatur und Haus/Esszimmer/Licht mit. Warum? Weil wir anstatt der genauen Interpretation eine Wildcard „+“ gesetzt haben. Diese sorgt dafür alles weiteren Textvarianten zu berücksichtigen.

Ihr wollt es selber testen? Dann gebt unter Publish (1) im Topic Haus/Wohnzimmer/Licht und eine Nachricht an und drück anschließend auf Publish. Ihr bekommt das erwartete Ergebnis alle 3 abonnierten Themen (2,3,4) haben die Nachricht erhalten.

openhab-2-mqtt-lens-publish

Ihr seht der Broker ist bereit für den nächsten Schritt. Im nächsten Beitrag werden wir den Broker nun für die Ortung mittels GPS (OwnTracks) und zur Integration in openHAB verwenden.

OpenHAB 2 MQTT – MQTT Binding

 MQTT Binding – Installation und Konfiguration

Die Installation des MQTT Binding erfolgt wieder über die PaperUI. Ruft diese entsprechend auf und installiert das MQTT Binding. Lest bei Bedarf z.B. im Artikel Smart Home – openHAB 2 Installation und Konfiguration nach. Dieses Binding stellt die Verbindung zu Eurem MQTT Broker Mosquitto her.

Öffnet nun den SmartHome Designer und geht auf den Services Ordner und öffnet die mqtt.cfg. Ihr wisst noch nicht was der SmartHome Designer ist und wie ihr diesen einrichtet? Lest bitte den Beitrag zu Smart Home openHAB 2 Konfiguration.

openhab-2-mqtt-config-smarhomedesigner

Hier tragt ihr die URL auf den Broker ein. Die XXX durch die IP des Rechners ersetzen auf dem der Broker läuft.

Vergebt einen Client-Namen für openHAB 2.

Weiterhin tragt den oben angelegten Nutzer für openHAB ein.

Zuletzt noch das Passwort.

Nachdem ihr diese Änderungen abgeschlossen habt, startet openHAB 2 neu.

MQTT Binding – Item-Konfiguration

Da nun alles vorbereitet ist, können wir nun unsere Items konfigurieren und an das MQTT Binding anbinden. Hier gibt es folgende wichtige Regeln zu beachten. Es gibt zwei Kommunikationsrichtungen und zwar eingehende und ausgehenden Nachrichten. Dies ist immer aus Sicht von openHAB zu sehen. Genutzt werden hierfür dreieckige Klammern. Ausgehend sind in der Regel immer Befehle, die ihr senden wollt. Eingehend sind es Status.

Merkt Euch einfach folgendes.

  • < wird für eingehende Nachrichten Broker an openHAB 2 verwendet. Diese werden in der Regel immer State (Status) zugewiesen. Ansonsten würdet ihr bei eingehender Nachricht schalten.
  • > wird für ausgehende Nachrichten openHAB 2 an Broker verwendet. Dieser werden in der Regel immer Command zugewiesen. Ihr wollt einen Befehl absetzen.

Wir bauen nun eine Testkonfiguration auf. Als erstes eine ausgehende Nachricht.

Wir definieren uns einen Schalter. Das MQTT Binding setzt sich wie folgt zusammen.

  • >  ausgehende Nachricht
  • mosquitto = broker aus Eurer Binding Konfiguration
  • Haus/EG/WZ/Licht  ist die Topic Struktur
  • command definiert, dass ein Befehl gesendet wird
  • ON bzw. OFF definieren den Zustand des Befehls
  • LichtAn / LichtAus ist die Nachricht, die versendet wird

Die eingehende Nachricht machen wir etwas einfacher.

Hier nutzen wir eine Zeichenkette, die die Nachricht des Schalter empfängt.

  • <  eingehende Nachricht
  • mosquitto = broker aus Eurer Binding Konfiguration
  • Haus/EG/WZ/Licht  ist die Topic Struktur
  • state definiert, dass ein Status empfangen wird
  • default, greift den Wert unabhängig vom Zustand (ON/OFF) des Befehls ab. Geht aber auch in Abhängigkeit vom Befehl

Nun noch die beiden Items in Eure Sitemap einfügen.

Im Anschluss ruft die ClassicUI auf und ihr werdet das Verhalten entsprechend testen können.

Je nach Schalterstellung wechselt der Status im Text von LichtAus nach LichtAn.

openhab-2-mqtt-classicui-off

openhab-2-mqtt-classicui-on

Dieser Beitrag ist Voraussetzung für die Integration von OwnTracks inklusive iBeacons. Ich freue mich wie immer über Kommentare. Eventuell habt ihr einige gute Fallbeispiele für die weitere Nutzung von MQTT in Eurem Smart Home.

Werbung
13 Comments
  1. MQTT habe ich relativ viel im Einsatz, um die ESP8266 WLAN Module zu steuern und auszulesen.
    Ich steuere via IR div LED Stripes, lese die Batterie Spannung meines Motorrades und weiteres…

  2. Das klingt spannend, und ich habe mich schon öfters über den Sinn des Einsatzes von MQTT gefragt.
    So ganz klar ist mir aber auch jetzt noch nicht, was ich damit hinbekomme, was nicht genausogut über Gruppen innerhalb von OH laufen würde?!?

  3. Bei mir ist der Vorteil von MQTT ist das Empfangen. Der ESP ist im DeepSleep, wacht auf, sendet Daten und geht dann wieder Schlafen. MQTT empfängt dann die Daten und stellt sie OH zur Verfügung.
    Die Kommunikation mit den Modulen ist so sehr einfach zu Realisieren.

  4. Danke für der Ausführliche Beschreibung.

  5. Reply
    Michael Aschenborn 15. März 2017 at 13:09

    Dank dieser schönen Beschreibung konnte ich das bei mir nachvollziehen.
    Eine Frage zum Verständnis habe ich aber nun:
    Sende ich von meinem Android aus mit einem MQTT-Client in deinem Beispiel an Haus/EG/WZ/Licht den Command ON, dann steht sofort in der Sitemap bei MQTT_Switch_State ein „ON“ (kein LichtAn)
    MQTT_Switch_Command ändert den Zustand gar nicht in diesem Fall.

    Wäre das nicht gerade die Idee, dass ich ein ON sende, im State ein „LichtAn“ ausgegeben wird und der Schalter auf ON wechselt?

    • Hallo Michael,
      das sollte so sein. Siehst Du das auf dem Handy Dir per Browser oder mit der openHab APP an?
      Manche Browser aktualisieren nicht, dann ändert sich der Status nicht. Via APP funkioniert das bei mir…

      Grüsse
      Christian

    • Hallo Michael,

      Ich setze gerade neu auf. Dauert ein bisschen, bis ich bei mir das anschauen kann.

      Melde mich wohl nächste Woche.

      Beste Grüße
      Thomas

  6. Hallo,
    danke für diese gute Hilfestellung. Ich habe nur eine Sache noch nicht klappiert. Vielleicht kannst du mir da auf die Sprünge helfen.
    Du definierst Haus/EG/WZ/Licht als Topic-Struktur. Wie und wo setzte du diese in OH2 um?

    Viele Grüße
    Stan

    • Hallo Stan,

      steht im Kapitel MQTT Binding – Item-Konfiguration am Ende. Oder meinst Du etwas anderes?

      Beste Grüße
      Thomas

  7. Hallo Thomas,
    ich habe drei Sonoffs geflasht und in OH2 eingebunden. Diese funktionieren als Schalter für Lüfter und geben gleichzeitig die Daten Temperatur und Luftfeuchte aus dem Raum an OH2 zurück.
    Hier ist mein Problem: in der var/log von OH2 erscheinen sehr viel weniger Statusmeldungen über Temp und Feuchte als über z.B. MQTT-lens oder MQTT-spy gleichzeitig beobachtbar. Ist Dir dieses Problem einmal untergekommen? Die mqtt.cfg habe ich entsprechend den Hinweisen in der community angepasst, allerdings ohne Verbesserung:

    mosquitto.clientId=openhab2
    mosquitto.user=openhabian
    mosquitto.qos=0
    mosquitto.retain=true
    mosquitto.async=false

    Hast Du eine Idee oder gar Lösung für das Problem?
    Vielen Dank für Deine Seite, die hat mir als Laie schon mehrfach geholfen!

    Thomas

    • Hallo Thomas,

      das habe ich noch nicht bemerkt. Ich nutze MQTT aber noch wenig. Sonoff steh zwar auf dem Plan. Aber die Liebe Zeit =)

      Mein Rat wäre auch die Community gewesen. Da gibt es echte MQTT Experten.

      Sorry und BG
      Thomas

  8. Vielen Dank für diesen interessanten Beitrag !
    Ich bin hierauf gestoßen, bei der Suche nach einer Lösung für folgendes:
    Ich baue mir gerade eine eigene Website mit HTML und CSS – um im Anschluss mein OpenHab2 System steuern und überwachen zu können. Leider finde ich nirgends den entscheidenden Hinweis, wie ich die kommunikation verwirkliche ? Also die Anbindung der Website mit Openhab. MQTT? REST API? HTTP Bindung ?!

    Hast du einen Tipp für mich, wie ich das verwirklichen kann ? Da ich den Status der einzelnen Items (Licht Beispielsweise) nicht zyklich „pollen“ möchte, sondern meine Website die Info übermittelt bekommen soll, wenn eine Lampe eingeschaltet wurde, kann ich das HTTP Bindung wohl nicht nutzen.

    Wie kann ich das gewünschte prinzipiell umsetzen ? THX im Voraus 🙂

Hinterlasse einen Kommentar

Cookie-Einstellung

Mit dem akzeptieren von Cookies unterstützt ihr meine Arbeit und helft den Blog zu finanzieren.
Daher freue ich mich, wenn ihr die Cookies akzeptiert. Weitere Informationen zu den Auswirkungen der Auswahl findet ihr unter Hilfe. Datenschutz | Impressum

Treffe eine Auswahl um fortzufahren

Die Auswahl wurde gespeichert!

Weitere Informationen

Hilfe

Um fortfahren zu können, bitte Cookie-Auswahl treffen. Nachfolgend erhältst Du eine Erläuterung der verschiedenen Optionen und ihrer Bedeutung.

  • Alle Cookies zulassen:
    Jedes Cookie wie z.B. Tracking- und Analytische-Cookies.
  • Keine Cookies zulassen:
    Es werden keine Cookies gesetzt, es sei denn, es handelt sich um technisch notwendige Cookies.

Du kannst deine Cookie-Einstellung jederzeit hier ändern: Datenschutz. Impressum

Zurück

Baue deine eigene lokale Sprachsteuerung

Löse dich von Amazon Alexa und Google Home

WERBUNG

Udemy Videotraining

2,5  Stunden Videotraining