Seite 1 von 1
OH3 MQTT Switch Status wird nicht übernommen (Anfänger)
Verfasst: 1. Jan 2021 13:30
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
Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)
Verfasst: 1. Jan 2021 13:57
von bernd180356
Ich würde mal dieses Transformations Binding installieren !
Ist unter Addons - Transformation zu finden !
- Jinja Transformation
Vielleicht klappt s dann !
Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)
Verfasst: 1. Jan 2021 18:33
von Stachi
Groß/Kleinschreibung beachtet? OH ist da sehr empfindlich [emoji6]
Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)
Verfasst: 1. Jan 2021 20:14
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.
Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)
Verfasst: 1. Jan 2021 22:20
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!
Re: OH3 MQTT Switch Status wird nicht übernommen (Anfänger)
Verfasst: 2. Jan 2021 01:08
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.