Probleme beim Auslesen mit jsonpath

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Probleme beim Auslesen mit jsonpath

Beitrag von adele »

Hallo zusammen,
ich habe folgendes Problem: Von meinem Stromzähler-Lesegerät bekomme ich Daten im JSON- Format

Code: Alles auswählen

{"Anzeige" : 16611347.40, "T1" : 16611347.40, "T2" : 0.00, "Pall" : 539.00, "PL1" : 140.00, "PL2" : 57.00, "PL3" : 341.00, "Luftdruck" : 988.84}
Als Thinks-Datei steht folgendes:

Code: Alles auswählen

Thing http:url:StromZaehler "Stromzaehler" [
    baseURL="http://10.10.18.2/werte.json",
    refresh=15] {
        Channels:
         Type number : Stromzaehler_Anzeige  "ZaehlerAnzeige" [transformationPattern="JSONPATH:$.Anzeige"]
         Type number : Stromzaehler_T1       "Zaehler_T1"     [transformationPattern="JSONPATH:$.T1"]
         Type number : Stromzaehler_T2       "Zaehler_T2"     [transformationPattern="JSONPATH:$.T2"]
         Type number : Stromzaehler_Pall     "Zaehler_Power"  [transformationPattern="JSONPATH:$.Pall"]
         Type number : Stromzaehler_PL1      "Zaehler_L1"     [transformationPattern="JSONPATH:$.PL1"]
         Type number : Stromzaehler_PL2      "Zaehler_L2"     [transformationPattern="JSONPATH:$.PL2"]
         Type number : Stromzaehler_PL3      "Zaehler_L3"     [transformationPattern="JSONPATH:$.PL3"]
}
Warum wird ein item wie

Code: Alles auswählen

Number text1 {channel="http:url:StromZaehler:Stromzaehler_T1"} 
mit UNDEF beschickt. Wo steckt der Fehler beim Zugriff auf die JSON-Daten?

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Probleme beim Auslesen mit jsonpath

Beitrag von udo1toni »

Das Du das JSONPath Addon installiert? Weil, das sieht eigentlich gut aus (es fehlt nur die Unit, aber die verhindert ja nicht, dass der Pfad ausgewertet wird)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Re: Probleme beim Auslesen mit jsonpath

Beitrag von adele »

Hallo Udo,
ja das Addon ist da, im Addon-Store wird neben JSONPath der (REMOVE) -Button angezeigt.
Mit Unit meinst Du

Code: Alles auswählen

[transformationPattern="JSONPATH:$.UNIT.PL3"
und da steht dann so etwas wie POWer drin? Wenn es daran liegen sollte, dann muss ich meinen Leser einfach noch mal umprogrammieren.
Mir würde aber auch eine Lösung reichen, die so etwas verarbeitet wie:

Code: Alles auswählen

[16611822.20, 16611822.20, 0.00, 757.00, 139.00, 374.00, 242.00, 988.73]
Auch hier kann ich an den Code noch Hand anlegen um die Daten mundgerecht dem OH4 zu servieren.

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Probleme beim Auslesen mit jsonpath

Beitrag von udo1toni »

Nein, mit unit meine ich

Code: Alles auswählen

Thing http:url:StromZaehler "Stromzaehler" [
    baseURL="http://10.10.18.2/werte.json",
    refresh=15] {
        Channels:
         Type number : Anzeige  "Zähler Anzeige" [transformationPattern="JSONPATH:$.Anzeige", unit="kWh"]
         Type number : T1       "Zähler T1"     [transformationPattern="JSONPATH:$.T1", unit="kWh"]
         Type number : T2       "Zähler T2"     [transformationPattern="JSONPATH:$.T2", unit="kWh"]
         Type number : Pall     "Zähler Power"  [transformationPattern="JSONPATH:$.Pall", unit="kW"]
         Type number : PL1      "Zähler L1"     [transformationPattern="JSONPATH:$.PL1", unit="kW"]
         Type number : PL2      "Zähler L2"     [transformationPattern="JSONPATH:$.PL2", unit="kW"]
         Type number : PL3      "Zähler L3"     [transformationPattern="JSONPATH:$.PL3", unit="kW"]
}
falls dies die Einheiten sind... :) ich kenne ja Deinen Zähler nicht.
Anschließend kannst Du dann die Items so definieren:

Code: Alles auswählen

Number:Energy StromAnzeige "Stromzähler " {channel="http:url:StromZaehler:Anzeige", unit="kWh", stateDescription=""[pattern="%.1f kWh"]}
Number:Energy StromT1      "Stromzähler " {channel="http:url:StromZaehler:T1", unit="kWh", stateDescription=""[pattern="%.1f kWh"]}
Number:Energy StromT2      "Stromzähler " {channel="http:url:StromZaehler:T2", unit="kWh", stateDescription=""[pattern="%.1f kWh"]}
Number:Power  StromAll     "Stromzähler " {channel="http:url:StromZaehler:Pall", unit="kW", stateDescription=""[pattern="%.1f kW"]}
Number:Power  StromL1      "Stromzähler " {channel="http:url:StromZaehler:PL1", unit="kW", stateDescription=""[pattern="%.1f kW"]}
Number:Power  StromL2      "Stromzähler " {channel="http:url:StromZaehler:PL2", unit="kW", stateDescription=""[pattern="%.1f kW"]}
Number:Power  StromL3      "Stromzähler " {channel="http:url:StromZaehler:PL3", unit="kW", stateDescription=""[pattern="%.1f kW"]}
und Die Unit darf beim Item auch abweichen, sie muss nur zur Größe passen. Du könntest also auch MWs (MegaWattsekunden) oder J (Joule) statt kWh für die Energiemenge angeben, oder mW (Milliwatt) statt kW für die Leistung, openHAB rechnet das dann automatisch um. Die unit beim Item sollte aber nach der Ersteinrichtung nicht mehr geändert werden, weil die Persistence dieses Feld nutzt - die state Description kannst Du ändern nach Lust und Laune.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Re: Probleme beim Auslesen mit jsonpath

Beitrag von adele »

Hallo Udo,
vielen Dank für Deine Mühe. Der Fehler muss aber irgendwo sonst stecken. Ich habe Deine Code-Schnippsel einfach in meine Things und in die Items - Datein geschrieben. Das Fehlerprotokoll gibt dann folgendes aus:

Code: Alles auswählen

2024-01-17 20:45:17.521 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromAnzeige' changed from NULL to UNDEF
2024-01-17 20:45:17.542 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromT1' changed from NULL to UNDEF
2024-01-17 20:45:17.547 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromT2' changed from NULL to UNDEF
2024-01-17 20:45:17.551 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromAll' changed from NULL to UNDEF
2024-01-17 20:45:17.556 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromL1' changed from NULL to UNDEF
2024-01-17 20:45:17.560 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromL2' changed from NULL to UNDEF
2024-01-17 20:45:17.564 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'StromL3' changed from NULL to UNDEF
Ich habe mal in der Things den Wert von "Type number : Anzeige" auf "Type string : Anzeige" gesetzt und auch das erste Item entsprechend geändert - dann bekomme ich meine komplette JSON-Datei als String angezeigt.

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Probleme beim Auslesen mit jsonpath

Beitrag von udo1toni »

Ja, das deutet halt darauf hin, dass JSONPath nicht installiert ist.
Alternativ ist das JSON Objekt ungültig, dann wäre das Beispiel von oben halt nicht vollständig, denn das ist ok.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Re: Probleme beim Auslesen mit jsonpath

Beitrag von adele »

Ich noch mal -
meine "/var/lib/openhab/config/org/openhab/addons.config" sieht so aus:

Code: Alles auswählen

:org.apache.felix.configadmin.revision:=L"19"
automation="jsscripting"
binding="astro,tr064,upnpcontrol,ftpupload,http,lgwebos,zwave,exec,avmfritz"
persistence="rrd4j,mapdb"
service.pid="org.openhab.addons"
transformation="regex,jsonpath,map,exec"
ui="basic"
JSONPath sollte also da sein.

Kann es sein, dass an meinen JSON-Daten irgend etwas nicht stimmt oder ich noch ein EOT oder \n anhängen muss, damit die Verarbeitung in Gang kommt?
Deine Code-Segmente habe ich 1:1 übernommen, genau so wie mein Zeug am Anfang - ich bin etwas ratlos.

Ist mir gerade noch so aufgefallen: die [Info] kommt auch nicht wieder - Anzeige in der Fehlerkonsole genau ein mal!

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Probleme beim Auslesen mit jsonpath

Beitrag von peter-pan »

udo1toni hat geschrieben: 17. Jan 2024 22:06 Alternativ ist das JSON Objekt ungültig, dann wäre das Beispiel von oben halt nicht vollständig, denn das ist ok.
Das denke ich auch. Dein Beispiel

Code: Alles auswählen

{"Anzeige" : 16611347.40, "T1" : 16611347.40, "T2" : 0.00, "Pall" : 539.00, "PL1" : 140.00, "PL2" : 57.00, "PL3" : 341.00, "Luftdruck" : 988.84}
ist ok und sollte deshalb auch so wie es Udo beschrieben hat, ausgewertet werden können.

Wenn du als Erstes einen Channel

Code: Alles auswählen

Type string : alles      "Alle Werte"  [ stateTransformation="JSONPATH:$.*" ]
in dein Thing einfügst und ein passendes Item dazu anlegst,

Code: Alles auswählen

String   Alles       "String komplett"        {channel="http:url:StromZaehler:alles"}
dann sollte auch dieses Ergebnis

Code: Alles auswählen

[16611822.20, 16611822.20, 0.00, 757.00, 139.00, 374.00, 242.00, 988.73]
in deinem String stehen.

Die anderen Items sollten dann auch richtig gefüllt werden.

Welche Version von openHAB hast du denn laufen ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Probleme beim Auslesen mit jsonpath

Beitrag von udo1toni »

Oh... ja, ganz dummer Fehler...
Das Schlüsselwort heißt bei http tatsächlich stateTransformation, das Schlüsselwort transformationPattern stammt stattdessen von mqtt. (doof, dass hier unterschiedliche Begriffe eingeführt wurden... das sollte mal angeglichen werden, so wie "damals" host, Hostname und ipAddress vereinheitlicht wurden...

Das Thing muss also so aussehen:

Code: Alles auswählen

Thing http:url:StromZaehler "Stromzaehler" [
    baseURL="http://10.10.18.2/werte.json",
    refresh=15] {
        Channels:
         Type number : Anzeige  "Zähler Anzeige" [stateTransformation="JSONPATH:$.Anzeige", unit="kWh"]
         Type number : T1       "Zähler T1"      [stateTransformation="JSONPATH:$.T1", unit="kWh"]
         Type number : T2       "Zähler T2"      [stateTransformation="JSONPATH:$.T2", unit="kWh"]
         Type number : Pall     "Zähler Power"   [stateTransformation="JSONPATH:$.Pall", unit="kW"]
         Type number : PL1      "Zähler L1"      [stateTransformation="JSONPATH:$.PL1", unit="kW"]
         Type number : PL2      "Zähler L2"      [stateTransformation="JSONPATH:$.PL2", unit="kW"]
         Type number : PL3      "Zähler L3"      [stateTransformation="JSONPATH:$.PL3", unit="kW"]
}
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Re: Probleme beim Auslesen mit jsonpath

Beitrag von adele »

Und LÄUFT!
Danke Udo!
Aber auf den Fehler muss man erst mal kommen - nochmals vielen Dank.

Antworten