Seite 1 von 1

Stromzähler auslesen JSONPATH Warnings

Verfasst: 28. Jul 2023 18:34
von Taifun2300
Hallo,

ich lese meinen Stromzähler via Tasmota und JSON Path aus.
Also z.B.
"JSONPATH:$.SM.16_7_0" für die aktuelle Leistung gesamt

Geliefert werden die Daten unter dem Topic
"tele/Stromzaehler/SENSOR"

Die Nachricht sieht so aus
{"Time":"2023-07-28T17:04:32","SM":{"16_7_0":153.49}}

Dazu gibt es auch noch Nachrichten für die 3 Phasen
{"Time":"2023-07-28T17:04:32","SM":{"36_7_0":35.56}}
{"Time":"2023-07-28T17:04:32","SM":{"56_7_0":147.45}}
{"Time":"2023-07-28T17:04:32","SM":{"76_7_0":-29.52}}

Das Auslesen klappt einwandfrei und funktioniert!

Aber das Log wird zugemüllt mit Warnings:
2023-07-28 18:04:32.202 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.76_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"36_7_0":35.56}}'
2023-07-28 18:04:32.205 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.56_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"36_7_0":35.56}}'
2023-07-28 18:04:32.206 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.16_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"36_7_0":35.56}}'
2023-07-28 18:04:32.235 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.36_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"56_7_0":147.45}}'
2023-07-28 18:04:32.236 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.76_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"56_7_0":147.45}}'
2023-07-28 18:04:32.238 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.16_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"56_7_0":147.45}}'
2023-07-28 18:04:32.261 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.36_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"76_7_0":-29.52}}'
2023-07-28 18:04:32.263 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.SM.56_7_0' in '{"Time":"2023-07-28T17:04:32","SM":{"76_7_0":-29.52}}'

Diese Warning sind ein Rätsel für mich?! :shock:

Ich habe angenommen, bzw. es funktioniert ja auch, die Definition im Channel ist ein Filter um die Daten für diesen Channel zu ermitteln.
Mache ich einen Gedankenfehler, übersehe ich etwas ?

Für jeden Hinweis, inklusive wie bekomme ich die Warnings aus dem Log dankbar ..... :)

LG
Christoph

Re: Stromzähler auslesen JSONPATH Warnings

Verfasst: 28. Jul 2023 18:52
von udo1toni
Das Problem sind hier die Unterstriche. Du musst deshalb den Pfad anders schreiben: $.SM["16_7_0"]

Re: Stromzähler auslesen JSONPATH Warnings

Verfasst: 29. Jul 2023 10:03
von Taifun2300
Vielen lieben Dank für die schnelle Hilfe und Grüße nach Darmstadt aus Egelsbach ;)

Aber ich bekomme die Warnung weiterhin.

Ausprobiert habe ich
JSONPATH:$.SM.["16_7_0"]
JSONPATH:$.SM["16_7_0"]

LG
Christoph

Re: Stromzähler auslesen JSONPATH Warnings

Verfasst: 29. Jul 2023 11:44
von udo1toni
Eigentlich gibt es da nichts auszuprobieren :)

Einzig könntest Du die doppelten Anführungszeichen durch einfache ersetzen, je nach Kontext kann das notwendig sein.
Der Online Tester http://jsonpath.com/ erkennt jede der Schreibweisen als korrekt an (selbst die ursprüngliche), VS Code gibt die von mir genannte an, VS Code liegt gewöhnlich richtig :)

Wo hast Du die Transformation eingerichtet, im Channel? Dann zeige bitte mal die Codeansicht des Channels.

STOP, Kommando zurück...

Das Problem ist ein ganz anderes... Ich realisiere das jetzt erst, obwohl Du es oben eigentlich direkt hingeschrieben hast... Sorry, hab gerade die Leitung mal unter meinem Fuß weggeschnippt...

Das Problem ist, dass hier unterschiedliche JSON Objekte geliefert werden, in denen nicht immer der geforderte Wert geliefert wird.
In diesem Fall musst Du zwei Transformations verknüpfen:

Code: Alles auswählen

REGEX:(.*16_7_0.*)∩JSONPATH:$.SM.16_7_0
Probiere es ruhig zunächst mit der einfachen Schreibweise, die hier ja gar nicht die Ursache des Problems zu sein scheint.

Du musst auf jeden Fall zusätzlich zu JSONPATH noch REGEX als Transformation Service installiert haben.
Die Verknüpfung bewirkt, dass nur JSON Objekte weitergegeben werden, in denen die Zeichenfolge 16_7_0 enthalten ist. Nur diese kommen überhaupt in JSONPATH an... Das Verknüpfungssymbol erhältst Du am einfachsten über den Hilfstext zur Incomming Value Transformation in der UI, es ist das Symbol, was in Windows Zeichentabelle als "Durchschnitt" bezeichnet wird. Gemeint ist aber die Schnittmenge (Mengenlehre - lang, lang ist's her).

[Gelöst] Stromzähler auslesen JSONPATH Warnings

Verfasst: 29. Jul 2023 13:58
von Taifun2300
PERFEKT !!!

So funktioniert es (mit REGEX), keine Warnings mehr :D
Nochmals vielen Dank!