OpenHAB unterstützt MQTT – Message Queuing Telemetry Transport – ein Nachrichtenprotokoll für Machine to Machine Kommunikation. Damit können Daten und Befehle empfangen und gesendet werden. Wie du das MQTT Binding in openHAB nutzen kannst erfährst du hier.
MQTT Binding installieren
Das MQTT Binding kann komfortabel über die Paper UI installiert werden. Unter Add-ons – Bindings nach MQTT suchen und das MQTT Binding installieren.
Sobald das Binding installiert wurde, muss es noch konfiguriert werden. Da es sich um ein 1.11.0 Binding handelt, muss das in der entsprechenden mqtt.cfg Datei erfolgen. Diese findest du unter: /openHAB-conf/services/mqtt.cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# # Define your MQTT broker connections here for use in the MQTT Binding or MQTT # Persistence bundles. Replace <broker> with an ID you choose. # # URL to the MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883 meinbroker.url=tcp://broker.hivemq.com:1883 # Optional. Client id (max 23 chars) to use when connecting to the broker. # If not provided a random default is generated. #meinbroker.clientId=openHAB # Optional. True or false. If set to true, allows the use of clientId values # up to 65535 characters long. Defaults to false. # NOTE: clientId values longer than 23 characters may not be supported by all # MQTT servers. Check the server documentation. #<broker>.allowLongerClientIds=false # Optional. User id to authenticate with the broker. #<broker>.user=<user> # Optional. Password to authenticate with the broker. #<broker>.pwd=<password> # Optional. Set the quality of service level for sending messages to this broker. # Possible values are 0 (Deliver at most once),1 (Deliver at least once) or 2 # (Deliver exactly once). Defaults to 0. #<broker>.qos=<qos> # Optional. True or false. Defines if the broker should retain the messages sent to # it. Defaults to false. #<broker>.retain=<retain> # Optional. True or false. Defines if messages are published asynchronously or # synchronously. Defaults to true. #<broker>.async=<async> # Optional. Defines the last will and testament that is sent when this client goes offline # Format: topic:message:qos:retained <br/> #<broker>.lwt=<last will definition> |
So sieht die mqtt.cfg aus. Alle Einstellungen sind auskommentiert. In der einfachsten Konfiguration muss nur eine Zeile durch entfernen der # aktiviert und angepasst werden.
1 |
meinbroker.url=tcp://broker.hivemq.com:1883 |
Diese Zeile definiert den Namen und die URL des Brokers. Im Beispiel hat der Broker den Namen „meinbroker“. Dieser wird später bei der Erstellung von Items wichtig werden. Die URL des Brokers ist in diesem Fall broker.hivemq.com mit dem Port 1883. hivemq ist ein Cloud Broker, der kostenlos genutzt werden kann. Das entsprechende Dashboard des Brokers ist unter http://broker.mqtt-dashboard.com erreichbar.
Item anlegen
Nun ist das Binding installiert. Wenn du bereits ein Gerät hast, das per MQTT Daten sendet, kannst du diese nun mittels Items in openHAB einbinden. Ich habe bereits Temperatur- und Feuchtigkeitssensoren und einen Ultraschall-Abstandssensor im Einsatz. Die Anleitung zum Ultraschallsensor findest du hier. Am Beispiel des Ultraschallsensors sieht das Item so aus:
1 |
Number Abstand_Garage "Abstand [%s]" {mqtt="<[meinbroker:Haus/EG/Garage/Sensor/Abstand:state:default]"} |
Hier finden wir den in der mqtt.cfg vergebenen Namen des brokers meinbroker.
Jetzt ist der Wert vom Sensor in openHAB verfügbar und kann in Regeln oder der Sitemap nach Belieben verwendet werden.
Hi. vielen Dank für deine interessante Seite und deine Erklärungen/Beispiele.
Meinst du das es möglich wäre eine eigene browserbasierte Steuerungsoberfläche (UI) mit HTML/CSS zu erstellen, welche ausschließlich über MQTT mit OpenHAB kommuniziert ? Wäre dies realisierbar ? Grund hierfür ist meine gewünschte totale Freiheit in der Ausarbeitung des Designs. Schließlich darf der WAF nicht zu kurz kommen, wenn die komplette Steuerung/Visualisierung auf einem 24″ Tochscreen im Flur dargestellt wird 🙂
Ich suche eine leichte Möglichkeit dies umzusetzen ohne mich massiv in JavaScript und dem Nachbilden eines ganzen Kommunikations-Stack zu verlieren ?
Eine eigene Website, welche per MQTT mit OpenHab kommuniziert sollte doch realisierbar sein oder nicht?
Ich kann die Zustände einzelner ITEMS ständig aktuell darstellen, da ich diese mit hilfe MQTT abonnieren kann, und kann die Items ebenfalls „bedienen (switch Items … usw.“.
Hi Danny,
vielen Dank. Es freut mich immer, wenn Interesse an meiner „Arbeit“ besteht 😉
Zu deiner Frage. Das ist sicher möglich. Ich denke über MQTT könnte das etwas umfangreicher sein. Wenn ich nicht ganz falsch liege, musst du dann für jedes MQTT Item, welches du über deine eigene UI ansprechen willst eine Regel definieren, die dann letztendlich den Switch, etc. anspricht.
Es gibt ja auch noch die REST API. Darüber kannst du meines Wissens die Items direkt ansteuern. Wie das genau funktioniert weiß ich allerdings (noch) nicht. Hier kann dir bestimmt jemand aus dem knx User Forum weiterhelfen. Ich würde mich freuen, wenn du deine Erfahrungen mit uns teilst, sobald du fertig bist. Es hört sich auf jeden Fall interessant an eine komplett eigene UI zu bauen 🙂
Viele Grüße
Patrick