Smart Home OpenHAB 2 MQTT Mosquitto

Werbung
Hinweis: Diese Seite enthält Werbelinks

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.

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.

retry_interval 20
allow_anonymous false
user <user> 
password_file c:\programme\mosquitto\<passwortdatei>

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

Inzwischen wurde das mqtt 2 binding veröffentlicht. Details zur Konfiguration gibt es hier. https://www.openhab.org/addons/bindings/mqtt/

 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.

mosquitto.url=tcp://XXX.XXX.XXX.XXX:1883

Vergebt einen Client-Namen für openHAB 2.

mosquitto.clientId=OpenHAB2

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

mosquitto.user=<user>

Zuletzt noch das Passwort.

mosquitto.pwd=<password>

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.

Switch MQTT_Switch_Command  "MQTT Command" {mqtt=">[mosquitto:Haus/EG/WZ/Licht:command:ON:LichtAn],>[mosquitto:Haus/EG/WZ/Licht:command:OFF:LichtAus]"}

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.

String MQTT_Switch_State    "MQTT State [%s]" 	{mqtt="<[mosquitto:Haus/EG/WZ/Licht:state:default]"}

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.

Frame {
 		Switch item=MQTT_Switch_Command
 		Text item=MQTT_Switch_State
      }

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.

Smarthome Training and Tutorials
Logo