Seite 1 von 1

JSONPath funktioniert nicht mehr

Verfasst: 2. Aug 2024 21:43
von FelixK
Hallo,

ich musste mein OpenHab neu aufsetzen, da meine SD Karte defekt war/ist. Ich konnte aber noch die Einstellungen von der defekten Karte retten.

Damals hatte ich OH3 laufen, jetzt das aktuellste.

Was u.a. nicht funktioniert ist ein Mqtt Generic Thing mit dem Namen "Temperature_and_Humidity". Dieses hat für unterschiedliche Zimmer mehrere Channel und soll über eine Transformation pro Channel die Temperatur- bzw. Luftfeuchtigkeitswerte herausziehen. Das hat auch bisher immer geklappt.

Jetzt sehe ich aber im OpenHab.log:

Code: Alles auswählen

2024-08-01 21:50:42.185 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"house": {"temperature": {"living-room": 0.0, "bathroom": 27.8, "bedroom": 0.0}, "humidity": {"living-room": 0, "bedroom": 0, "bathroom": 61}}}' from channel 'mqtt:topic:717196b863:d2c20cb287:House_Temperature_Bathroom' not supported by type 'NumberValue': Character array is missing "e" notation exponential mark.
Der JSONPath sieht wie folgt aus

Code: Alles auswählen

JSONPATH:$.house.temperature.bathroom
Meiner Meinung nach sollte dafür die 27.8 aus dem Json gezogen werden?! Beim Suchen im Netz bin ich auch auf Beispiele gestoßen, in denen "." der Dezimaltrenner ist. Ein "," als Dezimaltrenner würde es wohl auch nicht lösen, oder?

Vielen Dank und viele Grüße

Felix

Re: JSONPath funktioniert nicht mehr

Verfasst: 2. Aug 2024 22:00
von udo1toni
Zunächst einmal ist in Deinem JSON ja der korrekte Dezimaltrenner drin. Das JSON sieht so aus:

Code: Alles auswählen

{
    "house": {
        "temperature": {
            "living-room": 0.0,
            "bathroom": 27.8,
            "bedroom": 0.0
        },
        "humidity": {
            "living-room": 0,
            "bedroom": 0,
            "bathroom": 61
        }
    }
}
und ist in dieser Form auch korrekt. Ein Komma ist kein gültiger Dezimaltrenner, hier wird nun mal ausschließlich die amerikanische Schreibweise verwendet.

Wie hast Du denn Thing und Channel definiert?
Und noch viel wichtiger: Bist Du sicher, dass Du den jsonpath Transformation Service auch installiert hast?

Re: JSONPath funktioniert nicht mehr

Verfasst: 2. Aug 2024 23:11
von FelixK
Danke dir (wie so oft). Es lag daran, dass ich den JSONPath Transformation Service nicht installiert hatte. Ich bin fälschlicherweise davon ausgegangen, dass der standardmäßig dabei ist, wenn das die Option in der UI verfügbar ist.

Jetzt läuft zumindest mal die Temperatur und Luftfeuchtigkeit Geschichte.

Re: JSONPath funktioniert nicht mehr

Verfasst: 2. Aug 2024 23:53
von FelixK
PS: Kann ich auf der defekten, an einem anderen Raspberry Pi gemounteten SD Karte sehen, welche Add-Ons ich in OpenHab installiert hatte? Es gehen noch ein paar andere Dinge nicht. Vermutlich komme ich so an der Lösung näher.

Re: JSONPath funktioniert nicht mehr

Verfasst: 3. Aug 2024 06:07
von udo1toni
Es gibt irgendwo unterhalb $OPENHAB_USERDATA/ eine Datei addons.config (bitte nicht verwechseln mit der addons.cfg in $OPENHAB_CONF/services/), in der sollten alle installierten Addons gelistet sein.
Teilweise haben sich die Namen der Addons aber leicht geändert bzw. der Ort, wo sie angegeben sind (z.B. JScript Transformation Service ist komplett entfallen, da nun die JavaScript Scripting Engine diesen Job mit übernimmt), es ist also nicht zielführend, den Inhalt der Datei einfach zu kopieren.

Aber... openHAB installiert von sich aus erst mal gar keine Addons und kann ohne Addons auch lediglich Core Funktionen zur Verfügung stellen.
Als einfache Regel kannst Du getrost davon ausgehen, dass Du für alles erst mal ein passendes Addon installieren musst.

An welcher Stelle konntest Du denn vor der Installation jsonpath auswählen?
Ich denke, Du hast beim transformationPattern einfach ein "JSONPATH:$.house.temperature.bathroom" eingetragen. Das ist aber keine "verfügbare Option", sondern Freitext.
Allenfalls könnte man hier openHAB ankreiden, dass es nicht proaktiv eine Fehlermeldung ausgibt, weil die hinterlegte Transformation nicht verfügbar ist. Eventuell gibt/gab es diese Fehlermeldung aber sehr wohl und Du hast sie nur übersehen. Bei mir werden jedenfalls solche Konfigurationen regelhaft angemeckert (in openhab.log.

Falls Du Probleme hast, zu identifizieren, was fehlt, frag einfach :)

Re: JSONPath funktioniert nicht mehr

Verfasst: 3. Aug 2024 08:35
von FelixK
Danke dir.
udo1toni hat geschrieben: 3. Aug 2024 06:07 Es gibt irgendwo unterhalb $OPENHAB_USERDATA/ eine Datei addons.config (bitte nicht verwechseln mit der addons.cfg in $OPENHAB_CONF/services/), in der sollten alle installierten Addons gelistet sein.
Teilweise haben sich die Namen der Addons aber leicht geändert bzw. der Ort, wo sie angegeben sind (z.B. JScript Transformation Service ist komplett entfallen, da nun die JavaScript Scripting Engine diesen Job mit übernimmt), es ist also nicht zielführend, den Inhalt der Datei einfach zu kopieren.
Die Datei habe ich in

Code: Alles auswählen

/var/lib/openhab/config/org/openhab/addons.config
unter Openhabian gefunden.
udo1toni hat geschrieben: 3. Aug 2024 06:07 Aber... openHAB installiert von sich aus erst mal gar keine Addons und kann ohne Addons auch lediglich Core Funktionen zur Verfügung stellen.
Als einfache Regel kannst Du getrost davon ausgehen, dass Du für alles erst mal ein passendes Addon installieren musst.
Es war mir nicht bewusst, dass das ein Add-on ist. Ich war der Meinung, dass das eine Core Funktionalität ist.
udo1toni hat geschrieben: 3. Aug 2024 06:07 An welcher Stelle konntest Du denn vor der Installation jsonpath auswählen?
Ich denke, Du hast beim transformationPattern einfach ein "JSONPATH:$.house.temperature.bathroom" eingetragen. Das ist aber keine "verfügbare Option", sondern Freitext.
Allenfalls könnte man hier openHAB ankreiden, dass es nicht proaktiv eine Fehlermeldung ausgibt, weil die hinterlegte Transformation nicht verfügbar ist. Eventuell gibt/gab es diese Fehlermeldung aber sehr wohl und Du hast sie nur übersehen. Bei mir werden jedenfalls solche Konfigurationen regelhaft angemeckert (in openhab.log.
Es ging mir nicht um ankreiden, o.ä. Ich konnte die Freitexteingabe bei Mqtt Generic Things vornehmen bzw. dadurch, dass ich die Konfiguration von der alten SD Karte übernommen hatte, war das schon ausgefüllt. Vielleicht wäre auch eine andere Fehlermeldung, als, dass der übergebene Wert kein NumberValue ist - wenn man es weiß, ist es logisch, da einfach keine Transformation vorgenommen und das JSON einfach weitergegeben wird - ausgegeben wird. Keine Ahnung, ob auf den JSONPath dann überhaupt zugegriffen wurde, aber vielleicht würde eine Überprüfung "JSONPath gesetzt, aber Add-on nicht installiert" Sinn gemacht?! Grundsätzlich würde ich erwarten, dass alles, das angezeigt wird, also in dem Fall das JSONPath Eingabefeld, auch anwendbar ist. Außer ich kann in dieses Eingabefeld noch andere Transformationen eingeben, die nichts mit JSONPath zu tun haben.
udo1toni hat geschrieben: 3. Aug 2024 06:07 Falls Du Probleme hast, zu identifizieren, was fehlt, frag einfach :)
Danke, das werde ich gerne machen, aber erstmal will ich selbst schauen/nach einer Lösung suchen. Aktuell bin ich dran, warum meine Dachfensterrolläden, die über GPIOs geschaltet werden, nicht hoch- und runtergefahren werden. Da habe ich gemerkt, dass die GPIOs standardmäßig deaktiviert sind; nachher werde ich messen, ob die überhaupt geschaltet werden oder nicht.

Re: JSONPath funktioniert nicht mehr

Verfasst: 3. Aug 2024 17:44
von udo1toni
FelixK hat geschrieben: 3. Aug 2024 08:35 Keine Ahnung, ob auf den JSONPath dann überhaupt zugegriffen wurde
Definitiv nicht :) denn alle Transformation Services sind Addons (abgesehen von den Script Transformation Services ab OH4.0, die keine separaten Addons mehr sind, sondern als Teil der jeweiligen Scripting Engine mitkommen.
Bis openHAB 3.0 gab es überhaupt nur JScript als Option, irgendwann im Laufe von openHAB3 kamen dann weitere Scriptsprachen dazu, aber erst mit openHAB4 war das Ganze dann "sauber" integriert, so dass man nun Script Transformations mit jeder installierten Scripting Engine nutzen kann, ohne ein separates Addon zu installieren.

Core Funktionen sind lediglich die Main UI (also alles, was zwingend gebraucht wird, um openHAB überhaupt mittels Browser konfigurieren zu können) sowie der Bus (das B in openHAB), der durch die Items bereitgestellt wird. Die API gehört ebenfalls zum Core, schließlich nutzt Main UI die API, um mit openHAB zu interagieren. Der Core von openHAB ist recht klein...