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?!
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
Stromzähler auslesen JSONPATH Warnings
-
- Beiträge: 18
- Registriert: 27. Dez 2022 09:19
Stromzähler auslesen JSONPATH Warnings
openHAB 4.0.3 im Docker auf Debian 11, Anbindung an Raspmatic, Hue, FHEM, Fritzbox, Buderus KM200, Worx, Bilnk, Alexa
- udo1toni
- Beiträge: 14057
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Stromzähler auslesen JSONPATH Warnings
Das Problem sind hier die Unterstriche. Du musst deshalb den Pfad anders schreiben: $.SM["16_7_0"]
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 18
- Registriert: 27. Dez 2022 09:19
Re: Stromzähler auslesen JSONPATH Warnings
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
Aber ich bekomme die Warnung weiterhin.
Ausprobiert habe ich
JSONPATH:$.SM.["16_7_0"]
JSONPATH:$.SM["16_7_0"]
LG
Christoph
openHAB 4.0.3 im Docker auf Debian 11, Anbindung an Raspmatic, Hue, FHEM, Fritzbox, Buderus KM200, Worx, Bilnk, Alexa
- udo1toni
- Beiträge: 14057
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Stromzähler auslesen JSONPATH Warnings
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:
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).
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
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).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 18
- Registriert: 27. Dez 2022 09:19
[Gelöst] Stromzähler auslesen JSONPATH Warnings
PERFEKT !!!
So funktioniert es (mit REGEX), keine Warnings mehr
Nochmals vielen Dank!
So funktioniert es (mit REGEX), keine Warnings mehr
Nochmals vielen Dank!
openHAB 4.0.3 im Docker auf Debian 11, Anbindung an Raspmatic, Hue, FHEM, Fritzbox, Buderus KM200, Worx, Bilnk, Alexa