OpenHAB Shelly IoT Devices mittels MQTT einbinden
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:
- Shelly Plus H&T - Temperatur/Luftfeuchtigkeit mit Display
- Shelly Plus 1PM Mini - Lampenschaltung
- Shelly Plus 2PM - Rolladensteuerung
- Shelly Plus Plug S - Smarte Steckdose
- Weitere Shelly Devices findet ihr hier.
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: