JSONPATH:$ WARN Meldung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

hsdneo
Beiträge: 52
Registriert: 26. Mär 2020 14:48
Answers: 0

Re: JSONPATH:$ WARN Meldung

Beitrag von hsdneo »

Ah doof - doch nicht. Hue hat natürlich keine Temperatursensoren im Angebot, somit kann ich über den Weg keine Temperaturwerte, etc. auslesen. Bleibts bei dem Problem, dass 1 Tasmota Bridge für alle angeschlossene Geräte 1 Topic an meinen MQTT sendet.

Habe das schon versucht über eine Tasmota Regel zusätzlich zu publishen aber das klappt irgendwie nicht. Somit muss ich wohl mit den Warnungen leben!?

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

Re: JSONPATH:$ WARN Meldung

Beitrag von udo1toni »

Warum machst Du Dir das Leben so schwer? Ich habe das bereits oben angedeutet und rfu hat es auch schon geschrieben: die einzelnen Geräte müssen zwingend unterschiedliche Topics verwenden. Das ist ist im Übrigen mit der Hue Bridge nicht anders (die auch nicht schneller ist als mqtt).

Du legst in openHAB eine mqtt Bridge in Form eines Brokers an. Mit diesem Broker verbindest Du pro Gerät ein Thing. z.B. so:

Code: Alles auswählen

Bridge mqtt:broker:mymqtt "Mosquitto" [
    host="192.168.178.55",
    port=1883,
    clientID="openHAB3",
 ] {
     Thing topic sonoffT1_1 "sonoff T1 1" [
         availabilityTopic="tele/sonoff_t1/LWT",
         payloadNotAvailable="Offline",
         payloadAvailable= "Online"
          ]{
        Channels:
            Type rollershutter : ch1  "Shutter" [ stateTopic="stat/sonoff_t1/SHUTTER1", commandTopic="cmnd/sonoff_t1/shutterposition1"]
            Type string        : tele "Tele"    [ stateTopic="tele/sonoff_t1/STATE" ]
      }
     Thing topic sonoffT1_2 "sonoff T1 2"  [
         availabilityTopic="tele/sonoff_t2/LWT",
         payloadNotAvailable="Offline",
         payloadAvailable= "Online"
      ]{
        Channels:
            Type rollershutter : ch1  "Shutter" [ stateTopic= "stat/sonoff_t2/SHUTTER1", commandTopic="cmnd/sonoff_t2/shutterposition1" ]
            Type string        : tele "Tele"    [ stateTopic= "tele/sonoff_t2/STATE" ]
      }
}
In diesem Fall sind es halt Wandtaster, die als Rollladensteuerung dienen, ist aber auch gleichgültig. Der Punkt ist, jedes Gerät hat einen eigenen Topic-Zweig.
Die Textversion ist die übliche Schreibweise über Textdateien (vor openHAB3 gebräuchlich, unter openHAB3 immer noch verfügbar), ich könnte Dir den Code auch als yaml angeben :) aber die Struktur und insbesondere die Topics sollten auch so verständlich sein.

Im Feld "Topic" meiner Devices steht bei dem einen Gerät sonoff_t1, beim zweiten sonoff_t2 (und natürlich habe ich noch jede Menge andere Geräte, die ebenfalls alle ein individuelles Topic haben).

Es gibt auch noch ein übergreifendes Topic, das ist gewöhnlich auch "Tasmotas" gesetzt. Mit diesem kann man z.B. allen Geräten auf einen Schlag befehlen, ein neues Firmware Image per OTA Update zu ziehen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hsdneo
Beiträge: 52
Registriert: 26. Mär 2020 14:48
Answers: 0

Re: JSONPATH:$ WARN Meldung

Beitrag von hsdneo »

Ich verstehe worauf ihr hinaus wollt. Ich sehe auch, dass ihr im OH die Topics konfiguriert. Was ich jedoch nicht verstehe:
- Die Sensoren sind mit der Tasmota Bridge verbunden und melden dort ihren Status
- Die Tasmota Bridge meldet derzeit immer mit dem selben Topic den Status für alle Geräte via MQTT
- aktuell läuft ein MQTT Server auf einem Windows Rechner

Wenn ich jetzt ein neues "Thing" anlege - egal ob UI oder Text - und dort das Topic hinterlege, bringt mir das ja nix, solange der Tasmota dieses Topic nicht "bedient" oder habe ich hier einen Denkfehler?

Dass ich das im OH "splitten" muss, ist mir bewusst. Aber ich muss es ja erst mal schaffen, dass diese Sensoren jeweils ein unterschiedliches Topic zum MQTT senden, damit ich dieses dann an unterschiedliche Things hängen kann. Bitte korrigieren falls ich falsch liege.

Was ich jetzt hinbekommen habe:
- Auf der Tasmota habe ich Regeln angelegt, die z.B. für einen Türsensor bei Veränderung diesen Status in einem separaten MQTT Topic veröffentlichen
- Damit kriege ich es hin, dass jeder einzelne Sensor ein einzelnes Topic erhält
- Weiterhin hat das den Vorteil, dass ich mir direkt einfach nur den Wert für den Kontakt überstellen lassen kann und ich komplett auf JSONPATH, etc. verzichten kann

Schalter und Lampe steuere ich jetzt über Hue Emulation. Die Tür- und Fenstersensoren klappen über o.g. Weg super. Auf "LinkQuality" und "Batterielevel" verzichte ich jetzt erst mal.
Die Tage muss ich mal noch basteln, dass ich den Bewegungsmelder und die 2 Schalter auf diesem Wege auch verbunden bekomme.

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

Re: JSONPATH:$ WARN Meldung

Beitrag von udo1toni »

Von welcher Tasmota Bridge redest Du denn?

Tasmota ist eine Firmware für den ESP8266, den ESP32 und einige andere kompatible SoC. Jedes Device ist ein eigener Client am mqtt Broker. Es spielt keine Rolle, welcher Broker eingesetzt wird oder auf welcher Plattform dieser läuft.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hsdneo
Beiträge: 52
Registriert: 26. Mär 2020 14:48
Answers: 0

Re: JSONPATH:$ WARN Meldung

Beitrag von hsdneo »

Tasmota läuft als Firmware auf einer Sonoff Bridge. An dieser Bridge sind einige Türsensoren, Fenstersensoren, Temperatursensoren und Schalter angemeldet.
Die Bridge sendet alle Befehl als einziges Topic an den MQTT Broker. Innerhalb der Nachricht ist dann ersichtlich welches Gerät und welcher Wert gemeldet wurde.

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

Re: JSONPATH:$ WARN Meldung

Beitrag von udo1toni »

Das ist aber etwas komplett anderes, als was Du weiter oben geschrieben hast... (Oder ich hab es falsch gelesen... kann auch sein...)

In dem Fall ist es ja so, dass die Sonoff Bridge das einzige Gerät ist.
Dann hast Du einen Channel, über den die Daten rein kommen.
Dieser Channel muss als String Channel angelegt werden (z.B. mit dem Namen json). Den Channel verknüpfst Du mit einem Item.
Dieses Item kannst Du dann in einer Rule weiter verarbeiten und die Items mit den eigentlichen Messwerten dadurch füllen.

Alternativ kannst Du auch für alle betroffenen Messwerte eigene Number Channel erzeugen und eine kombinierte Transformation bauen.
Dazu verknüpfst Du dann ein REGEX mit dem JSONPATH, das geht mit dem Symbol ∩ (am einfachsten in der UI aus dem Hilfstext zur incomming Value Transformation kopieren).
Das REGEX sorgt dafür, dass nur die JSON Objekte bei JSONPATH ankommen, die auch den entsprechenden Knoten enthalten.

Beide Wege sind möglich und mit etwas zusätzlichem Aufwand verbunden.

Konkretes Beispiel:

Code: Alles auswählen

REGEX:(.*Temp_Garage.*)∩JSONPATH:$.ZbReceived.Temp_Garage.LinkQuality
Das heißt, zunächst sucht REGEX nach dem Teilstring Temp_Garage, findet es diesen, so kann JSONPATH daraufhin den zugehörigen Wert extrahieren.
Voraussetzung ist natürlich, dass der String immer an der passenden Stelle auftaucht, das sollte aber gewöhnlich der Fall sein.,

REGEX muss natürlich installiert sein,m genau wie JSONPATH auch :)

EDIT: .* statt *. :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hsdneo
Beiträge: 52
Registriert: 26. Mär 2020 14:48
Answers: 0

Re: JSONPATH:$ WARN Meldung

Beitrag von hsdneo »

Hi,

danke dafür. Sorry, wenn ich das ursprünglich nicht sauber dargestellt hatte. Genau den von dir beschriebenen Weg bin ich bisher gegangen mit REGEX und JSONPATH.
Und genau hier passiert es mir, dass ich die vielen Warnmeldung im Log habe.

Oder soll das so laufen, dass ich nur 1 Thing konfiguriere und dann alle Channel (und somit alle Sensoren) in diesem Thing hinterlege? Derzeit habe ich halt pro Sensor 1 Thing und darin die entsprechenden Channels mit der REGEX/JSONPATH Konvertierung.

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

Re: JSONPATH:$ WARN Meldung

Beitrag von udo1toni »

Ja und Nein.

Du legst nur ein Thing an (Du hast eine Hardware, das ist die Sonoff Bridge). Innerhalb dieses Things legst Du für jeden Sensor einen Channel an.

Wenn Du trotz der Verknüpfung WARN Meldungen bekommst, stimmt etwas mit der Transformation nicht.
hsdneo hat geschrieben: 24. Okt 2022 08:20 Genau den von dir beschriebenen Weg bin ich bisher gegangen mit REGEX und JSONPATH.
Und genau hier passiert es mir, dass ich die vielen Warnmeldung im Log habe.
Das ist das Problem, wen man einen (alten) Thread kapert, aber keinerlei Infos über die bisherige Konfiguration mit liefert... ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hsdneo
Beiträge: 52
Registriert: 26. Mär 2020 14:48
Answers: 0

Re: JSONPATH:$ WARN Meldung

Beitrag von hsdneo »

Ok, danke. Ich transformiere die MQTT Meldungen nun in der Tasmota Bridge und individualisiere diese per Regel. Somit habe ich den Vorteil, dass ich auf Regex und JSONPATH in diesem Umfeld komplett verzichten kann. Damit kann ich augenscheinlich alles bedienen, wie benötigt und mache mal weiter.

Danke

Antworten