Shelly MQTT Transform MAP funktioniert nicht

Geflasht oder ungeflasht ...

Moderator: seppy

Antworten
papet
Beiträge: 21
Registriert: 4. Jan 2024 08:48
Answers: 0

Shelly MQTT Transform MAP funktioniert nicht

Beitrag von papet »

Ich versuche eine Shelly 1 Mini Gen3 mit MQTT einzubinden.
Dazu habe ich folgenden Channel konfiguriert.

Code: Alles auswählen

UID: mqtt:topic:82898c0db2:GAR_GAR_TUER
label: Garten Gartentuer (Shelly mini1)
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:82898c0db2
location: Garten
channels:
  - id: GAR_GARTUER_SWITCH
    channelTypeUID: mqtt:switch
    label: Garten Gartentuer
    description: ""
    configuration:
      postCommand: true
      transformationPatternOut: MAP:false_true.map
      qos: 1
      formatBeforePublish: "%s"
      commandTopic: shelly1minig3-gartentuer/command/switch:0
      stateTopic: shelly1minig3-gartentuer/status/switch:0
      transformationPattern: JSONPATH:$.output
      off: "false"
      on: "true"
Das file false_true.map steht im Verzeichnis openHAB-conf/transform und hat folgenden Inhalt:
true=on
false=off

Wenn ich mir das mit dem MQTT Explorer anschaue, wird jedoch Command Switch:0=true bzw false anstatt on und off geschickt.
Daher vermute ich, das die Transformation nicht funktioniert. Was mache ich falsch?

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

Re: Shelly MQTT Transform MAP funktioniert nicht

Beitrag von udo1toni »

Der Shelly ist ein exzellentes Beispiel, wie man als Entwickler (bei Shelly) etwas nachhaltig kaputt machen kann :)

Geliefert wird für den Status true oder false, als Befehl wird jedoch on oder off erwartet.

Geht aber trotzdem, ist halt nur etwas umständlich:

Code: Alles auswählen

UID: mqtt:topic:82898c0db2:GAR_GAR_TUER
label: Garten Gartentuer (Shelly mini1)
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:82898c0db2
location: Garten
channels:
  - id: GAR_GARTUER_SWITCH
    channelTypeUID: mqtt:switch
    label: Garten Gartentuer
    description: ""
    configuration:
      qos: 1
      commandTopic: shelly1minig3-gartentuer/command/switch:0
      stateTopic: shelly1minig3-gartentuer/status/switch:0
      transformationPattern: JSONPATH:$.output∩MAP:false_true.map
      off: "off"
      on: "on"
Ein ankommendes stateTopic wird zunächst mit JSON decodiert, im Anschluss wird es durch das Mapping geschickt (dabei wird aus true on und aus false off).
Zum Abschluss wird das Ergebnis dieser Operation über die Substitution der beiden angegebenen Parameter on und off ersetzt, wobei der on-Wert mit ON ersetzt wird und der off-Wert mit OFF. also aus {"output":true} wird über das TransformataionPattern zunächst true, dann über das Mapping on und schließlich durch die Ersetzung ON.

In der Gegenrichtung wird aus ON der Wert on, welcher dann ans commandTopic gesendet wird. Da der Wert nicht weiter formatiert werden muss, braucht es auch keine weiteren Parameter (wie z.B. formatBeforePublish)

Das Zeichen ∩ findest Du im Hilfstext zum Transformation Pattern, im englischen heißt es korrekt Intersection, leider hat Microsoft das falsch eingedeutscht, mit "Durchschnitt", statt "Schnittmenge" ;) In der Windows Zeichentabelle kannst Du das Zeichen also nur unter dem falschen Namen finden :)

Nur der Vollständigkeit halber: sowohl JSONPATH als auch MAP müssen als Transformation Service installiert sein.
Die Namenskonventionen in openHAB empfehlen CamelCase oder auch Snake_Case (also z.B. nicht GAR_GAR_TUER sondern garGarTuer oder gar_Gar_Tuer)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

papet
Beiträge: 21
Registriert: 4. Jan 2024 08:48
Answers: 0

Re: Shelly MQTT Transform MAP funktioniert nicht

Beitrag von papet »

Hallo Udo,

vielen Dank. Jetzt funktioniert es prima.

Antworten