mqtt:trigger | Channel nicht in einer Rule nutzbar?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von ./mf »

Ich habe ein Generic MQTT Thing erstellt und ein Channel davon soll ein Trigger sein. Im aktuellen Fall handelt es sich im eine Garagen-Tor Überwachung und Meldung. Der Trigger soll melden, wenn "jemand" das Tor betätigt hat.

Code: Alles auswählen

  - id: garage_trigger
    channelTypeUID: mqtt:trigger
    label: Garage Door (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
Dieser Payload wird von dem Device gefeuert.

Code: Alles auswählen

{"state": "TRIGGERED", "name": "Garage"}
Im Log kann ich sehen, dass der Trigger was macht. Allerdings kann ich diesen Channel nicht in einer Rule verwenden, um den Trigger auszuwerten.

Wieso kann ich diesen Trigger nicht in der Rule einsetzen, wie es auch bei den Dash-Buttons möglich ist?
von ./mf » 18. Jan 2022 16:19
Jetzt wird es spannend ... Ich habe das so aufgebau wie du beschrieben hast. Nachträglich meinen Trigger angepasst. Immer noch nichts.

Ich wollte dann einen Trigger neu erstellen, um zu sehen, wo ich evtl das "trigger:true" vergessen haben könnte. Das nicht nirgends einzustellen. Ich habe auch "mqtt:string" vs "mqtt:trigger" getestet, es klappte nicht.

Danach habe ich im Code nach und nach neue Channel erstellt und diese klappten alle in der Auswahl ... Dabei kam mir die Idee mit dem "_" Unterstrich. Ob das eine Auswirkung hat. Also habe ich "action_2" erstellt. Dann mit "_trigger" angehangen, alle wurden mir angeboten.

Nur mein "garage_trigger" wurde nie angeboten, aber im Log getriggert ...

Code: Alles auswählen

2022-01-18 16:06:41.670 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action_2 triggered TRIGGERED
2022-01-18 16:06:41.672 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action_2_trigger triggered TRIGGERED
2022-01-18 16:06:41.673 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action2 triggered TRIGGERED
2022-01-18 16:06:41.674 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action triggered TRIGGERED
2022-01-18 16:06:41.675 [INFO ] [.. ] - mqtt:topic:local:garage-pi:garage_trigger triggered TRIGGERED
Während ich diese Antwort schreibe, habe ich mal die vorhandene Channel-ID von "garage_trigger" auf "act" geändert. Dann wurde es mir angezeigt. Nach dem revidieren wieder auf "garage_trigger" wurde mir dies nun auch angezeigt.

OH-Channel-Trigger-2022-01-18_16-14.png

Und nun hätte ich gerne eine Erklärung dafür ... :mrgreen:


-----
Der Vollständigkeit halber die letzte aktuelle Channel Definition.

Code: Alles auswählen

  - id: garage_trigger
    channelTypeUID: mqtt:trigger
    label: Garage Door (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action
    channelTypeUID: mqtt:trigger
    label: Garage Door 2 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action2
    channelTypeUID: mqtt:trigger
    label: Garage Door 2 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action_2
    channelTypeUID: mqtt:trigger
    label: Garage Door 2 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action_2_trigger
    channelTypeUID: mqtt:trigger
    label: Garage Door 3 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
Gehe zur vollständigen Antwort
OpenHAB 3.2 im Docker auf Pi4-4GB

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von peter-pan »

Wenn ich das richtig verstehe ist nicht das Thing der Trigger, sondern der Channel bzw./oder das daran gebundene Item(event).
Schau mal hier. Vielleicht hilft dir das weiter.

Mit Log meinst du deinen MQTT-Sniffer ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von ./mf »

Mit Log meine ich, dass es im OH LOg auftaucht. Genau wie ein Eintrag eine Dash-Buttons, etc.. Ein Item wird für einen Trigger nicht benötigt. Das passiert alles über einen Channel. Zumindest ist das eben beim Dash-Button so...

Das hier soll in den Rules passieren.
https://www.openhab.org/docs/configurat ... d-triggers

Das ist hier im Log für einen DashButton und "meinen" MQTT Trigger

Code: Alles auswählen

2022-01-18 14:52:20.911 [INFO ] [..ChannelTriggeredEvent ] - amazondashbutton:dashbutton:xx-xx-xx-xx-xx-xx:press triggered PRESSED
2022-01-18 14:53:39.237 [INFO ] [..ChannelTriggeredEvent ] - mqtt:topic:local:garage-pi:garage_trigger triggered TRIGGERED
Ich kann aber letzteren nicht in der Rule einsetzen. Es wird mit kein Channel angezeigt. Aber wie gesagt... Im Log steht es drin.
OpenHAB 3.2 im Docker auf Pi4-4GB

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von peter-pan »

...also ich hab noch mal in "alten" Spielereien geschaut, da ich so etwas auch mal probiert habe. So wie ich das sehe meinst du einen Trigger-Channel ohne Item.

Da ich das ganze immer noch in Text-Files konfiguriere, hier ein Thing mit zwei Trigger-Channels:

Code: Alles auswählen

    Thing mqtt:topic:claudi:s2007 "Sonoff S20 07"  (mqtt:broker:claudi )     @ "MQTT2" {
    Channels:
        Type switch : power     "Power "                 [ stateTopic="stat/schaltdose07/POWER", commandTopic="cmnd/schaltdose07/POWER" ]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/schaltdose07/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type string : version   "Firmware Version    "   [ stateTopic="stat/schaltdose07/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type switch : reachable "Reachable"              [ stateTopic="tele/schaltdose07/LWT",transformationPattern="MAP:reachable.map" ]
        Type string : hardware  "Chip Set            "   [ stateTopic="stat/schaltdose07/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Hardware"]
        Type string : ipaddress "IP Address          "   [ stateTopic="stat/schaltdose07/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
        Type switch : powerx    "Power X"                [ stateTopic="stat/schaltdose07/POWER", trigger=true ]  // Trigger Channel; no need to define an item
        Type string : versionx  "Version X"              [ stateTopic="stat/schaltdose07/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version", trigger=true ]  // Trigger Channel; no need to define an item

    }
Die zwei letzten Channels sind die Trigger-Channels.

Das Ganze als Yaml-Code(nur die zwei letzten Channels):

Code: Alles auswählen

......
  - id: powerx
    channelTypeUID: mqtt:switch
    label: Power X
    description: null
    configuration:
      retained: false
      postCommand: false
      trigger: true
      formatBeforePublish: "%s"
      stateTopic: stat/schaltdose07/POWER
  - id: versionx
    channelTypeUID: mqtt:string
    label: Version X
    description: null
    configuration:
      retained: false
      postCommand: false
      trigger: true
      formatBeforePublish: "%s"
      stateTopic: stat/schaltdose07/STATUS2
      transformationPattern: JSONPATH:$.StatusFWR.Version
D.h. du musst deinen Channel noch mal überarbeiten. Channel-Type ist vermutlich "String". Aber was auch noch wichtig ist "trigger:true", also dieser Parameter muss aktiviert werden.

Jetzt noch die Regeln:

Code: Alles auswählen

//===============================================================================

rule "test Channel-Trigger s2007_power"
    when
            Channel 'mqtt:topic:claudi:s2007:powerx' triggered
    then
          logInfo("test_s2007_power", " Channel has triggerd : {} {}", receivedEvent, triggeringChannel)
end
//===============================================================================
rule "test Channel-Trigger s2007_version"
    when
            Channel 'mqtt:topic:claudi:s2007:versionx' triggered
    then
          logInfo("test_s2007_version", " Channel has triggerd : {} {}", receivedEvent, triggeringChannel)
end
//===============================================================================
und zu guter Letzt die Logs dazu in OH:

Code: Alles auswählen

2022-01-18 15:11:51.253 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test_channel_triggers.rules'
2022-01-18 15:13:06.920 [INFO ] [b.core.model.script.test_s2007_power] -  Channel has triggerd : ON mqtt:topic:claudi:s2007:powerx
2022-01-18 15:13:09.033 [INFO ] [b.core.model.script.test_s2007_power] -  Channel has triggerd : OFF mqtt:topic:claudi:s2007:powerx
2022-01-18 15:13:33.095 [INFO ] [core.model.script.test_s2007_version] -  Channel has triggerd : 10.1.0(tasmota) mqtt:topic:claudi:s2007:versionx
Viel Spass beim umsetzen. ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von ./mf »

Jetzt wird es spannend ... Ich habe das so aufgebau wie du beschrieben hast. Nachträglich meinen Trigger angepasst. Immer noch nichts.

Ich wollte dann einen Trigger neu erstellen, um zu sehen, wo ich evtl das "trigger:true" vergessen haben könnte. Das nicht nirgends einzustellen. Ich habe auch "mqtt:string" vs "mqtt:trigger" getestet, es klappte nicht.

Danach habe ich im Code nach und nach neue Channel erstellt und diese klappten alle in der Auswahl ... Dabei kam mir die Idee mit dem "_" Unterstrich. Ob das eine Auswirkung hat. Also habe ich "action_2" erstellt. Dann mit "_trigger" angehangen, alle wurden mir angeboten.

Nur mein "garage_trigger" wurde nie angeboten, aber im Log getriggert ...

Code: Alles auswählen

2022-01-18 16:06:41.670 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action_2 triggered TRIGGERED
2022-01-18 16:06:41.672 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action_2_trigger triggered TRIGGERED
2022-01-18 16:06:41.673 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action2 triggered TRIGGERED
2022-01-18 16:06:41.674 [INFO ] [.. ] - mqtt:topic:local:garage-pi:action triggered TRIGGERED
2022-01-18 16:06:41.675 [INFO ] [.. ] - mqtt:topic:local:garage-pi:garage_trigger triggered TRIGGERED
Während ich diese Antwort schreibe, habe ich mal die vorhandene Channel-ID von "garage_trigger" auf "act" geändert. Dann wurde es mir angezeigt. Nach dem revidieren wieder auf "garage_trigger" wurde mir dies nun auch angezeigt.

OH-Channel-Trigger-2022-01-18_16-14.png

Und nun hätte ich gerne eine Erklärung dafür ... :mrgreen:


-----
Der Vollständigkeit halber die letzte aktuelle Channel Definition.

Code: Alles auswählen

  - id: garage_trigger
    channelTypeUID: mqtt:trigger
    label: Garage Door (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action
    channelTypeUID: mqtt:trigger
    label: Garage Door 2 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action2
    channelTypeUID: mqtt:trigger
    label: Garage Door 2 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action_2
    channelTypeUID: mqtt:trigger
    label: Garage Door 2 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
  - id: action_2_trigger
    channelTypeUID: mqtt:trigger
    label: Garage Door 3 (Trigger)
    description: null
    configuration:
      stateTopic: pi3/pin/23
      transformationPattern: JSONPATH:$.state
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
OpenHAB 3.2 im Docker auf Pi4-4GB

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von ./mf »

Noch eine Ergänzung. Ich habe einen IKEA Zigbee Dimmer auch mit action und click als Trigger Channel eingebunden. Die wurden mir, ohne weiteres zutun, direkt angezeigt. Dies hatte ich bei diversen Tests vorhin gehen. Dies war auch mit der Grund warum ich die neuen Channel angelegt habe ....
OpenHAB 3.2 im Docker auf Pi4-4GB

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

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von udo1toni »

Nun ja, dann hat sich openHAB da mal verschluckt. Nicht schön, kommt aber vor. der Verschlucker tritt aber nur im Rahmen von Änderungen auf und betrifft ausschließlich Channel oder Items, die geändert wurden. Soll heißen, wenn's mal funktioniert, musst Du keine Angst haben, dass es "übermorgen" nicht mehr funktioniert...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von ./mf »

Danke Udo für die beruhigenden Worte. :)

Aber schon krass, was man dafür zeitlich investiert hatte, um einen nicht vorhandenen Fehler zu suchen und nur zufällig zu lösen. :-D
OpenHAB 3.2 im Docker auf Pi4-4GB

Benutzeravatar
peter-pan
Beiträge: 2568
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von peter-pan »

Ich muss da noch mal was klarstellen. Ich hab das natürlich alles mit Text-Files gebastelt und da scheint OH3 doch etwas anders zu ticken als bei der Arbeit mit der MainUI.

Ich hab ein Thing/Channel mal über die MainUI angelegt. Dabei habe ich dann festgestellt, dass der Yaml-Code für den Trigger-Channel so aussieht, wie du ihn angelegt hast.

Code: Alles auswählen

UID: mqtt:topic:claudi:testMQTT
label: Generic MQTT Thing
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:claudi
channels:
  - id: testChannel
    channelTypeUID: mqtt:trigger
    label: testTrigger
    description: ""
    configuration:
      stateTopic: stat/schaltdose07/STATUS2
      transformationPattern: JSONPATH:$.StatusFWR.Version
Eine Test-Regel dazu, allerdings in wieder in einer textbasierten DSL-Rule

Code: Alles auswählen

rule "test Channel-Trigger test_version"
    when
            Channel 'mqtt:topic:claudi:testMQTT:testChannel' triggered
    then
          logInfo("test_s2007_version", " Channel has triggerd : {} {}", receivedEvent, triggeringChannel)
end
...hat auch funktioniert.
Eine Regel über die MainUI anzulegen hab ich irgendwie gar nicht "auf dem Schirm" gehabt. Das werde ich mir mal auf meine ToDo-Liste setzen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

Re: mqtt:trigger | Channel nicht in einer Rule nutzbar?

Beitrag von ./mf »

peter-pan hat geschrieben: 19. Jan 2022 00:08 Ich muss da noch mal was klarstellen. Ich hab das natürlich alles mit Text-Files gebastelt und da scheint OH3 doch etwas anders zu ticken als bei der Arbeit mit der MainUI.
Ich habe bisher auch allen in Textfiles gemacht. Aber irgendwo gelesen, dass es gerade ab/mit OH3 besser ist, es in der MainUI zu machen. Zumal man dort größtenteils auch über die Code-Felder gehen kann, um gewisse Dinge zu beschleunigen. Nur halt nicht bei den Items.
peter-pan hat geschrieben: 19. Jan 2022 00:08 Das werde ich mir mal auf meine ToDo-Liste setzen.
Das ist im Endeffekt 1:1 (fast) identisch wie mit einem Textfile, was die WHEN Sektion betrifft.

Bei THEN kannst du wählen, ob du Items von der Rule aus direkt ansteuern und/oder ein/mehrere Script(e) laufen lassen willst. Du kannst hier sowohl ECMAScript als auch (klassische) DSL-Rule-Scripts verwenden. Du kann auch alles miteinander kombinieren.

Zusätzlich kannst du in der MainUI auch bei der Rule definieren, wann sie "nicht" stattfinden soll. Zb reagiere auf alle Lichtschalter, außer Licht-1 wurde betätigt. Ich meine, dass konnte man in dieser Form in Text-Files nicht in dieser Form abbilden, um bedarf extra Code zur Filterung.
OpenHAB 3.2 im Docker auf Pi4-4GB

Antworten