openHAB – MQTT Server installieren (Mosquitto)

Um Geräte über das MQTT Protokoll anbinden zu können, benötigen wir einen extra Server, welchen wir danach via Binding an openHAB anbinden können.
Was alles zu tun ist, zeige ich hier im Video.




1. Mosquitto installieren und den Dienst danach gleich stoppen

# apt install mosquitto -y
# service mosquitto stop

2. Die Benutzerprofil-Datei anlegen:

# touch /etc/mosquitto/passwd

3. Ein neuer MQTT-Benutzer anlegen:

# mosquitto_passwd -c /etc/mosquitto/passwd NUTZERNAME

Ersetze NUTZERNAME durch einen beliebigen Nutzernamen (z.B. mqttbenutzer oder so). Du musst anschließend 2x ein Passwort angeben. Achtung, das passiert versteckt!
Nutze beim Passwort eine Kombination aus Buchstaben und Zahlen. Nur Zahlen führen z.B. bei der Inbetriebnahme von Zigbee2MQTT zu Problemen!

4. Die Konfiguation noch anpassen:

# nano /etc/mosquitto/mosquitto.conf

Füge dort folgendes hinzu:

password_file /etc/mosquitto/passwd
allow_anonymous false

5. Möchtest du den Login von extern erlauben (z.B. deinem Rechner), füge noch folgende Zeile hinzu:

listener 1883

6. MQTT wieder starten:

# service mosquitto start

7. Das MQTT-Binding installieren

8. OPTIONAL: Installiere noch das Add-On „JSONPath Transformation„, um die JSON-Daten sauber von openHAB interpretieren lassen zu können


Du brauchst noch ein Tool, um die Informationen des MQTT-Servers besser auslesen zu können?
Ich empfehle MQTT-Explorer.
Es ist ein kostenloses OpenSource-Tool.


Für den einfachen Start mit MQTT, hier noch ein paar Beispiele:

Ist im Pfad ein + Symbol, zählt dies als „Wildcard“ – also Zufallswert.
Somit kann eine Abfrage flexibel gebaut werden.

Temperaturen erfassen:

things:
  mqtt:topic:MqttBroker:MqttRtl433Temperatur:
    bridge: mqtt:broker:MqttBroker
    label: MQTT Wetterstation Temperatur Außen
    location: Außen
    channels:
      Temperatur:
        type: number
        label: Temperatur
        config:
          stateTopic: rtl_433/XXXXXXXXXXXXX/devices/LaCrosse-TX141THBv2/0/+/temperature_C
          min: -50
          max: 50
          unit: °C
      LetztesUpdate:
        type: datetime
        label: Letztes Update
        description: ""
        config:
          stateTopic: rtl_433/XXXXXXXXXXXXX/devices/LaCrosse-TX141THBv2/0/+/time
      Luftfeuchtigkeit:
        type: number
        label: Luftfeuchtigkeit
        config:
          stateTopic: rtl_433/XXXXXXXXXXXXX/devices/LaCrosse-TX141THBv2/0/+/humidity
          min: 0
          max: 100
          unit: '%'

Stromzähler auslesen mit Unterpunkten:

things:
  mqtt:topic:MqttBroker:Stromzaehler:
    bridge: mqtt:broker:MqttBroker
    label: MQTT Stromzähler
    location: Schaltschrank
    channels:
      StromzaehlerBezug_180:
        type: number
        label: Stromzähler Bezug - 180
        config:
          stateTopic: iot/smartmeter/XXXXXX/SENSOR
          transformationPattern:
            - JSONPATH:$.Strom.Total_in
          min: 0
          max: 999999999
      StromzaehlerRuecklieferung_280:
        type: number
        label: Stromzähler Rücklieferung - 280
        config:
          stateTopic: iot/smartmeter/XXXXXX/SENSOR
          transformationPattern:
            - JSONPATH:$.Strom.Total_out
          min: 0
          max: 999999999
      Stromzaehler_Status:
        type: string
        label: Stromzähler Status
        config:
          stateTopic: iot/smartmeter/XXXXXX/LWT
          allowedStates: "Online,Offline"
      AktuellerVerbrauch:
        type: number
        label: Stromzähler - Aktueller Verbrauch
        config:
          stateTopic: iot/smartmeter/XXXXXX/SENSOR
          transformationPattern:
            - JSONPATH:$.Strom.Power_cur
          min: -20000
          max: 20000
          unit: W

Shelly 2.5 mit Tasmota:

things:
  mqtt:topic:MqttBroker:MqttShelly2502:
    bridge: mqtt:broker:MqttBroker
    label: "MQTT Shelly 2.5"
    location: Verlies
    channels:
      Stromversorgung:
        type: switch
        label: Stromversorgung Schalter 1
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/POWER1
          commandTopic: iot/XXXXXXXXXXX/shelly-25-02/cmnd/POWER
          "on": "ON"
          "off": "OFF"
      Stromversorgung2:
        type: switch
        label: Stromversorgung Schalter 2
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/POWER2
          commandTopic: iot/XXXXXXXXXXX/shelly-25-02/cmnd/POWER
          "on": "ON"
          "off": "OFF"
      Temperatur:
        type: number
        label: Temperatur
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/SENSOR
          transformationPattern:
            - JSONPATH:$.ANALOG.Temperature
          unit: °C
      Verbrach:
        type: number
        label: Verbrauch 1
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/SENSOR
          transformationPattern:
            - "JSONPATH:$.ENERGY.Power[0]"
          min: 0
          max: 2000
          unit: W
      VerbrauchGestern:
        type: number
        label: Verbrauch Gestern
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/SENSOR
          transformationPattern:
            - JSONPATH:$.ENERGY.Yesterday
          unit: kWh
      VerbrauchGesamt:
        type: number
        label: Verbrauch Gesamt
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/SENSOR
          transformationPattern:
            - JSONPATH:$.ENERGY.Total
          unit: kWh
      Verbrauch2:
        type: number
        label: Verbrauch Steckdose 2
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/SENSOR
          transformationPattern:
            - "JSONPATH:$.ENERGY.Power[1]"
          min: 0
          max: 2000
          unit: W
      VerbrauchHeute:
        type: number
        label: Verbrauch Heute
        config:
          stateTopic: iot/XXXXXXXXXXX/shelly-25-02/SENSOR
          transformationPattern:
            - JSONPATH:$.ENERGY.Today
          unit: kWh

2 Kommentare

  1. Pingback:openHAB - Geräte über 433MHz auslesen - Hoerli.NET

  2. Pingback:openHAB - Tasmota über MQTT einbinden - Hoerli.NET

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.