Seite 1 von 2
JSONPATH und optionale Werte
Verfasst: 30. Dez 2021 10:08
von HiG
MoinZen..
mein Aqara-Button liefert leider einige Werte immer nur optional aus. Manchmal sieht der JSON-Teil so aus
manchmal so...
Code: Alles auswählen
{"action":"single","battery":100,"linkquality":36,"voltage":3022}
Wie bekomme ich die Fehlermeldung
Code: Alles auswählen
Executing the JSONPATH-transformation failed: Invalid path '$.action' in '{"battery":100,"linkquality":36,"voltage":3022}'
weg?
Ist zwar nur ein Warning...muss aber ja nicht im Log stehen
Re: JSONPATH und optionale Werte
Verfasst: 30. Dez 2021 18:39
von HABuserJM
Ein ähnliches Problem habe ich auch, siehe
hier in meinem Thread.
Re: JSONPATH und optionale Werte
Verfasst: 30. Dez 2021 19:49
von HiG
HABuserJM hat geschrieben: ↑30. Dez 2021 18:39
siehe hier in meinem Thread.
Hab Dir in Deinem Thread mal was geschrieben...das werde ich dann wohl auch so machen
Re: JSONPATH und optionale Werte
Verfasst: 31. Dez 2021 13:35
von udo1toni
Wie ist der Sensor angebunden? Wenn Du das mit mqtt machst, kannst Du verkettete Transformations verwenden. Leider ist das eher stiefmütterlich erklärt, aber immerhin im Hilfetext erwähnt:
Applies transformations to an incoming MQTT topic value. A transformation example for a received JSON would be "JSONPATH:$.device.status.temperature" for a json {device: {status: { temperature: 23.2 }}}. You can chain transformations by separating them with the intersection character ∩.
Du kannst also z.B. mittels REGEX zunächst den Teil "battery" suchen und anschließend JSONPATH auf das Ergebnis los lassen:
Nein, das ∩ Zeichen steht nicht auf der normalen Tastatur zur Verfügung, das Einfachste ist es, das Zeichen aus dem Hilfetext zu kopieren. Über die Zeichentabelle stehen drei verschiedene Zeichen zur Verfügung, die sich zum Verwechseln ähnlich sehen...
Re: JSONPATH und optionale Werte
Verfasst: 4. Sep 2022 00:20
von dandjo
Ich hatte das gleiche Problem und bin dazu übergegangen JSONPATH nicht zu verwenden, wenn Properties optional vorkommen können. Eine elegante Alternative ist die JS Transformation. Beispiel:
Re: JSONPATH und optionale Werte
Verfasst: 27. Aug 2023 17:20
von moforlive
Hallo,
falls sich noch jemand zu dem Thema auskennt, hätte ich da noch ein paar Fragen.
Bin auf das gleiche Problem, wie oben beschrieben, gestoßen.
Leider verstehe ich das mit dem
JS:|JSON.pase(input).battery nicht.
Wie muss ich das ganze angeben, damit es funktioniert.
Meine vollständige Zeile unter mqtt.things lautet:
Code: Alles auswählen
Type dimmer : Dim [ stateTopic="Wohnzimmer-ShellyDimmer02/stat/RESULT", transformationPattern="JSONPATH:$.Dimmer", commandTopic="Wohnzimmer-ShellyDimmer02/cmnd/Dimmer" ]
Das hier enthaltene transformationPattern funktoniert, jedoch mit den Fehlermeldugen im openhab.log
Code: Alles auswählen
2023-08-27 17:02:24.129 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.Dimmer' in '{"POWER":"ON"}'
2023-08-27 17:02:33.239 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.Dimmer' in '{"POWER":"OFF"}'
Ursache dafür ist ja eigentlich Tasmota, da hier mal so und mal so Werte ausgegeben werden.
Code: Alles auswählen
17:02:00.632 MQT: Wohnzimmer-ShellyDimmer02/stat/RESULT = {"POWER":"ON"}
17:02:03.278 MQT: Wohnzimmer-ShellyDimmer02/stat/RESULT = {"POWER":"ON","Dimmer":36}
Klar dass er dann eine Fehlermeldung schmeißt, wenn in der ersten Zeile kein "Dimmer" vorkommt.
Vielen Dank falls jemand helfen kann

Re: JSONPATH und optionale Werte
Verfasst: 27. Aug 2023 19:28
von Harka
versuch es mal mit
ggf. muss noch das JavaScript Scripting-Binding installiert sein.
Danke fürs nach vorne holen - hat mir gerade geholfen 
Re: JSONPATH und optionale Werte
Verfasst: 27. Aug 2023 19:37
von moforlive
Danke fürs super schneel Antworten.
Script funktiniert, jedoch mit "gleichem" Ergebnis. Sobald Tasmota nur den POWER Value per MQTT schickt, weiß OpenHAB, das was fehlt.
Sieht dann so aus, jedes mal wenn ich ohne Dimmer-Wert schalte:
Code: Alles auswählen
2023-08-27 19:34:48.341 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command 'null' from channel 'mqtt:topic:myMQTTBroker:WohnzimmerShellyDimmer02:Dim' not supported by type 'PercentageValue': Unknown String!
Re: JSONPATH und optionale Werte
Verfasst: 27. Aug 2023 20:12
von udo1toni
Korrekt läuft das genau wie von mir weiter oben beschrieben, indem Du zunächst ein REGEX laufen lässt, welches nur die Payload durchreicht, welche das Schlüsselwort enthält.
Natürlich muss sowohl REGEX als auch JSONPATH installiert sein.
Für die JavaScript Variante muss mindestens JavaScript installiert sein, welches ein "internes" JSONPath mitbringt.
Re: JSONPATH und optionale Werte
Verfasst: 27. Aug 2023 20:31
von moforlive
Danke auch für diese schnelle Antwort.
Habe es jetzt so geschrieben:
Code: Alles auswählen
Type switch : PowerSwitch [ stateTopic="Wohnzimmer-ShellyDimmer02/stat/POWER", transformationPattern="REGEX:.*POWER*∩JSONPATH:$.POWER", commandTopic="Wohnzimmer-ShellyDimmer02/cmnd/POWER" ]
Es kommen keine Fehlermeldungen im Log, weil wenn ich den Text hinter
REGEX:. änder kommen fehler.
Bloß wird jetzt der Status komplett ignoeriert.
MQTT Meldung sieht so aus:
Code: Alles auswählen
20:27:51.902 MQT: Wohnzimmer-ShellyDimmer02/stat/POWER = {"POWER":"OFF"}
Nach mehreren Tagen testen habe ich keine Lust mehr
