Owntracks über MQTT

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Owntracks über MQTT

Beitrag von udo1toni »

Leider kannst Du in diesem Fall nicht den Weg über das Profile gehen, weil Du eine verkettete Transformation brauchst.
Kopiere den Channel und richte die Incoming Value Transformation folgendermaßen ein:

Code: Alles auswählen

REGEX:.*region.*∩JSONPATH:$.region
Nimm dann das vorhandene Item und verlinke es direkt (ohne Profile...) mit dem neuen Channel.
Die angegebene Incoming Value Transformation führt zunächst ein REGEX aus, welches auf jeden String matcht, der das Wort region (in exakt dieser Schreibweise) enthält. Dieser Match wird nun an JSONPATH durchgereicht. Kommt region nicht im String vor, so erhält JSONPATH einen leeren String.

REGEX muss natürlich installiert sein...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Owntracks über MQTT

Beitrag von Mclupo »

Guten Morgen
Der gesuchte String heisst "inregions".

Mit deinem Befehl kommt folgender Fehler
Gruss Wolf
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

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

Re: Owntracks über MQTT

Beitrag von udo1toni »

Da hast Du das falsche angehängt... Aber ohnehin... Die Fehlermeldungen werden als Text ausgegeben, man kann sie einfach über die Zwischenablage kopieren und hier als Text einfügen (bitte den Textblock als Code markieren!)
Damit ist es wesentlich einfacher, die Fehlermeldungen zu lesen und evtl. auch zu filtern.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Owntracks über MQTT

Beitrag von Mclupo »

udo1toni hat geschrieben: 6. Jan 2022 19:25 Kopiere den Channel und richte die Incoming Value Transformation folgendermaßen ein:

Code: Alles auswählen

REGEX:.*region.*∩JSONPATH:$.region
Wie geht kopieren??
Hab einen zweiten Channel erzeugt und dort den Ausdruck in die incoming Transformation eingesetzt. Ohne den Regex Teil wird der Wert im Item richtig angezeigt (falls vorhanden), mit regex Teil kommt der group Fehler
Gruss Wolf
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

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

Re: Owntracks über MQTT

Beitrag von peter-pan »

Ich habe hier mal ein bisschen "Mäuschen" gespielt und mitgelesen, da ich euren Gedankenaustausch interessant finde.
Wenn ich das richtig verstanden habe, gibt der Regex-Befehl (.*inregions.* oder .*region.*) entweder einen String mit Wert oder einen leeren String aus.
Ich hab eigentlich die gleiche Frage wie Wolf.
Gibt der Regex-Teil den ganzen JSON-String (falls vorhanden) weiter oder nicht? Und wenn der Vergleich leer ist, dann hat die JSON-Transformation ja nichts zum auswerten.


Edit:

Code: Alles auswählen

{
    "_type" : "location",
    "acc" : 35,
    "alt" : 366,
    "batt" : 98,
    "bs" : 2,
    "BSSID" : "74:42:7f:5c:2a:c",
    "conn" : "w",
    "inregions" : [ "Wolf" ],
    "inrids" : [ "f18469" ],
    "lat" : 48.650079,
    "lon" : 9.469556,
    "p" : 97.507,
    "SSID" : "McLupo5",
    "t" : "u",
    "tid" : "01",
    "tst" : 1641112209,
    "vac" : 18
}
Ich hab mit dem JSON-String etwas rumgespielt (jsonpath online elevator). So wie ich das verstehe und auch die Fehlermeldung interpretiere, handelt es sich um ein "Array" was zurück gegeben wird. Wäre es deshalb nicht richtiger, wenn die JSON-Transformation so lauten würde:

Code: Alles auswählen

$.inregions[0]
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Owntracks über MQTT

Beitrag von udo1toni »

Mclupo hat geschrieben: 7. Jan 2022 12:49
udo1toni hat geschrieben: 6. Jan 2022 19:25 Kopiere den Channel und richte die Incoming Value Transformation folgendermaßen ein:

Code: Alles auswählen

REGEX:.*region.*∩JSONPATH:$.region
Wie geht kopieren??
Hab einen zweiten Channel erzeugt und dort den Ausdruck in die incoming Transformation eingesetzt. Ohne den Regex Teil wird der Wert im Item richtig angezeigt (falls vorhanden), mit regex Teil kommt der group Fehler
Gruss Wolf
Sorry... Ich habe erst jetzt realisiert, dass da ein schwarzer Balken unter dem Bild ist (welcher tatsächlich einen Auszug aus dem Log enthält). Wenn Du aber genau hinschaust, kannst Du feststellen, dass das KEIN Fehler ist. Da steht sehr eindeutig [INFO], soll heißen, es ist ein Hinweis, mehr nicht.
Wenn das REGEX nicht matcht, müssen wir noch mal schauen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Owntracks über MQTT

Beitrag von udo1toni »

Gerade noch mal in der Doku nachgeschaut... da fehlen noch Klammern... korrekt müsste es heißen

Code: Alles auswählen

REGEX:(.*inregion.*)∩JSONPATH:$.inregion
oder evtl auch

Code: Alles auswählen

REGEX:(.*inregion.*)∩JSONPATH:$.inregion[0]
wie peter-pan ganz richtig anmerkt. Da ich jetzt gerade zu faul bin, das zu validieren...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Owntracks über MQTT

Beitrag von peter-pan »

Ich glaub jetzt hab ich's verstanden(Mit der Verkettung/Intersection)!!! Udo hat das hier noch einmal schön beschrieben.

Im Klartext - für mich - heisst das: Wenn REGEX den Ausdruck nicht findet, wird die folgende JSONPATH-Transormation nicht ausgeführt.

Ist das so richtig ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Owntracks über MQTT

Beitrag von Mclupo »

Ich will das ganze nochmal chronologisch aufzählen
1) Thing "owntracks Wolf Iphone"
..a) 1.te String Channel "Owntracks Wolf Iphone"
...aa) 4 numerische Items mit Jsonpath profil mit JSONPath Expression z.B $.lat , $.lon etc.

..b) 2.te String Channel "Owntracks Wolf Iphone Region" mit JSONPath Expression Regex mit Klammern und ohne/mit [0] (wie Udo und Peter-Pan sagten)
...ba) String Item ohne Profil

im Teil a) kommen alle Werte richtig an.
im Teil b) kommt bei keiner Einstellung ein Wert durch (immer NULL), es kommt aber auch kein Fehler in openhab.log

Frage:
1) Ist das so richtig mit dem zweiten Channel?
2) Da die Nachricht nicht im Broker gespeichert wird, kann es sein, dass die zweite Channel Abfrage keine Nachricht im Broker mehr findet?
Gruß Wolf
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

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

Re: Owntracks über MQTT

Beitrag von udo1toni »

Für mich hört sich das erst mal richtig an. Wenn Du im 2. Channel keine incomming Transformation einträgst, kommt denn das JSON im String an?

Der Broker wird nicht von openHAB abgefragt. Stattdessen abonniert openHAB die Topics beim Broker. Daraufhin schickt der Broker alle abonnierten Topics an openHAB, welches dann die Topics intern puffert.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten