openhab2 und MQTT verbinden

Ich habe meine openhab2 Installation , die ein paar ZWave Sensoren und Schalter steuert mit mqtt verbunden. Warum? Weil ich mich mit dem Regeldeditor von Habmin und der Regelumsetzung in openhab nicht wirklich anfreunden kann. Auf lange Sicht möchte ich auf nodered setzen, um Regeln grafisch zu editieren und dazu ist es nötig, die Daten und Zustände von Sensoren und Schaltern für die Verwendung in nodered zu publizieren.

Dafür ist für mich ein auf dem gleichen Raspberry Pi , auf dem openhab2 läuft, installierter mosquitto Server das Mittel der Wahl. Inatalliert aus den Paketquellen der Raspian Distribution, kann man mit mqttlens sehr schnell schauen, ob der Server läuft und man eine Verbindung herstellen kann…

Die Konfiguration in openhab2 ist relativ simpel:

  • über das Paper-UI unter „Addons“ das mqtt-binding aktivieren
  • die Konfiguration für den mosquitto-Server eintragen

Mit Installation des Plugins werden im ~openhab2/services Verzeichnis die folgenden beiden Dateien angelegt:

  • mqtt.cfg die eigentliche Config-Datei für die Verbindung zum Server, dort die folgende Zeile einkommentieren und den Eintrag editieren, um einen Server auf localhost anzusprechen:

# URL to the MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883
raspipi.url=tcp://localhost:1883

  • mqtt-eventbus.cfg hier wird eingetragen, welche Dinge aus dem openhab2 Eventbus in Richtung mqtt Server publiziert werden.

# Name of the broker as it is defined in the openhab.cfg. If this property is not available, no event bus MQTT binding will be created.
broker=raspipi das spricht den Server an, den wir zuvor eingetragen haben

# When available, all status updates which occur on the openHAB event bus are published to the provided topic. The message content will
# be the status. The variable ${item} will be replaced during publishing with the item name for which the state was received.
statePublishTopic=openhab-status/${item}/status Statusänderungen werden als Topic openhab-status publiziert

# When available, all commands which occur on the openHAB event bus are published to the provided topic. The message content will be the
# command. The variable ${item} will be replaced during publishing with the item name for which the command was received.
commandPublishTopic=openhab-command /${item}/command Kommandos werden als Topic openhab-command publiziert

Das ist eigentlich schon alles. Nach einem Neustart von openhab2 kann man im Log sehen, dass die Verbindung zum mqtt-Server hergestellt wird. Abonniert man mit mqttlens die beiden zuvor konfigurierten Topics kann man bei Betätigung eines Schalters in openhab2 auch die entsprechend publizierten Nachrichten sehen.

Mosquitto mqtt Message Broker auf der Synology

Nicht immer stehen für alle Geräte und Dienste, die man in seiner Homeautomatisierung verwenden möchte, die passenden Möglichkeiten bereit, alles unmittelbar in die Steuerungszentrale einzubinden.

Eine Möglichkeit dennoch Daten aus nicht direkt verbundenen Quellen in einer Steuerungssoftware wie Domoticz o.Ä. zu verwenden ist ein Message Broker. Im Umfeld der Gerätevernetzung hat sich dazu beispielsweise das leichtgewichtige Telemetrieprotokoll mqtt etabliert, das nach dem publish-subscribe Ansatz funktioniert. Verbundene Geräte können also Zustandsdaten, Ortsangaben usw. an den Message Broker übermitteln, ein Beispiel dafür wäre owntracks.

Für die Protokollimplementierg gibt es eine Reihe von verfügbarer kommerzieller, aber auch OpenSource Software. Ich habe mich für Mosquitto entschieden, weil es dazu ein Synology Package der Synocommunity gibt.

Nach der Installation läuft der Dienst zunächst ohne Authentifizierung und ohne TLS am Port 1883. Um die Funktionalität zu testen, brauch es einen Client. Ich verwende die Chrome Erweiterung MQTTLens. Wie man damit umgeht, ist hier so gut beschrieben, dass ich dazu selber nichts schreiben muss.

Authentifizierung in Mosquitto mit Username / Passwort:

Dafür bringt mosquitto ein Kommandozeilenwerkzeug zur Erzeugung eines Passwortfiles mit dem Namen mosquitto_passwd mit, zu finden im Ordner bin der Mosquitto Installation. Um ein Passwortfile mit dem Namen mqpass im aktuellen Verzeichnis für den Benutzer test zu erzeugen reicht:

./mosquitto_passwd -c ./mqpass test
dann wird eine entsprechende Datei angelegt. Jetzt muss man Mosquitto noch beibringen, diese zu verwenden. Hierzu müssen in der mosquitto.conf Datei im Verzeichnis var der Mosquitto Installation die folgenden beiden Einträge verändert werden:

allow_anonymous false    # war vorher True

password_file Pfad/zu/mqpass # Pfad zu mqpass muss eingeben werden

Nach einem Neustart des Dienstes stellt man fest, dass man sich wie bisher nicht mehr verbinden kann und das erst wieder möglich ist, nachdem Benutzernamen und Passwort eingegeben wurden…

Ein paar Links zum Thema:

MQTT und Owntracks – Livetracking

DIY Latitude

Caschis Blog

Mosquitto und Websockets