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.
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)
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
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 Typ | Funktion | Inhalte | Befehle |
---|---|---|---|
Switch | Schalten von Geräten wie z.B. Lampen, Steckdosen, Multiroom etc. | An/Aus | An/Aus |
Dimmer | Dimmen und Schalten von Geräten wie Lampen | An/Aus, Prozentwerte | An/Aus, Prozent, Erhöhen, Verringern |
Color | Farbauswahl für LED | An/Aus, Prozentwerte, HSB | An/Aus, Prozentwerte, HSB |
Rollershutter | Rolladensteuerung hoch, runter, Position anfahren | Hoch, Runter, Prozent | Hoch, Runter, Bewegen, Prozent |
Number | Speichern und Setzen von numerischen Werten | Dezimalzahl | Dezimalzahl |
String | Speichern und Setzen von Zeichenketten | Zeichenketten | Zeichenketten |
DateTime | Speichern und Setzen von Datum und Zeit inklusive Zeitzone | Datum und Uhrzeit | Datum und Uhrzeit |
Contact | Werte von Kontakte darstellen wie z.B. Ventile, Öffnungsmelder | Offen, Geschlossen |
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
- MQTT.fx – MQTT Client
- MQTT Explorer – MQTT Client
- mqtt-spy
- OpenHAB2
Quellen:
- community.openhab.org – [OH3] MQTT Setup and Configuration
- mediasysteme.de – https://mediasysteme.de/Advanced_User/INSTAR_MQTT_Broker/OpenHAB2/
- OpenHAB Forum – https://openhabforum.de/viewtopic.php?f=15&t=970&start=20