OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Mauricio
Beiträge: 2
Registriert: 1. Jan 2021 10:27
Answers: 0

OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Beitrag von Mauricio »

Hallo zusammen und ein frohes neues Jahr!

Ich bin ganz neu in die Welt von OH eingestiegen und habe mir ein kleines Testsystem aufgebaut:

-OH3 auf Raspi4
-ESPeasy auf NodeMCU mit:
-LED
-Bewegungsmelder
-BMP280

Die Daten des Sensors kann ich problemlos per mqtt in OH auslesen. Die LED kann ich auch per Switch aus OH raus steuern (GPIO,14,1 in ESPeasy_1/cmd). Allerdings reagiert der Switch in OH nicht auf Änderungen von ausserhalb. Wenn ich z.B. mit mqtt.fx die LED einschalte, ändert sich der Switch nicht, obwohl die Statusänderung auch als mqtt-Nachricht rausgeht. Dazu habe ich mir einen Dummyswitch angelegt der seinen State in ESPeasy_1/LED/State veröffentlicht.
Bei dem Bewegungsmelder ist es genau das selbe, da hab ich in OH einen Switch angelegt der auf ESPeasy_1/beweg/State hören soll. Aber da wird mir nur NULL angezeigt.

Hat einer von euch eine Idee woran das liegen könnte?

Hier ist noch der Code von meinem ESPeasy-Thing:

Code: Alles auswählen

UID: mqtt:topic:Mosquitto:ESPeasy_buero
label: ESPeasy
thingTypeUID: mqtt:topic
configuration:
  availabilityTopic: ESPeasy_1/status/LWT
  payloadAvailable: Connected
bridgeUID: mqtt:systemBroker:Mosquitto
location: Büro
channels:
  - id: Bewegung
    channelTypeUID: mqtt:switch
    label: Bewegungssensor
    description: ""
    configuration:
      stateTopic: ESPeasy_1/beweg/State
      postCommand: false
  - id: bmp280temp
    channelTypeUID: mqtt:number
    label: Temp
    description: ""
    configuration:
      stateTopic: ESPeasy_1/bmp280/Temp
      max: 50
      min: -40
  - id: LED
    channelTypeUID: mqtt:switch
    label: led
    description: ""
    configuration:
      commandTopic: ESPeasy_1/cmd
      postCommand: false
      stateTopic: ESPeasy_1/LED/State
      off: GPIO,14,0
      on: GPIO,14,1

Benutzeravatar
bernd180356
Beiträge: 2
Registriert: 31. Dez 2020 20:42
Answers: 0

Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Beitrag von bernd180356 »

Ich würde mal dieses Transformations Binding installieren !
Ist unter Addons - Transformation zu finden !

- Jinja Transformation

Vielleicht klappt s dann !
openHAB3 läuft auf einem Intel NUC i3 mit Proxmox.

Stachi
Beiträge: 125
Registriert: 8. Dez 2020 19:29
Answers: 0

Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Beitrag von Stachi »

Groß/Kleinschreibung beachtet? OH ist da sehr empfindlich [emoji6]

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

Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Beitrag von peter-pan »

Da ich nur noch Tasmota flashe, weiss ich nicht mehr genau, wie ESPEasy da tickt, aber könnte es sein, dass das Problem an der Switch-Definition liegt.
Lass mal das "GPIO,14, 0" und "GPIO,14, 1" weg. In diesem Zusammenhang wäre auch noch deine Item-Definition interressant.

Zum Vergleich mal ein Thing von einem ESP32 in Code-Syntax:

Code: Alles auswählen

UID: mqtt:topic:vera:esp3201
label: ESP32 01
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:vera
location: MQTT2
channels:
  - id: relay1
    channelTypeUID: mqtt:switch
    label: Relay 1
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: cmnd/esp32_01/POWER1
      stateTopic: stat/esp32_01/POWER1
      off: "0"
      on: "1"
  - id: relay2
    channelTypeUID: mqtt:switch
    label: Relay 2
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: cmnd/esp32_01/POWER2
      stateTopic: stat/esp32_01/POWER2
      off: "0"
      on: "1"
  - id: relay3
    channelTypeUID: mqtt:switch
    label: Relay 3
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: cmnd/esp32_01/POWER3
      stateTopic: stat/esp32_01/POWER3
      off: "0"
      on: "1"
  - id: relay4
    channelTypeUID: mqtt:switch
    label: Relay 4
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: cmnd/esp32_01/POWER4
      stateTopic: stat/esp32_01/POWER4
      off: "0"
      on: "1"
  - id: relay5
    channelTypeUID: mqtt:switch
    label: Relay 5
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: cmnd/esp32_01/POWER5
      stateTopic: stat/esp32_01/POWER5
      off: "0"
      on: "1"
  - id: rssi
    channelTypeUID: mqtt:number
    label: WiFi Signal Strength
    description: null
    configuration:
      retained: false
      postCommand: false
      step: 1
      formatBeforePublish: "%s"
      stateTopic: tele/esp32_01/STATE
      transformationPattern: JSONPATH:$.Wifi.RSSI
  - id: version
    channelTypeUID: mqtt:string
    label: "Firmware Version    "
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      stateTopic: stat/esp32_01/STATUS2
      transformationPattern: JSONPATH:$.StatusFWR.Version
  - id: reachable
    channelTypeUID: mqtt:switch
    label: Reachable
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      stateTopic: tele/esp32_01/LWT
      transformationPattern: MAP:reachable.map
      off: "0"
      on: "1"
  - id: hardware
    channelTypeUID: mqtt:string
    label: "Chip Set            "
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      stateTopic: stat/esp32_01/STATUS2
      transformationPattern: JSONPATH:$.StatusFWR.Hardware
  - id: ipaddress
    channelTypeUID: mqtt:string
    label: "IP Address          "
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      stateTopic: stat/esp32_01/STATUS5
      transformationPattern: JSONPATH:$.StatusNET.IPAddress
  - id: ssid
    channelTypeUID: mqtt:string
    label: WiFi
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      stateTopic: tele/esp32_01/STATE
      transformationPattern: JSONPATH:$.Wifi.SSId
  - id: temp
    channelTypeUID: mqtt:number
    label: Temp. DHT11 ESP32 01
    description: null
    configuration:
      retained: false
      postCommand: false
      step: 1
      formatBeforePublish: "%s"
      stateTopic: tele/esp32_01/SENSOR
      transformationPattern: JSONPATH:$.DHT11.Temperature
  - id: hum
    channelTypeUID: mqtt:number
    label: Hum.  DHT11 ESP32 01
    description: null
    configuration:
      retained: false
      postCommand: false
      step: 1
      formatBeforePublish: "%s"
      stateTopic: tele/esp32_01/SENSOR
      transformationPattern: JSONPATH:$.DHT11.Humidity
  - id: dew
    channelTypeUID: mqtt:number
    label: Tau.  DHT11 ESP32 01
    description: null
    configuration:
      retained: false
      postCommand: false
      step: 1
      formatBeforePublish: "%s"
      stateTopic: tele/esp32_01/SENSOR
      transformationPattern: JSONPATH:$.DHT11.DewPoint
  - id: smoke1
    channelTypeUID: mqtt:number
    label: Gas Sensor  ESP32 01
    description: null
    configuration:
      retained: false
      postCommand: false
      step: 1
      formatBeforePublish: "%s"
bzw. das Gleiche in Textform, da ich noch mit Text-Dateien "spiele"
.things:

Code: Alles auswählen

Thing mqtt:topic:vera:esp3201 "ESP32 01"  (mqtt:broker:vera )     @ "MQTT2" {
    Channels:
        Type switch : relay1     "Relay 1"               [ stateTopic="stat/esp32_01/POWER1", commandTopic="cmnd/esp32_01/POWER1" ]
        Type switch : relay2     "Relay 2"               [ stateTopic="stat/esp32_01/POWER2", commandTopic="cmnd/esp32_01/POWER2" ]
        Type switch : relay3     "Relay 3"               [ stateTopic="stat/esp32_01/POWER3", commandTopic="cmnd/esp32_01/POWER3" ]
        Type switch : relay4     "Relay 4"               [ stateTopic="stat/esp32_01/POWER4", commandTopic="cmnd/esp32_01/POWER4" ]
        Type switch : relay5     "Relay 5"               [ stateTopic="stat/esp32_01/POWER5", commandTopic="cmnd/esp32_01/POWER5" ]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/esp32_01/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type string : version   "Firmware Version    "   [ stateTopic="stat/esp32_01/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type switch : reachable "Reachable"              [ stateTopic="tele/esp32_01/LWT", transformationPattern="MAP:reachable.map" ]
        Type string : hardware  "Chip Set            "   [ stateTopic="stat/esp32_01/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Hardware"]
        Type string : ipaddress "IP Address          "   [ stateTopic="stat/esp32_01/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
        Type string : ssid      "WiFi"                   [ stateTopic="tele/esp32_01/STATE", transformationPattern="JSONPATH:$.Wifi.SSId"]
        Type number : temp      "Temp. DHT11 ESP32 01"   [ stateTopic="tele/esp32_01/SENSOR",  transformationPattern="JSONPATH:$.DHT11.Temperature"]
        Type number : hum       "Hum.  DHT11 ESP32 01"   [ stateTopic="tele/esp32_01/SENSOR",  transformationPattern="JSONPATH:$.DHT11.Humidity"]
        Type number : dew       "Tau.  DHT11 ESP32 01"   [ stateTopic="tele/esp32_01/SENSOR",  transformationPattern="JSONPATH:$.DHT11.DewPoint"]
        Type number : smoke1    "Gas Sensor  ESP32 01"   [ stateTopic="tele/esp32_01/SENSOR",  transformationPattern="JSONPATH:$.ANALOG.A1"]
    }
Ich gehe auch davon aus, dass du "JSONPath Transformation" installiert hast. Aber soweit ich mich noch erinnern kann liefert ESPEasy direkte Werte und keine JSON-Strings, die noch aufgelöst werden müssen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Mauricio
Beiträge: 2
Registriert: 1. Jan 2021 10:27
Answers: 0

Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Beitrag von Mauricio »

Vielen Dank schonmal für die Antworten.
Ich habe es jetzt hinbekommen, es lag tatsächlich an den Switch-Definitionen. Ich habe mir in ESPeasy Regeln gebaut, die nicht mehr 1 und 0 ausgeben, sondern on und off, und damit hat es dann funktioniert. Allerdings hatte ich dann natürlich Probleme mit den "GPIO,x,x" Befehlen. Daraufhin habe ich mir dann auch mal Tasmota angeschaut (wie gesagt, es ist ein Testsystem um zu lernen und für später auszuprobieren) und damit hat alles auf anhieb funktioniert.
Jetzt stehe ich vor der Frage wie und wo ich Regeln baue. So ganz blicke ich da noch nicht durch. Also sowas wie: Wenn Bewegung, dann Licht an für 120S, dann wieder aus. Ist das eine Rule? Oder ein Script oder eine Action? Kann ich das mit dem UI machen oder ist es besser dafür mit VCS zu arbeiten?
Evtl. wäre es besser gewesen mit OH2.5 anzufangen, da es doch noch sehr wenige Tutorials zu OH3 gibt.
Naja, ich werde mich schon irgendwie durchbeißen.
Euch allen nochmals vielen Dank!

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

Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)

Beitrag von udo1toni »

Grundsätzlich funktioniert in openHAB3 alles genauso wie in openHAB2. Es gibt natürlich einige wichtige Unterschiede:

1. OH2 braucht Java8, OH3 braucht Java11
2. OH2 kann mit OH1 Bindings umgehen, OH3 kann das nicht.
3. OH2 nutzt Paper UI, OH3 nutzt die Main UI.
4. in OH2 wird in Rules Joda Time verwendet, in OH3 gibt es nur Java Time.

Das waren die großen Knackpunkte. In OH3 gibt es das Modelling, welches man unter OH2 auch schon vornehmen konnte, aber in OH3 wird es durch die UI sehr stark gefördert und man kann auch erhebliche Vorteile daraus ziehen (automatisches Generieren von Ansichten nach den semantischen Kategorien). In OH2 gab es schon die NG-Rules Engine, welche in OH3 nun auch in der Lage ist, die Rules der DSL aus OH1 auszuführen (unter OH2 brauchte es dazu noch die alte Rules engine).
OH3 bietet die Möglichkeit, grafisch vorgenommene Konfigurationen in Textform abzurufen und zu verändern, was ein großer Fortschritt gegenüber OH2 ist.

Es gibt einige Dinge, die in OH3 etwas anders funktionieren als in OH2, aber gerade die ersten Gehversuche sollten weitgehend identisch verlaufen (zumindest, was Rules mit der DSL betrifft).

Für die Aufgabe einer Treppenlichtsteuerung (Ausschalttimer) kommt es etwas auf die verwendeten Bindings an, wie man das realisiert. Grundsätzlich kann das komplett in den Items erledigt werden, mit dem expire-Tag (unter OH2 musste man dazu das expire Binding installieren), evtl. muss man mehrere Channel mittels des Profiles "follow" miteinander koppeln.
Auf jeden Fall ist das Problem auch mit einer Rule lösbar.

Ein "Script" im ursprünglichne Sinne von openHAB ist einfach ein Teil einer Rule, der in einer Datei ausgelagert ist. Alternativ könnnte es sich auch um ein Script handeln, welches im Betriebssystem läuft. openHAB startet lediglich das externe Script und nimmt evtl. den Output des Scripts entgegen.

Eine Action bezeichnet eben genau das. Eine Action kann innerhalb einer Rule aufgerufen werden, es ist also ein bestimmter Befehl, z.B., um eine Mail zu versenden oder auch einem Item einen Befehl zu senden. Wobei gerade das Senden von Befehlen an Items besser über die zugehörigen Methoden erledigt werden sollte.

Wie man seine Rules erstellt, ist Geschmacksache. Visual Studio Code bietet halt Syntaxprüfung und sehr weitreichende Unterstützung, welche so (bis auf Weiteres) in der Main UI nicht zur Verfügung steht.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten