Seite 1 von 1

openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 18. Feb 2022 10:31
von goetz99
Hallo zusammen,

Bin frisch in OH3 eingestiegen, und habe mich einfacherweise an eine Konfig über die Oberfläche gehalten.
Meine Hardware:
Raspberry4 mit OpenHab und Mosquitto. Funktioniert
Eingerichteter und Installiert Zigbee Stick CC2531 mit zigbee2mqqt
Über mqtt (ESP87266) bekomm ich die Lichtstärke. (danach soll später über ein Script die Leuchte gedimmt werden)
Steuern will ich ein: Osram Zigbee 3.0 DALI CONV LI über Zigbee2Mqtt.

Schalten funktioniert 1A. Den Lux Wert habe ich auch im System.
Aber nun komme ich nach Tagen mit der Dimmung einfach nicht weiter.

Item Konfig im Channel fürs schalten:
Folgend:
MQTT Command Topic
zigbee2mqtt/DALI Deckenleuchte 1/set

Custom On/Open Value
ON
Custom OFF/Open Value
OFF


Konfig Channel und ITEM fürs Dimmen

Der mqtt Befehl lauet:
MQTT Command Topic

zigbee2mqtt/DALI Deckenleuchte 1/set

wenn ich mit MQTT.fx
{"brightness":156,"transition":3}
sende.
Funktioniert das auch.

Ich habe Channel mit Number Value angelegt.
Aber wie muss ich die Variable eintragen damit mit dem Befehl die Zahlen weiter gegeben werden?
Der dimmer kann von 0-255.
Es müsste in diesem Channel eine Varaible eingtragen werden?
Und übersetzt OH automatisch den Wert 0-255 zu 1-100%

Oder bin ich total auf dem Holzweg?

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 18. Feb 2022 13:46
von udo1toni
Herzlich willkommen im Forum!

Zuerst einmal ist es wichtig, wenn Du mit einer Konfiguration Probleme hast, konkret die Konfiguration zu zeigen, und nicht zu beschreiben, was Du konfiguriert hast.
Es gibt zwei verschiedene Möglichkeiten, die Anbuindung an openHAB zu konfigurieren, als Text oder über die UI. Ich gehe stark davon aus, dass Du über die Main UI konnfiguriert hast. Dann kannst Du einfach in der Thing-Konfiguration auf den rechten Karteireiter (Code) wechseln und den dort abgebildeten Code einfach über die Zwischenablage hier ins Forum kopieren. Da es sich um YAML Code handelt, sind die Indentation (Einrückungen) wichtig, deshalb ist es enorm wichtig, den Code hier im Forum auch mit Code Tags zu versehen. Einfach den Vollständigen Editor aufrufen und dort die Schaltfläche </> anklicken. Alternativ kannst Du die Tags auch einfach hinschreiben.

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 20. Feb 2022 17:36
von goetz99
Hallo,

vielen Dank für den herzlichen Empfang.
Ja ich habe das Thing über die MainUI konfiguriert.
Mit der vorhergehenden Thema dachte ich tatsächlich so wäre es einfacher zu verstehen was ich gemacht habe.

Code: Alles auswählen

UID: mqtt:topic:GoetzBalze:64652e9750
label: ZigBeeDaliDimmen
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:GoetzBalze
location: Büro Marvin
channels:
  - id: DimmungDali1
    channelTypeUID: mqtt:colorHSB
    label: Dimmung Deckenleuhcten
    description: ""
    configuration:
      commandTopic: zigbee2mqtt/DALI Deckenleuchte 1/get
      colorMode: XYY
Wenn ich jetzt nicht auf dem Holzweg bin muss das mqtt commando
zigbee2mqtt/DALI Deckenleuchte 1/set
{"brightness":156,"transition":3}
in die Konfiguration eintragen werden.
Da habe ich mich versucht zu helfen.
Leider reicht mein English für das Grße Buch von Openhab nicht aus.
Wenn es die Große Hilfe auch in Deutsch verfügbar wäre..... das wäre zu geil.

Mein Zigbee2MQTT Log zeigt beim ändern des dimm Status invalid message.
Ich verstehe nicht wie ich den JSON Code eintragen muss.
Weil wie im Code eingtragen habe ich die brightness auf 156 festgelegt.
Aber das muss ja von Openhab kommen.

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 20. Feb 2022 20:16
von udo1toni
goetz99 hat geschrieben: 20. Feb 2022 17:36 Wenn es die Große Hilfe auch in Deutsch verfügbar wäre...
Das Problem dabei: die Dokumentation wird vollautomatisch generiert. (aus den Sourcen). Und da die Maintainer explizit keine Übersetzung der Doku wünschen (es wurde/wird befürchtet, dass dann einzelne Bindings plötzlich nicht mehr international zur Verfügung stehen, weil nur auf deutsch/französisch/whatever), ist es auch nicht einfach, Änderungen mitzubekommen. Man bräuchte schon ein großes Team an Leuten, um eine solche Übersetzung der Doku allzeit aktuell zu halten.

Grundsätzlich gibt es bei mqtt immer zwei Topics, denn die Kommunikation findet gerichtet statt. Der Status (mutmaßlich das Topic mit get am Ende) gehört ins stateTopic. Die Steuerbefehle werden dann an set gesendet (das hast Du ja schon feststellen können...)
Jetzt wäre aber zuerst mal die Frage, handelt es sich nun um ein Color Gerät (also RGB Leuchte) oder um einen Dimmer? Es wäre schon wichtig, den korrekten Channeltypen zu verwenden..
Wenn ein spezielles Payload gesendet werden muss (JSON o.Ä.) muss der entsprechende String zusammengesetzt werden. Das geht über das Outgoing Value Format. Solltest Du diesen Parameter nicht sehen, müsstest Du oben rechts auf show advanced klicken :)
Dort kann nun ein String angegeben werden, mit einem passenden Platzhalter, der für den übermittelten Wert steht.
Da Du einen Faktor 2,55 benötigst, um aus dem Prozentwert einen 8-Bit-Wert zu machen, musst Du vermutlich noch eine Outgoing Value Transformation einfügen, und zwar JS (JavaScript). Das sieht dann so aus, dass Du eine Datei faktor255.js im Ordner /etc/openhab/transform/ anlegst. In dieser Datei landet ein Script:

Code: Alles auswählen

(function(percent){
    var value = percent * 255 / 100
    return value;
})(input)
Ich bin mir allerdings nicht zu 100% sicher, dass das Script so stimmt, ich mache nur wenig in JavaScript und muss da selbst immer suchen...

Weiter geht's, wenn wir die Transformation nutzen wollen, muss sie auch installiert sein. Wird gerne vergessen...

Und im Channel trägst Du bei Outgoing Value Transformation JS:faktor255.js ein.
Der Weg des Signals ist immer, zunächst wird der Wert transformiert, dann wird der über das Format angepasst (eigentlich logisch...).

Der erste Schritt wäre aber, das passende Format unter Outgoing Value Format einzutragen und zu testen. Der Dimmer wird dann zwar nur bis knapp 40% kommen, aber Du siehst schon mal, dass die Steuerbefehle ankommen.

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 2. Mär 2022 18:28
von Tamino
Mir ist die Logik mit der ich einen Json Payload in einen Openhab String umwandle auch noch nicht ganz klar...
Ich habe hier z.B. ein Switch Item bei dem ich für ON diesen Payload

Code: Alles auswählen

'{"channel": 0, "value": true}'
und für OFF diesen Payload senden muss.

Code: Alles auswählen

'{"channel": 0, "value": false}'
Wie müsste denn jetzt der String für Custom On/Open Value bzw. für Custom Off/Closed Value aussehen?
Und vor allem wie setzt er sich zusammen?
Bei einem Number Item habe ich folgende Jsonpath Expression erfolgreich zusammengebastelt:

Code: Alles auswählen

$..[?(@.channel=='1')].voltage
aber diese Logik (Filter) funktioniert hier leider nicht.

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 2. Mär 2022 18:30
von udo1toni
Es ist nicht hilfreich, den selben Post unter diverse Threads zu hängen. Wenn Du es nicht eindeutig zuordnen kannst, mach lieber einen neuen Thread auf.

Zu Deinem Problem: Über welches Binding möchtest Du die Payload senden?

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 2. Mär 2022 20:45
von Tamino
Ja sry, ich hatte erst den ersten Thread gefunden, fand aber diesen hier sinnvoller für meine Frage.
Das Ganze soll über das MQTT Binding ein Tinkerforge Quad Relais steuern.
Mit Mosquitto würde der funktionierende String so aussehen:

Code: Alles auswählen

mosquitto_pub -h localhost -t tinkerforge/request/industrial_quad_relay_v2_bricklet/<UID>/set_selected_value -m '{"channel": 0, "value": true}'

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 3. Mär 2022 17:19
von udo1toni
Mit mqtt ist das easy :)
Du brauchst das mqtt Addon sowie die jsonpath transformation.
Mosquitto läuft bereits?
Du benötigst ein MQTT Broker Thing (bitte nicht das System Broker Thing nutzen).
Darunter legst Du ein Thing für das Quad Relais an.
Da es sich um vier Relais handelt, benötigen wir (ohne weitere Spezialitäten) vier Channel, die im Prinzip bis auf ein Detail identisch sein können.

Es fehlt noch ein weiteres Topic, welches den aktuellen Status der Relais liefert, vermutlich wird das ein Topic für alle Relais gemeinsam sein. Die Sende-Seite müsste so aussehen (In Things-Datei-Notation):

Code: Alles auswählen

Bridge mqtt:broker:bridge "Mosquitto" [
    host="localhost",
    port=1883,
    clientID="openHAB2-2"
 ] {
     Thing topic tinkerquad_1 "Tinkerforge Quad 1" [
          ]{
        Channels:
            Type switch : ch1 "Channel 1" [ commandTopic="tinkerforge/request/industrial_quad_relay_v2_bricklet/<UID>/set_selected_value",
                                     formatBeforePublish='{"channel": 0, "value": %s}',
                                                      on="true",
                                                     off="false"
                                          ]
      }
            Type switch : ch2 "Channel 2" [ commandTopic="tinkerforge/request/industrial_quad_relay_v2_bricklet/<UID>/set_selected_value",
                                     formatBeforePublish='{"channel": 1, "value": %s}',
                                                      on="true",
                                                     off="false"
                                          ]
      }
            Type switch : ch3 "Channel 3" [ commandTopic="tinkerforge/request/industrial_quad_relay_v2_bricklet/<UID>/set_selected_value",
                                     formatBeforePublish='{"channel": 2, "value": %s}',
                                                      on="true",
                                                     off="false"
                                          ]
      }
            Type switch : ch4 "Channel 4" [ commandTopic="tinkerforge/request/industrial_quad_relay_v2_bricklet/<UID>/set_selected_value",
                                     formatBeforePublish='{"channel": 3, "value": %s}',
                                                      on="true",
                                                     off="false"
                                          ]
      }
}
Falls Du das Thing lieber über die UI anlegen willst, kannst Du das leicht aus der Text Definition ableiten. Um formatBeforeBublish setzen zu können, musst Du Show Advanced" anhaken (Der Parameter heißt dann Outgoing Value Format)
Ein Switch Item, welches mit dem Channel verlinkt ist, sendet den Befehl ON bzw. OFF. Daraus macht der Parameter Custom On- bzw. Custom Off Value true bzw. false. Je nachdem, mit welchem Channel das Item verlinkt ist, wird die Payload mit dem formatBeforePublish noch formatiert, so dass ein gültiges JSON Objekt entsteht. Gesendet wird jeweils an das selbe Topic.

Ankommend muss das dann entsprechend ähnlich gelöst werden. Es ist jeweils das stateTopic zu setzen, sowie das JSONPATH Ausdruck, um aus der Payload den Channel Status auszulesen (der hoffentlich ebenfalls als true bzw. false geliefert wird).

Die Zeilenumbrüche sind nicht zwingend notwendig und dienen hier nur der besseren Lesbarkeit.

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 5. Mär 2022 15:39
von Tamino
WOW, vielen Dank für die Mühe, das hat mir den Tag gerettet!

Re: openHab3 Grafische Channel Konfig für einen mqtt Dimmer

Verfasst: 5. Mär 2022 16:38
von udo1toni
Die Sache mit dem Status hast Du selbst hinbekommen?