OpenHAB Shelly IoT Devices mittels MQTT einbinden

Aus Laub-Home Wiki

Wer nicht auf das super funktionierende Shelly Binding unter openHAB angewiesen sein möchte, kann die Shelly IoT Devices auch wunderbar mittels MQTT einbinden. Dafür benötigt man einen laufenden MQTT Broker, der von den Shelly Devices und openHAB erreichbar ist. Mittels MQTT lassen sich dann nicht nur die Werte von den Shelly Geräten auslesen (Temperatur, Luftfeuchtigkeit, Batterieladund, etc.), sondern auch Schalter bedienen. Ich gehe hier auf zwei Beispiele ein: Shelly Plus 1PM Mini - zur Lampenschaltung und Shelly Plus H&T - zur Temperatur / Luftfeuchtigkeit Messung.

Vorraussetzungen

Um das Tutorial hier zu nutzen, braucht ihr ein lauffähiges openHAB mit einem MQTT Broker, der bereits als openHAB Thing konfiguriert ist. Eine Anleitung findet ihr hier:

Und natürlich ein Shelly Device, zum Beispiel:

Die Shelly Devices sollten natürlich bereits eingebaut, angeschlossen und ins Netzwerk integriert sein. Hilfreich hierzu ist die Shelly Mobile App, mit der sich alle Geräte einfach einbinden und konfigurieren lassen.

Konfiguration des Shelly Devices

Es gibt zwei Wege die Shelly Geräte als MQTT Device zu konfigurieren, einmal per Mobile App, oder über das WebInterface. Beides funktioniert sehr gut. Bei Batterie betriebenen Devices würde ich die Mobile App empfehlen, da diese die Konfiguration an das Device übergibt, wenn es das nächste Mal aufwacht.

Mobile App

Hierfür öffnet ihr einfach die Mobile App auf eurem Smartphone und sucht das gewünschte Device. Hier findet ihr unter den Web-Einstellungen (Weltkugel) den Reiter MQTT.

  • Hier setzen wir zuerst MQTT auf Enable
  • Wichtig ist, das Generic status update over MQTT aktiviert wird, das benötigt openHAB
  • Falls ihr eine Verschlüsselte MQTT Verbindung herstellen möchtet, SSL connectivity an
  • Dann stellt den MQTT Prefix ein, unter dem das Device seine Daten "ablegt"
  • als nächstes müsst ihr die IP oder besser den FQDN des MQTT Brokers inkl. Port Nummer eintragen (mqtt_fqdn:port)
  • nun kommt die unique ID des MQTT Clients. Hier am besten den DeviceName eingeben
  • Dann noch falls benötigt Username und Passwort.

Dann das Setup speichern. Aktiviert wird es dann nach einem Device Reboot. Wenn ihr dann wieder auf die Einstellungsseite wechselt, sollte bei MQTT wie im Screenshot ein grün hinterlegtes Connected zu sehen sein.

Webinterface

Hierzu verbindet ihr euch mit dem Webinterface des Gerätes mit einem beliebigen Browser, entweder mit der IP oder dem FQDN.

Dort findet ihr unter Settings --> MQTT die Einstellmöglichkeit der MQTT Verbindung.

  • Enable MQTT network anhaken
  • Falls gewünscht die Verschlüsselung aktivieren (TLS no valdiation - bei SelfSignedCerts)
  • Dann stellt den MQTT Prefix ein, unter dem das Device seine Daten "ablegt"
  • Enable MQTT Control anhaken (um das Licht an und aus zu machen)
  • Generic status update over MQTT (braucht openHAB)
  • Dann zum Schluss die Verbindung zum MQTT Broker, FQDN/IP, Client ID (am besten den DeviceName) und Benutzername / Passwort, falls gewünscht.
  • Dann speichern und einmal das Device Neustarten.

Check mit MQTT Explorer

Zum Beispiel mit dem MQTT Explorer könnt ihr nun nachsehen, ob es Daten an den MQTT schickt. Bei Batteriebetriebenen Geräten solltet ihr vermutlich erst einmal nur den online Status sehen. Ihr könnt bei einem Switch Device einfach via App an und aus schalten, dann sollten alle möglichen Daten im MQTT Explorer zu sehen sein:

Installation JSONPath Transformation Addon

Um die Daten in openHAB auszulesen wird das JSONPath Transformation Addon benötigt. Dieses findet ihr mittels der Suche im Addons Bereich. Einfach suchen und installieren!

Erstellen eines MQTT Generic Thing

Nachdem nun das gewünschte Gerät seine Daten an den MQTT Broker schickt, können wir nun für das Gerät ein MQTT Generic Thing anlegen. Mein erstes Beispiel hier ist für ein Shelly Plus H&T, von dem ich die Temperatur, die Luftfeuchtigkeit und den Batterieladezustand auslesen möchte.

Als Voraussetzung hierfür gilt ein bereits in openHAB eingerichteter MQTT Broker als Bridge.

Um das Thing anzulegen gehen wir nun in openHAB unter Einstellungen --> Things und klicken auf den + (add) Button. Im darauffolgenden Menü wählen wir das MQTT Binding aus. Dann Generic MQTT Thing.

Shelly Plus H&T Thing Konfiguration

Hier Konfigurieren wir zunächst den Header:

  • Unique ID - am besten den Shelly Device Namen (hier: shelly-ht-gz)
  • Label - am besten welches Gerät und den Standort (hier: Shelly Plus H&T Gästezimmer)
  • Location - ich vergebe hier immer den Hersteller, kann aber auch leer bleiben

Nun wählen wir die MQTT Bridge aus:

  • Parent Bridge --> Bridge (wählt hier euren vorher konfigurierten MQTT Broker aus)

Unter Show advanced, kann man noch einrichten, wann das Thing den online status bekommt und wann es offline geht. Dies ist bei den Batterie betriebenen Geräten nicht zu empfehlen, da diese immer nur kurz online gehen, deshalb lasse ich es hier leer. Ich gehe weiter unten beim anbinden des Shelly 1PM mini darauf ein, da es dort Sinn macht.

Nun speichern wir das Ganze ab:

  • Create Thing

Nachdem wir nun ein Thing erstellt haben, müssen wir noch die Channels einrichten. Dafür gehen wir wieder unter Einstellungen --> Things und suchen unser erstelltes Thing, öffnen dieses und wechseln in den Reiter der Channels. Dort klicken wir auf Add Channel. Nun könnt ihr für alle Werte, die euch interessieren Channels konfigurieren. Ich gehe hier auf ein paar Beispiele ein.

Temperatur Channel

  • Channel Identifier: Temperature
  • Label: Temperature
  • Description: Temperature in Celsius
  • Channel type: Number Value
  • Show advanced: enable
  • MQTT State Topic: shelly/shelly-ht-gz/status/temperature:0
  • Unit Of Measurement: °C
  • Incoming Value Transformations: JSONPATH:$.tC

Zum speichern dann auf create klicken.

Luftfeuchtigkeit Channel

  • Channel Identifier: Humidity
  • Label: Humidity
  • Description: Humidity in %
  • Channel type: Number Value
  • Show advanced: enable
  • MQTT State Topic: shelly/shelly-ht-gz/status/humidity:0
  • Unit Of Measurement: %
  • Incoming Value Transformations: JSONPATH:$.rh

Zum speichern dann auf create klicken.

Batterieladung Channel

  • Channel Identifier: Batteryvalue
  • Label: Battery Value
  • Description: Battery Value in %
  • Channel type: Number Value
  • Show advanced: enable
  • MQTT State Topic: shelly/shelly-ht-gz/status/devicepower:0
  • Unit Of Measurement: %
  • Incoming Value Transformations: JSONPATH:$.battery.percent

Zum speichern dann auf create klicken.

Das Ergebnis sollte dann so aussehen:

Copy and Paste Code:

Achtung bei den UIDs! euer Broker hat sicher einen andere!

UID: mqtt:topic:09000f9f:shelly-ht-gz
label: Shelly Plus H&T Gästezimmer
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:09000f9f
location: Shelly
channels:
  - id: Temperature
    channelTypeUID: mqtt:number
    label: Temperature
    description: Temperature in Celsius
    configuration:
      stateTopic: shelly/shelly-ht-gz/status/temperature:0
      transformationPattern: JSONPATH:$.tC
      unit: °C
  - id: Humidity
    channelTypeUID: mqtt:number
    label: Humidity
    description: Humidity in %
    configuration:
      transformationPattern: JSONPATH:$.rh
      stateTopic: shelly/shelly-ht-gz/status/humidity:0
      unit: "%"
  - id: Batteryvalue
    channelTypeUID: mqtt:number
    label: Battery Value
    description: Battery Value in %
    configuration:
      stateTopic: shelly/shelly-ht-gz/status/devicepower:0
      unit: "%"
      transformationPattern: JSONPATH:$.battery.percent

Shelly Plus 1PM mini Thing Konfiguration

Hierfür gehen wir genauso vor wie beim Shelly Plus H&T. Wir legen ein Generic MQTT Thing an.

  • Unique ID - am besten den Shelly Device Namen (hier: shelly-dl-kc)
  • Label - am besten welches Gerät und den Standort (hier: Shelly Plus 1PM mini Küche)
  • Location - ich vergebe hier immer den Hersteller, kann aber auch leer bleiben

Nun wählen wir die MQTT Bridge aus:

  • Parent Bridge --> Bridge (wählt hier euren vorher konfigurierten MQTT Broker aus)

Nun aktivieren wir hier den advanced Bereich (show advanced) um dem Thing Online Status zu konfigurieren.

  • Availability Topic: shelly/shelly-dl-kc/online
  • Device Available Payload: true
  • Device Unavailable Payload: false

Dann zum Speichern auf Create Thing klicken!

Bevor wir nun hier die Channels konfigurieren, müssen wir eine MAP Transformation anlegen, damit unser Thing auch Updates durch den Lichtschalter, oder das Steuern aus der Mobile App heraus mitbekommt.

MAP Transformation anlegen

Hierfür gehen wir unter openHAB nach Einstellungen --> Transfromations. Dort legen wir eine neue Transformation MAP names shellystate an:

true=on
false=off

Dann speichern wir das Ganze ab.

Betrieb Channel (on / off)

Nun gehen wir wieder unter den Things, zu unserem gerade erstellten Thing und gehen dort in den Reiter Channels. Unter Add Channel konfigurieren wir nun den Switch:

  • Channel Identifier: Betrieb
  • Label: Betrieb
  • Description: Betrieb (on/off)
  • Channel type: On/Off Switch
  • Show advanced: enable
  • MQTT State Topic: shelly/shelly-dl-kc/status/switch:0
  • MQTT Command Topic: shelly/shelly-dl-kc/command/switch:0
  • Custom On/Open Value: true
  • Custom Off/Closed Value: false
  • Incoming Value Transformations: JSONPATH:$.output
  • Outgoing Value Transformation: MAP:config:map:shellystate

Stromverbrauch Channel (Watt)

Nun legen wir noch einen Channel für den Stromverbrauch an:

  • Channel Identifier: Power
  • Label: Power
  • Description: Power in Watt
  • Channel type: Number Value
  • Show advanced: enable
  • MQTT State Topic: shelly/shelly-dl-kc/status/switch:0
  • Unit Of Measurement: W
  • Incoming Value Transformations: JSONPATH:$.apower

Copy and Paste Code

Achtung bei den UIDs! euer Broker hat sicher einen andere!

UID: mqtt:topic:09000f9f:shelly-dl-kc
label: Shelly Plus 1PM mini Küche
thingTypeUID: mqtt:topic
configuration:
  payloadNotAvailable: "false"
  availabilityTopic: shelly/shelly-dl-kc/online
  payloadAvailable: "true"
bridgeUID: mqtt:broker:09000f9f
location: Shelly
channels:
  - id: Betrieb
    channelTypeUID: mqtt:switch
    label: Betrieb
    description: Betrieb (on/off)
    configuration:
      commandTopic: shelly/shelly-dl-kc/command/switch:0
      transformationPatternOut: MAP:config:map:shellystate
      stateTopic: shelly/shelly-dl-kc/status/switch:0
      transformationPattern: JSONPATH:$.output
      off: "false"
      on: "true"
  - id: Power
    channelTypeUID: mqtt:number
    label: Power
    description: Power in Watt
    configuration:
      stateTopic: shelly/shelly-dl-kc/status/switch:0
      transformationPattern: JSONPATH:$.apower
      unit: W

Das Ergebnis sieht dann so aus:

Nun können die dazugehörigen ITEMS angelegt werden.

Anlegen der Items

Nun können wir die Items in openHAB anlegen. Der für mich beste Weg ist, im Model, unter der gewünschten Location einfach Create Equipment from Thing auszuwählen.

Dann dort einfach das vorher angelegte Thing auswählen und konfigurieren, welche Items man haben möchte. Hier als Beispiel der oben angelegte Shelly Plus 1PM mini:

Und das Ganze weiter unten mit Add to Model abschließen.

Das Ergebnis sollte dann so aussehen: