Drücken sie Ctrl/Cmd + P zum drucken
oder zum Speichern als PDF.

MQTT: Kurzanleitung & Installation unter OpenHAB

MQTT ist ein Messaging Protokoll für das IoT (Internet of Things – Internet der Dinge). Anders als Request/Response Protokolle wie z.B. HTTP entkoppelt es alle Kommunikationsteilnehmer und der Datenaustausch wird über das Senden von Nachrichten über einen zentralen Verteiler an interessierte Teilnehmer realisiert.

Das MQTT Protokoll ist extrem schlank und wurde ursprünglich für sehr ressourcenarme Geräte entwickelt die über sehr schlechte Connectivity verfügen.

Ein MQTT-Server („Broker“) hält alle Daten seiner Kommunikationspartner vor, und kann so als Zustands-Datenbank benutzt werden kann. So ist es möglich, kleine ressourcenarme MQTT-Geräte mit einem MQTT-Broker zu verbinden, wobei die Geräte Daten einsammeln und/oder Befehle entgegennehmen, während die komplexe Datenlage nur auf dem MQTT-Broker entsteht und hier ausgewertet werden kann.

MQTT ist ein Client-Server-Protokoll. Clients senden dem Server (“Broker”) nach Verbindungsaufbau Nachrichten mit einem Topic, welches die Nachricht hierarchisch einstuft.
Beispiel Bad/Licht/Deckenlampe oder Garten/Wetter/Luftdruck. Clients können diese Topics abonnieren, wobei der Server die empfangenen Nachrichten an die entsprechenden Abonnenten weiterleitet.

Bild 1 – Publish/Subscribe-Architektur von MQTT. © HiveMQ.com

Nachrichten bestehen immer aus einem Topic und dem Nachrichteninhalt. Nachrichten werden mit einem definierbaren Quality of Service versendet:

  • at most once – die Nachricht wird einmal gesendet und kommt bei Verbindungsunterbrechung möglicherweise nicht an (ähnlich UDP)
  • at least once – die Nachricht wird so lange gesendet, bis der Empfang bestätigt wird, und kann beim Empfänger mehrfach ankommen
  • exactly once – hierbei wird sichergestellt, dass die Nachricht auch bei Verbindungsunterbrechung genau einmal ankommt

Beim Verbindungsaufbau können Clients einen „letzten Willen“ in Form einer Nachricht definieren. Falls die Verbindung zum Client verloren geht, wird diese Nachricht publiziert und dabei an die entsprechenden Abonnenten gesendet.

In OpenHAB können wir mittels MQTT verschiedenste Geräte von unterschiedlichsten Herstellern einbinden, solange diese MQTT unterstützen.

Voraussetzungen

  • Raspian OS
  • MQTT Binding OpenHAB V2

Installation auf Raspian OS

  • sudo apt-get install -y mosquitto mosquitto-clients
  • ab der Version Mosquitto V2 + muss die config erweitert werden, das Mosqitto nur Verbindungen von localhost entgegennimmt, aber keine anonymen Anfragen von externen Geräten bearbeitet:
    • sudo nano /etc/mosquitto/mosquitto.conf
  • folgende Zeilen ergänzen
    • listener 1883
    • allow_anonymous true
  • anschließend Mosquitto neu starten
    • sudo systemctl restart mosquitto
  • damit ist der Server installiert und es kann der Client, z.B. unter OpenHab eingerichtet werden
  • Paper IU -> Addons -> Bindings -> MQTT Binding (2.5.6)
Bild 1 – MQTT Binding installieren

Einbinden des MQTT Server

Man kann den Broker über die Oberfläche von OpenHAB hinzufügen, oder später als über eine Bridge in einer Things Datei festlegen.

MQTT Broker in OpenHAB einrichten

  • anschließend binden wird den installierten MQTT Server in OpenHAB ein
  • Paper UI -> Inbox -> hinzufügen (+) -> MQTT Binding -> AAA MANUALLY -> MQTT Broker
  • Vergabe von: Name, Thing ID, IP, Port, Username, Passwort (pi:xyz)
  • dann bestätigen
  • diese Daten müssen auch im Smarten Gerät eingegeben werden (z.B. unter Tasmota)
  • wenn alle geklappt hat, erscheint der MQTT Server unter Configuration -> Things als online
Bild 2 – MQTT Broker ist online

MQTT Broker über die Bridge festlegen

Konfigurieren lässt sich eine Menge, je nachdem wie man seinen Server eingerichtet hat. Im Grunde reichen aber die Angaben zum Brokernamen, IP-Adresse / Hostname und die Sicherheit bei der Anmeldung. In diesem Fall verzichten wir auf eine Anmeldung per User / Kennwort. In die geschweiften Klammern kommen später die Things die wir nutzen möchten.

Ausführlichere Informationen über die Einrichtung des Broker können unter dem Link der bridge.things nachgeschlagen werden.

// bridge.things
// https://community.openhab.org/t/using-sonoff-power-switches-with-tasmota-firmware-and-openhab2-mqtt2-binding/59969
Bridge mqtt:broker:brokerhome [ host="192.168.1.5", secure=false ]
{
}

Wenn man den Broker noch weiter konfigurieren möchte ist das ein guter Anhalt für die Funktion der einzelnen Einträge:

Bridge mqtt:broker:brokerhome "Mosquitto MQTT Broker" @ "MQTT" 
         ^    ^        ^                ^                  ^ Zeige diese Bridge "MQTT" in Paper UI Control
         ^    ^        ^                ^ Label der Bridge
         ^    ^        ^ Name der Bridge
         ^    ^ Art der Bridge
         ^ Binding
  • anschließend kann Verbindung zum Client mit MQTT.fx getestet werden

Topics

  • # – alle Topics
  • $SYS – Systemnachrichten des MQTT Server

OpenHAB Konfiguration

Items – Syntax

  • die Syntax sieht wie folgt aus:
    itemtyp itemname "bezeichnung" <iconname> (gruppe1, ... gruppeN) ["sprachsteuerung"]{binding}

Items – Itemtypen

Der Typ legt zum einen die Funktion des Items, zum anderen auch die Möglichkeiten die dem Item hinterlegt werden. So kann ein Schalter den Zustand EIN und AUS annehmen, wobei ein Dimmer auch Zwischenzustände zulässt.

Beispiel:
switch

Item TypFunktionInhalteBefehle
SwitchSchalten von Geräten wie z.B. Lampen, Steckdosen, Multiroom etc.An/AusAn/Aus
DimmerDimmen und Schalten von Geräten wie LampenAn/Aus, ProzentwerteAn/Aus, Prozent, Erhöhen, Verringern
ColorFarbauswahl für LEDAn/Aus, Prozentwerte, HSBAn/Aus, Prozentwerte, HSB
RollershutterRolladensteuerung hoch, runter, Position anfahrenHoch, Runter, ProzentHoch, Runter, Bewegen, Prozent
NumberSpeichern und Setzen von numerischen WertenDezimalzahlDezimalzahl
StringSpeichern und Setzen von ZeichenkettenZeichenkettenZeichenketten
DateTimeSpeichern und Setzen von Datum und Zeit inklusive ZeitzoneDatum und UhrzeitDatum und Uhrzeit
ContactWerte von Kontakte darstellen wie z.B. Ventile, ÖffnungsmelderOffen, Geschlossen
Tabelle 1 – Übersicht itemtyp

Items – Name

  • der Name sollte eindeutig sein, da dieser dann als Variable für die weitere Konfiguration, z.B. der Sitemap dient
  • sinnvoll ist die Festlegung einer eigenen Namenskonvention für die Itembezeichnung
  • ein sinnvoller Aufbau nach dem gleichen Schema erleichtert später den Umgang mit umfangreichen Konfigurationen, z.B.
    <GESCHOSS_RAUM_POSITION_FUNKTION_GERÄTENAME>

Beispiel:
Switch EG_WoZi_Couch_Lampe

Items – Bezeichnung

  • die Bezeichnung kann frei gewählt werden und erscheint später in der Weboberfläche als Bezeichnung des Items
  • soll eine Sprachsteuerung genutzt werden, so ist auch hier ein eindeutiger Name wichtig

Beispiel:
Switch EG_WoZi_Couch_Lampe "Lampe Couch"

Items – Icons

Für jeden Eintrag kann ein Icon angezeigt werden. Die Auswahl kann in der openHAB Dokumentation nachgeschlagen werden.

Beispiel:
Switch EG_WoZi_Couch_Lampe "Lampe Couch" <light>

Items – Gruppen

  • Gruppen werden zur Gruppierung von Items in der Sitemap verwendet
  • damit ist es möglich z.B. mehrere Lampen gleichzeitig mit nur einem Schalter zu bedienen
  • eine gängige Bezeichnung einer Gruppe fängt mit einem klein g für Gruppe an, dies fördert die Übersicht in den Configdateien

Items – Binding Konfiguration

Beispiel:
Switch EG_WoZi_Couch_Lampe "Lampe Couch" <light> (gLicht)

Programme

Quellen: