Seite 1 von 1
JSONPATH Transformation für MQTT String Array
Verfasst: 15. Jun 2024 18:48
von blondi
Ich bräuchte Hilfe beim Auslesen von MQTT Daten einer Wärmepumpe, genauer gesagt für folgende Daten (vermutlich String Array):
MQTT Explorer Topic:
Value:
Ich habe schon kreuz und quer gesucht, finde aber nichts was mir weiterhilft.
Thing:
Code: Alles auswählen
Thing topic Waermepumpe
{
Type string : OutsideTemp [ stateTopic="ebusd/24849/temperature.outside.[6]", transformationPattern="JSONPATH:$.value" ]
}
Item:
Code: Alles auswählen
Number Aussentemperatur "Wärmetauscher Lufttemperatur [%d °C]" {channel="mqtt:topic:mosquitto:OutsideTemp"}
Ich habe die verschiedensten Versionen vom transformationPattern probiert, kein Erfolg. Ich würde im obigen Fall den siebten Wert (19.7) als Zahl benötigen.
Wer kann mir eine Lösung verraten?
Danke
Werner
Re: JSONPATH Transformation für MQTT String Array
Verfasst: 15. Jun 2024 19:54
von Harka
Moin,
das ist kein JSON.
Ich würde das mit folgendermaßen lösen:
Voraussetzung ist OH ab Version 4 und installiertes JavaScript Scripting. Ich nutze keine Textkonfiguration aber es sollte so gehen
Code: Alles auswählen
Type string : OutsideTemp [ stateTopic="ebusd/24849/temperature.outside", transformationPattern="JS:|(input).split(';')[6]" ]
e: Du kannst den Type auch gleich auf number setzen.
Re: JSONPATH Transformation für MQTT String Array
Verfasst: 15. Jun 2024 19:57
von udo1toni
Ich gehe davon aus, dass der Wert die gesamte Payload des Topics ist. Es handelt sich also
nicht um ein JSON Objekt, mithin kannst Du auch nicht mit JSONPath arbeiten. Stattdessen must Du mutmaßlich einen REGEX Ausdruck verwenden. Im Text kommen mehrere Semikola vor, Dich interessiert der Wert nach dem letzten Semikolon, das sähe dann z.B. so aus:
in openHAB muss immer die gesamte REGEX matchen. Zurückgegeben wird dann die erste Gruppe.
In diesem Fall ist die erste Gruppe also der letzte Part des Strings, der String besteht aus einer beliebigen Zeichenfolge (.*), der eine Semikolon folgt, dem dann die Gruppe folgt. Die Gruppe besteht aus einer beliebigen Anzahl Ziffern (mindestens eine), gefolgt von einem Punkt (muss escaped werden, deshalb der Backslash), gefolgt von exakt einer Ziffer.
Falls der wert auch negativ werden kann, müsste man das noch ergänzen:
Das Minuszeichen ist das Zeichen, das ? bedeutet "null- oder einmal"
Re: JSONPATH Transformation für MQTT String Array
Verfasst: 15. Jun 2024 23:04
von blondi
Danke für die schnellen Antworten. Leider führen beide nicht zum Ziel.
Bei dem Tip von Harka kommt im Log kein Fehler aber auch kein Wert in das Item.
Bei dem Tip von udo1toni meldet OH einen Fehler in der Datei und nichts geht mehr.
Gibts noch andere Tips?
Danke
Werner
Re: JSONPATH Transformation für MQTT String Array
Verfasst: 16. Jun 2024 09:57
von Harka
Moin,
sollten aber alle gehen (getestet!). Was für eine Fehlermeldung gibt es bei der RegEx-Lösung?
Was gibt dies aus? ->
Code: Alles auswählen
JS:|console.warn(input);console.warn(input.split(';'));console.warn(parseFloat(input.split(';')[6]));
Welche Version hast Du? Sind Javascript und die RegEx-Transformation installiert?
Info: "
.split(';')[6]" kann auch durch "
.split(';').slice(-1)[0]" ersetzt werden um geziehlt auf den letzten Wert zuzugreifen.
Re: JSONPATH Transformation für MQTT String Array
Verfasst: 16. Jun 2024 10:16
von blondi
Hallo noch einmal,
Danke auch noch einmal für die Tips, habe nun Erfolg:
Der Tip von Harka war schlußendlich richtig, ich hatte in der item Definition noch einen Fehler. Nach bereinigung habe ich nun Werte.
lg
Werner