Seite 1 von 4

Owntracks über MQTT

Verfasst: 2. Jan 2022 15:07
von Mclupo
Hallo
Nach vielem Testen und lesen komme ich mit der Integrierung von Owntracks Daten in Openhab nicht weiter.
Der Broker auf dem Raspi 4 Oh3.2 läuft
.
Broker.jpg
.
und bekomme folgendes (Json) Datenfile (aus MQTT.FX)
.
Json.jpg
.
Dann habe ich ein generic Thing erzeugt
.
Thing.jpg
.
mit folgenden Channel Parametern
.

Re: Owntracks über MQTT

Verfasst: 2. Jan 2022 15:09
von Mclupo
mit den folgenden Parametern.
Ich wollte mal als einfachste Daten die Batterie Ladung aus batt: darstellen.
item.jpg
.
leider ist der Wert immer Null.

Was tun ?? Ist die Topic Beschreibung falsch? Oder müssen die Daten anders aus dem File extrahiert werden?

besten Dank Wolf

Re: Owntracks über MQTT

Verfasst: 2. Jan 2022 22:33
von udo1toni
Unter welchem Topic zeigt mqtt.fx denn das json Objekt an? Im Channel muss exakt dieses Topic angegeben werden.
Weiterhin brauchst Du den JSONPATH Transformation Service (muss installiert werden).
Mit Show Advanced bekommst Du zusätzliche Parameter zum konfigurieren, dort trägst Du bei incomming value transformation für den Batteriestatus z.B. JSONPATH:$.batt ein.

Re: Owntracks über MQTT

Verfasst: 3. Jan 2022 07:27
von Mclupo
Danke Udo, hat funktioniert.
Was muss ich eintragen um die „Location“ zu bekommen?
Gruss Wolf

Re: Owntracks über MQTT

Verfasst: 3. Jan 2022 07:34
von Mclupo
5ECF70CC-1BEE-4805-AA2A-9D2128CC1572.png
Warum funktioniert die Json path Formation nur mit dem unteren Bild und nicht im oberen?
Gruss Wolf

Re: Owntracks über MQTT

Verfasst: 3. Jan 2022 12:35
von udo1toni
Wenn Du weitere Daten aus dem selben JSON Objekt auswerten willst, ist tatsächlich ein anderer Weg sinnvoller.

Dazu nutzt Du dann das Profile. Aber: Erst mal einen Schritt zurück.

Du hast einen Channel vom Typ Number. Ein Number Channel kann eine Zahl speichern. Sonst nichts.

Das Profile beeinflusst, wie der Inhalt des Channels an das Item weitergeleitet wird.
Die incoming Value Transformation hingegen steuert, welcher Teil des eingehenden Datenstroms im Channel landet.

Da wir von einem JSON Objekt sprechen, welches wir nun komplett im Channel vorhalten wollen, muss der Channel Typ string sein.

Anschließend kannst Du ein Number Item (!) mit diesem string Channel verknüpfen und im Profile JSONPATH auswählen und dort den entsprechenden Path eintragen (also $.batt für die Batterie).
Dann kannst Du weitere Items hinzufügen, die natürlich jeweils zum erwarteten Datentypen passen müssen, also z.B. Location für die Position, falls im passenden Format geliefert (das wäre Länge,Breite[,Höhe])


Gesendet von iPad mit Tapatalk

Re: Owntracks über MQTT

Verfasst: 3. Jan 2022 13:34
von Mclupo
Dank dir Udo, auch das habe ich kapiert.

Fehlt jetzt nur noch der Wert für die JSONPath Expression beim Location Item.
Was schreibe ich dort rein, um die drei Werte lat, lon und alt in das Location item zu bekommen?
Gruss Wolf

Re: Owntracks über MQTT

Verfasst: 3. Jan 2022 17:44
von udo1toni
Ja, wie gesagt (vorhin war ich mit dem iPad unterwegs, da war es etwas blöd, das nachzuschauen). direkt geht das nur, wenn der Wert in der entsprechenden Notation vorliegt, das ist hier leider nicht der Fall. Du brauchst also mindestens zwei weitere Number Items (wenn Du die Höhe auch möchtest drei), die Du alle mit dem selben Channel verknüpfst, nennen wir sie hier mal PosLat, PosLon und PosAlt. die bekommen entsprechend die Paths $.lat, $.lon und $.alt.

Dann brauchst Du noch eine Rule, welche aus den drei Einzelwerten eine Location macht:

Code: Alles auswählen

rule "set location" 
when
    Item PosLat changed or                    // Breite hat sich geändert
    Item PosLon changed or                    // Länge hat sich geändert
    Item PosAlt changed                       // Höhe hat sich geändert
then
    var Number nLon = null                    // Default Wert: null
    var Number nLat = null                    // Default Wert: null
    var Number nAlt = 0                       // Default wert 0 (über Meeresspiegel)
    if(PosLat.state instanceof Number)        // falls gültige Breite
        nLat = (PosLat.state as Number)       // Breite übernehmen
    if(PosLon.state instanceof Number)        // falls gültige Länge
        nLon = (PosLon.state as Number)       // Länge übernehmen
    if(PosLAlt.state instanceof Number)       // Falls gültige Höhe
        nAlt = (PosAlt.state as Number)       // Höhe übernehmen
    if(nLat === null || nLon === null)        // falls Breite oder Länge ungültig
        return;                               // Abbruch

    MyPosition.postUpdate(nLon.toString+","+nLat.toString+","+nAlt.toString)
end
Ungetestet :) Das Item MyPosition kannst Du dann z.B. auf einer Karte anzeigen lassen.

Re: Owntracks über MQTT

Verfasst: 3. Jan 2022 19:59
von Mclupo
Danke, hat prima funktioniert.

Re: Owntracks über MQTT

Verfasst: 6. Jan 2022 18:25
von Mclupo
Moin
Jetzt hab ich noch den Zustand, dass in das Item „region“ der gesamte owntracks string kopiert wird, weil das Feld „inregions“ bei manchen gesendeten Nachrichten nicht enthalten ist (bin eben nicht in einer deklarierten Owntracks Region). Jetzt könnte ich das Item „region“ auf Stringlänge testen und bei z.B. mehr als 15 Zeichen mit einen Dummy überschreiben.
Gibt es eine Möglichkeit diese Zuweisung zum Item bei ungültigem Wert vorher abzufangen?
Gruss Wolf