OH3 + Shelly + MQTT: Was bei Channels eingeben?

Geflasht oder ungeflasht ...

Moderator: seppy

Antworten
tony.blue
Beiträge: 7
Registriert: 5. Mai 2021 23:52

OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von tony.blue »

Hallo,

ich kämpfe gerade mit der Installation von OH3 + Shelly2.5 + MQTT (Proxmox LXC mit Ubuntu 20.4).

Nach den Beschreibungen und Videos habe ich bisher folgendes gemacht:

1. Installation Mosquitto (https://neuendorf-online.de/posts/heima ... tallieren/)
2. OH3: Einstellungen - Other services - MQTT system broker connection - Broker Host: localhost
3. OH3: Things - "+" -
* Broker Hostname/IP: localhost
* Broker Port: 1883
* Username: mein_in_Mosquitto_festgelegter_User
* Passwort: mein_in_Mosquitto_festgelegtes_Passwort
-> Ergebnis: MQTT Broker erscheint unter Things als "online"
4. OH3: Things - "+" - MQTT Binding - Generic MQTT Thing (da Scan kein Gerät findet) - MQTT Broker - Create Thing
-> Ergebnis: Generic MQTT Thing erscheint unter Things als "online"

Nach den Beschreibungen müsste ich nun Channels hinzufügen. Wenn ich unter Things Generic MQTT Channels - Add a Channel - On/Off Switch auswähle erscheinen die Eingabefelder:

MQTT State Topic
MQTT Command Topic
Custom On/Open Value 1
Custom Off/Closed Value

Hier komme ich nicht mehr weiter, was hier einzugeben ist.

Wer kann mir denn hier "auf die Sprünge" helfen?


Vielen Dank!


Tony

Benutzeravatar
udo1toni
Beiträge: 13858
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von udo1toni »

Vergiss bitte den Quatsch mit dem System Broker. :) Du benötigst eine einfache Verbindung zu einem normalen Broker.

Dann legst Du mindestens ein generic Thing an (gewöhnlich aber für jedes Device ein Thing), im Thing wählst Du den vorher angelegten Broker aus der Liste aus.

Unterhalb des Thing legst Du Channel an. Dabei ist das commandTopic dasjenige, über das ein Steuerbefehl zum Device gesendet wird. Das stateTopic erhält die Rückmeldung.

Nehmen wir an, Du hast ein Gerät, welches mit Tasmota geflasht ist, dann sehen die Topics gewöhnlich so aus:

Code: Alles auswählen

cmnd/myDevice/POWER // Das Topic, um das Relais zu schalten
stat/myDevice/POWER // Das Topic, um den Zustand des Relais zu empfangen
Als Befehl und Rückmeldung verwendet Tasmota hier ON und OFF, das passt also schon. Tasmota kennt auch noch andere Befehle (z.B. TOGGLE zum Umschalten), im Zusammenhang mit openHAB wird aber nur ON und OFF gebraucht.

Den Switch Channel musst Du mit einem Switch Item verbinden, damit Du den Channel steuern kannst. openHAB erledigt das aber auf Wunsch für Dich.

Wenn Du mit mqtt arbeitest, empfiehlt es sich, einen Sniffer einzusetzen, beispielsweise mqtt.fx oder mqtt spy. Der Sniffer läuft auf einem PC (wahlweise kannst Du aber auch eine App für's Smartphone oder Tablet nehmen) und wird ebenfalls mit dem Broker verbunden. Der Sniffer ist also auch nur ein weiterer Client, der aber erlaubt, beliebige Topics zu abonnieren oder zu senden, genau wie auch der Payload frei gewählt werden kann. Damit kannst Du dann verfolgen, was auf der mqtt-Seite passiert oder auch gezielt Befehle senden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tony.blue
Beiträge: 7
Registriert: 5. Mai 2021 23:52

Re: OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von tony.blue »

udo1toni hat geschrieben: 12. Mai 2021 18:13 Vergiss bitte den Quatsch mit dem System Broker. :) Du benötigst eine einfache Verbindung zu einem normalen Broker.
Wie geschrieben habe ich Mosquitto installiert. Das müsste doch passen - oder?
udo1toni hat geschrieben: 12. Mai 2021 18:13 Unterhalb des Thing legst Du Channel an. Dabei ist das commandTopic dasjenige, über das ein Steuerbefehl zum Device gesendet wird. Das stateTopic erhält die Rückmeldung. Nehmen wir an, Du hast ein Gerät, welches mit Tasmota geflasht ist, dann sehen die Topics gewöhnlich so aus:

Code: Alles auswählen

cmnd/myDevice/POWER // Das Topic, um das Relais zu schalten
stat/myDevice/POWER // Das Topic, um den Zustand des Relais zu empfangen
Das ist genau mein Problem. Wie finde ich denn heraus, wie bei meinen Shelly2.5 und Shelly1 das cmnd/myDevice/POWER oder stat/myDevice/POWER lautet?

Vielen Dank!


Tony

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von PeterA »

Hi,

so sehen die MQTT Topics für den 2.5er aus:

Code: Alles auswählen

        Type rollershutter : Shellyswitch25_745118_roller   "Rolladen DG Flur"          [ stateTopic="shellies/shellyswitch25-745118/roller/0/pos", commandTopic="shellies/shellyswitch25-745118/roller/0/command/pos" ]
        Type        number : Shellyswitch25_745118_temp     "Shelly2501temp"            [ stateTopic="shellies/shellyswitch25-745118/temperature" ]
        Type        number : Shellyswitch25_745118_energy   "Shelly2501energy"          [ stateTopic="shellies/shellyswitch25-745118/relay/energy" ]
        Type        number : Shellyswitch25_745118_power    "Shelly2501power"           [ stateTopic="shellies/shellyswitch25-745118/relay/power" ]
- OpenHab 2.4
#PWRUP

tony.blue
Beiträge: 7
Registriert: 5. Mai 2021 23:52

Re: OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von tony.blue »

Vielen Dank. Vermutlich stelle ich mich blöd an.

Was gebe ich denn nun konkret bei den Parametern:

MQTT State Topic
MQTT Command Topic
Custom On/Open Value 1
Custom Off/Closed Value

in OH3 ein?

Gerade habe ich es so versucht:

Code: Alles auswählen

UID: mqtt:topic:a20a63889a:7e3f7c641c
label: Licht Ostzimmer
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:a20a63889a
channels:
  - id: Licht_Ostzimmer
    channelTypeUID: mqtt:switch
    label: Licht Ostzimmer
    description: ""
    configuration:
      commandTopic: shellies/shellyswitch25-84CCA8B13969/relay/0/command
      stateTopic: shellies/shellyswitch25-84CCA8B13969/relay/0
      off: off
      on: on
  - id: Licht_Ostzimmer_Stehlampe
    channelTypeUID: mqtt:switch
    label: Licht Ostzimmer Stehlampe
    description: ""
    configuration:
      commandTopic: shellyswitch25-84CCA8B13969/relay/1/command
      stateTopic: shellies/shellyswitch25-84CCA8B13969/relay/1
      off: off
      on: on
Ich erhalte damit Geräte, die online sind, der Shelly schaltet aber nichts.

Vielen Dank!


Tony

schossel
Beiträge: 1
Registriert: 23. Dez 2020 21:10

Re: OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von schossel »

Die ganzen Commands etc sind bei den Shellys beschrieben:
https://shelly-api-docs.shelly.cloud/#c ... t-commands

Ich habe hier als Beispiel eine Küchenlampe.

Code: Alles auswählen

Thing topic shelly25_Licht_Kueche "Shelly25 Licht Kueche" @ "EG" {
    Channels:
        Type switch : PowerSwitch1    [ stateTopic="shellies/shelly25_Licht_Kueche/relay/0" , commandTopic="shellies/shelly25_Licht_Kueche/relay/0/command", on="on", off="off" ]
        Type number : Power1          [ stateTopic="shellies/shelly25_Licht_Kueche/relay/0/power" ]
        Type switch : PowerSwitch2    [ stateTopic="shellies/shelly25_Licht_Kueche/relay/1" , commandTopic="shellies/shelly25_Licht_Kueche/relay/1/command", on="on", off="off" ]
        Type number : Power2          [ stateTopic="shellies/shelly25_Licht_Kueche/relay/1/power" ]
        Type number : Energy1         [ stateTopic="shellies/shelly25_Licht_Kueche/relay/0/energy", transformationPattern="JS:shelly_energy_kwh.js" ]
        Type number : Energy2         [ stateTopic="shellies/shelly25_Licht_Kueche/relay/1/energy", transformationPattern="JS:shelly_energy_kwh.js" ]
        Type number : Temperature     [ stateTopic="shellies/shelly25_Licht_Kueche/temperature" ]
        Type number : Overtemperature [ stateTopic="shellies/shelly25_Licht_Kueche/overtemperature" ]
        Type string : ID              [ stateTopic="shellies/shelly25_Licht_Kueche/announce", transformationPattern="JSONPATH:$.id"]
        Type string : IP              [ stateTopic="shellies/shelly25_Licht_Kueche/announce", transformationPattern="JSONPATH:$.ip"]
        Type string : FWVersion       [ stateTopic="shellies/shelly25_Licht_Kueche/announce",  transformationPattern="JSONPATH:$.fw_ver"]
        Type string : Devicestate     [ stateTopic="shellies/shelly25_Licht_Kueche/online" ]
      }

StromerIan
Beiträge: 2
Registriert: 7. Jun 2021 16:17

Re: OH3 + Shelly + MQTT: Was bei Channels eingeben?

Beitrag von StromerIan »

Ich hatte (als openHAB-gerade-Neueinsteiger) das gleiche Problem und bin bei der Suche nach einer Lösung hier über diesen Eintrag gestolpert. Inzwischen läufts bei mir, daher gebe ich mal meinen Senf dazu:

Ausgangssituation: 3 Shellies im Test (Shelly1, Shelly2.5, ShellyPlug). Nach erfolgter MQTT-Konfiguration am Shelly konnte ich den ShellyPlug in der MQTT-Client-App zwar fröhlich funken sehen, von Shelly1 und Shelly2.5 keine Spur. Ein Schalten der Shellies via zum Chanel verlinktem Item war ebenfalls nicht möglich: Die Client-App zeigte an, dass der Befehl raus ging, die Shellies schalteten nicht - auch nicht der Plug, der ja zumindest teilweise irgendwie da war. Auch auf das direkte Absetzen eines MQTT-Topics in der App gab's keine Reaktion.

Nur damit wir wissen, was auf meinem openHAB sonst noch läuft:

Installierte Bindings:
  • Astro Binding
  • HTTP Binding
  • MQTT Binding
  • NTP Binding
Installierte Transformationen:
  • JSONPath Transformation
  • Binary To JSON Transformationen
Hier exemplarisch meine Konfiguration für den Shelly1 als Schalter für die Deckenlampe im Schlafzimmer, Custom-MQTT-Prefix im Shelly auf "shelly_sz_dl" gesetzt (wobei ich "Prefix" als sehr ungünstig formuliert empfinde, ich hätte eher etwas a la "Identifier" erwartet).

Meine Channeleinstellungen im OpenHAB3-MQTT-Thing:

MQTT State Topic: shellies/shelly_sz_dl/relay/0
MQTT Command Topic: shellies/shelly_sz_dl/relay/0/command
Custom On/Open Value: on
Custom Off/Closed Value: off

QoS: At least once
Retained (Schieber auf an)
Outgoing Value Format : %s

Für den Reiter "Code" ergibt sich damit:

Code: Alles auswählen

UID: mqtt:topic:Local-MQTT:shelly_sz_dl
label: Schlafzimmer Decke
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:Local-MQTT
location: Schlafzimmer
channels:
    id: shelly_sz_dl
    channelTypeUID: mqtt:switch
    label: Schlafzimmer Decke
    description: ""
    configuration:
        retained: true
        postCommand: false
        qos: 1
        commandTopic: shellies/shelly_sz_dl/relay/0/command
        stateTopic: shellies/D4_DL01/relay/0
        off: off
        on: on
Link zu openHAB3-Item Switch:

Profil: Standard

Beim Shelly2.5 gibt's analog dazu einfach einen zweiten Channel mit "...relay/1..." statt "...relay/0...", der ShellyPlug funktioniert wie ein Shelly1 (andere Channels zu Stromverbrauch etc. mal beiseite gelassen).

Was hat nun meine drei Test-Shellies dazu überredet, doch noch im MQTT-Zirkus mit aufzutreten? Nun, zumindet meine drei Kandidaten verlangen nach jeder (!) Shelly-seitigen Konfiguration im Bereich MQTT einen Device-Reboot. Keine 10 Sekunden später sieht man sie fröhlich in der MQTT-Client-App funken und sie reagieren auf MQTT-Topics.

Edit: Typos korrigiert

Antworten