Seite 1 von 1

openhab3 MQTT publishen

Verfasst: 15. Nov 2022 17:50
von EberhardK
Hallo, liebe Spezialisten.
Ich arbeite schon seit einigen Monaten mit Openhab3. Ich frage diverse Sensoren über MQTT ab und auch aus der Heizung (ETA Pelletheizung ohne MQTT) habe ich einige Parameter abrufen und grafisch darstellen können.
Mein Problem: ich möchte den Zustand der Saugturbine der Heizung abfragen und diesen Wert zum MQTT-Broker schicken.
Dazu habe ich ein Item (saug) erstellt, welches mir den Wert 950 (Turbine aus) bzw. 951 (Turbine ein) liefert.
Dann habe ich ein "Generic MQTT Thing" erstellt mit der "MQTT Broker Bridge". Dazu ein Channel mit dem "MQTT Command Topic" "vibra".
Weiterhin habe ich eine Rule erstellt: Wenn "saug" updated, dann soll auch "vibra" updaten. Der Wert kommt auch bei vibra an aber er wird nicht zum Broker unter dem Topic vibra geleitet (getestet mit mosquitto).
Als zweiten Versuch habe ich die Rule rausgenommen und "saug" direkt mit "vibra" verlinkt. Wert kommt an aber nicht zum Broker.
Dann habe ich mal aus Verzweiflung aus "vibra" ein Switch-Item gemacht und mit verschiedenen Zahlen für an und aus versehen. Wenn ich den Schalter betätige, kommen die entsprechenden Werte auch am Broker an.
Ich habe auch mehrmals die Dokumentation zu MQTT in Openhab gelesen und zu versucht zu verstehen. Die Beispieltexte scheinen sich dort auf Openhab2 zu beziehen. Nun stecke ich mit meinen Ideen fest. Ich hoffe, dass es nur ein Denkfehler von mir ist und die Lösung doch grafisch möglich ist.
Vielen Dank für eure Mühen.
Eberhard

Re: openhab3 MQTT publishen

Verfasst: 15. Nov 2022 21:14
von udo1toni
Es wäre gut gewesen, Du hättest konkrete Rules gepostet :) Auch wenn Du alles per UI erstellst, gibt es (bis auf die Items...) eine Code-Ansicht (sowohl Things als auch Rules), anhand derer Fortgeschrittene gut nachvollziehen können, was läuft (und wo potenziell Fehler sind).

Es gibt diverse Stellen, die du nicht explizit erläutert hast:
  • Wie ist das Thing definiert
  • wie ist der Channel definiert
  • Wie ist das Item definiert
  • Wie lautet der Befehl, den Du in der Rule verwendet hast

Re: openhab3 MQTT publishen

Verfasst: 16. Nov 2022 17:16
von EberhardK
Hallo udo1toni,
vielen Dank für die orientierenden Punkte.
Das Item "saug", das den Wert liefert:

Code: Alles auswählen

UID: http:url:4c9f92d31c
label: Heizung
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.86:8080/user/var
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  contentType: application/xml
  timeout: 3000
  bufferSize: 2048
channels:
  - id: Aussentemperatur
    channelTypeUID: http:number
    label: Aussentemperatur
    description: ""
    configuration:
      stateExtension: /120/10241/0/0/12197
      stateTransformation: XPATH:/*[name()='eta']
  - id: Kollektor
    channelTypeUID: http:number
    label: Kollektor
    description: ""
    configuration:
      stateExtension: /120/10221/0/0/12275
      stateTransformation: XPATH:/*[name()='eta']
  - id: Speicher_unten
    channelTypeUID: http:number
    label: Speicher_unten
    description: ""
    configuration:
      stateExtension: /120/10221/0/0/12781
      stateTransformation: XPATH:/*[name()='eta']
  - id: Speicher_oben
    channelTypeUID: http:number
    label: Speicher_oben
    description: ""
    configuration:
      stateExtension: /120/10601/0/0/13144
      stateTransformation: XPATH:/*[name()='eta']
  - id: Kollektorpumpe
    channelTypeUID: http:number
    label: Kollektorpumpe
    description: ""
    configuration:
      stateExtension: /120/10221/0/11142/0
      stateTransformation: XPATH:/*[name()='eta']
  - id: Abgas
    channelTypeUID: http:number
    label: Abgas
    description: ""
    configuration:
      stateExtension: /40/10021/0/0/12162
      stateTransformation: XPATH:/*[name()='eta']
  - id: Pelletlager
    channelTypeUID: http:number
    label: Pelletlager
    description: ""
    configuration:
      stateExtension: /40/10201/0/0/12015
      stateTransformation: XPATH:/*[name()='eta']
  - id: Pelletbehaelter
    channelTypeUID: http:number
    label: Pelletbehaelter
    description: ""
    configuration:
      stateExtension: /40/10021/0/0/12011
      stateTransformation: XPATH:/*[name()='eta']
  - id: Aschebox
    channelTypeUID: http:number
    label: Aschebox
    description: ""
    configuration:
      stateExtension: /40/10021/0/0/12013
      stateTransformation: XPATH:/*[name()='eta']
  - id: Speicher_mitte
    channelTypeUID: http:number
    label: Speicher_mitte
    description: ""
    configuration:
      stateExtension: /120/10601/0/0/13934
      stateTransformation: XPATH:/*[name()='eta']
  - id: Gesamtverbrauch
    channelTypeUID: http:number
    label: Gesamtverbrauch
    description: ""
    configuration:
      stateExtension: /40/10021/0/0/12016
      stateTransformation: XPATH:/*[name()='eta']
  - id: Saug
    channelTypeUID: http:number
    label: Saug
    description: ""
    configuration:
      stateExtension: /40/10021/0/11042/2001
      stateTransformation: XPATH:/*[name()='eta']
Das Item "vibra", welches den Wert publishen soll:

Code: Alles auswählen

UID: mqtt:topic:dac17a5dac:13d584210e
label: vibra
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:dac17a5dac
location: vibra
channels:
  - id: vibra
    channelTypeUID: mqtt:number
    label: vibra
    description: ""
    configuration:
      commandTopic: vibra
Die Rule, um den Wert von "saug" nach "vibra"transportiert:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Heizung_Saug
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      itemName: vibra_vibra
    type: core.ItemStateUpdateAction
In beiden Items erscheint der gewünschte Wert, nur bei der Abfrage des Topics "vibra" mit mosquitto_sub erscheint nichts.

Re: openhab3 MQTT publishen

Verfasst: 16. Nov 2022 23:49
von udo1toni
Ja, das ist kein Wunder, Du nutzt ItemStateUpdateAction, es muss aber ItemCommandAction verwendet werden. Du willst einen Befehl in Richtung mqtt senden, nicht den Status des Items ändern.

Re: openhab3 MQTT publishen

Verfasst: 17. Nov 2022 08:45
von EberhardK
Ich habe die Rule jetzt so geändert:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Heizung_Saug
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      itemName: vibra_vibra
    type: core.ItemCommandAction
in der Hoffnung, dass der Wert von saug zu vibra gesendet wird. Tut es aber nicht und bei mosquitto_sub im Topic "vibra" kommt auch nichts an.

Re: openhab3 MQTT publishen

Verfasst: 17. Nov 2022 12:27
von udo1toni
Ähm... das ist mir gestern gar nicht mehr aufgefallen, aber Du gibst ja gar keinen konkreten Befehl an.

Und das kannst Du auch gar nicht, weil Du ja den Wert übertragen willst.

Gehe ich recht in der Annahme, dass der Wert von Saug exakt so nach vibra übertragen werden soll, also ohne weitere Berechnungen?
Dann brauchst Du gar keine Rule. Stattdessen verlinkst Du beide Channel mit dem selben Item (z.B. Heizung_Saug) und gibst dabei bei dem Channel vibra als Profile "follow" an (Das Profile wird im Link gesetzt).

Re: openhab3 MQTT publishen

Verfasst: 17. Nov 2022 14:29
von EberhardK
Yeah!
Ich habe die Rule gelöscht, das Item "vibra" gelöscht und neu angelegt mit dem Link auf "Heizung_saug" und dem Profil "Folgen". Es hat sofort funktioniert. Nun kann ich dem Rüttler am Lager sagen (über einen Arduino), dass gerade gesaugt wird und er aktiv werden soll.
Du hast mir übrigens im KNX-Forum geholfen die Parameter aus meiner Eta-Heizung herauszukitzeln.
Ich war sehr zuversichtlich, dass du auch hier helfen kannst.
Vielen, vielen Dank für deine Hilfe.

Re: openhab3 MQTT publishen

Verfasst: 17. Nov 2022 21:06
von udo1toni
Immer gerne :)