youless ls120, JOSONPath, von OH2 zu OH3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
redaeq
Beiträge: 18
Registriert: 26. Aug 2022 14:10
Answers: 0

youless ls120, JOSONPath, von OH2 zu OH3

Beitrag von redaeq »

Hi zusammen,
ich bin kürzlich von OH2 auf OH3 gewechselt. Hab alles soweit gut umziehen können, bis auf meinen Youless LS120 Stromzähler.

Vorher sagen die Items so aus:

Code: Alles auswählen

Number LS120EnergyTotal         "EnergyTotal [%,.3f kWh]"         <energy>    { http="<[http://192.168.192.112/a?f=j:10000:JSONPATH($.cnt)]" }
Number LS120EnergyCurrent       "EnergyCurrent [%,.0f Watt]"       <energy>   { http="<[http://192.168.192.112/a?f=j:10000:JSONPATH($.pwr)]" }
Number LS120EnergySignal        "EnergySignal [%.0f %%]"          <energy>    { http="<[http://192.168.192.112/a?f=j:10000:JSONPATH($.lvl)]" }
Soweit ich mich schon belesen habe, gibt es in OH3 das httpv1 binding nicht mehr und deswegen Probleme.
Ich hab allerdings null Erfolg beim Anlegen des Things in OH3 über die UI.
Jsonpath und regex transformation addons sind bereits installiert.

Das hier möchte ich auslesen von dem Stromzähler:
{"cnt":" 28476,306","pwr":192,"lvl":13,"dev":"(&plusmn;0%)","det":"","con":"","sts":"","cs0":" 0,000","ps0":0,"raw":143}

So habe ich das Thing konfiguriert:
Bild
Bild
Bild
Bild

mhh die Bilder klappen nicht...hier die Links
http://www.oksg.de/tmp/1.png
http://www.oksg.de/tmp/2.png
http://www.oksg.de/tmp/3.png
http://www.oksg.de/tmp/4.png

Leider komm ich nicht weiter. Ich hatte auch mal mit regex rumprobiert.
aber mit dem REGEX "pwr":(\d*.\d*.\d)

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

Re: youless ls120, JOSONPath, von OH2 zu OH3

Beitrag von udo1toni »

Das ist die falsche Stelle für den JSONPATH :)

Oder wahlweise ist es auch die richtige Stelle, dann ist aber der Channeltyp falsch. :)

Der "Signalweg" läuft folgendermaßen: Das http Thing hat eine Base URL. Diese kann ergänzt werden (praktisch, wenn man von einer Adresse mehrere verschiedene Unterseiten abholen will oder auch zum Steuern eine andere Seite aufrufen muss als für den Status).
Du könntest also einen Teil der URL über den Channel selbst definieren (show advanced -> dann getrennte Felder für command und state extension - die Base URL wird vorangestellt)
Die empfangenen Daten landen im Channel. Ist der Channel vom Typ String, gibt es dabei auch keine Probleme. Ist der Channel vom Typ Number, so muss der empfangene Wert auch vom Typ Number sein (das ist hier nicht der Fall, wir haben es mit einem JSON Objekt zu tun).
Wenn die empfangenen Daten als JSON Objekt vorliegen oder anderweitig verpackt sind, muss man eine State Transformation durchführen, um direkt die gewünschten Werte zu extrahieren (hier z.B.: JSONPATH:$.pwr). Dann erhält man einen Number Wert und kann diesen in einem Number Channel speichern, den man dann ohne weiteren Umweg direkt mit einem Number Item verlinken kann.

Hier willst Du aus einem(!) JSON Objekt mehrere Werte auslesen. Der Channel ist damit ziemlich sicher ein Read Only Channel. Hier bietet es sich an, stattdessen einen String Channel zu verwenden. In diesem landet das vollständige JSON Objekt, welches dann anschließend über mehrere verlinkte Items ausgewertet werden kann. Aber wichtig: der Channel muss vom Typ String sein. Die verlinkten Items dürfen vom Typ Number sein, da ja die JSONPATH Transformation aus dem String exakt den Zahlenwert extrahiert. Du kannst beliebig viele Items mit dem selben Channel verlinken, das hat den Vorteil, dass es nur einen http-Request gegen das externe Gerät gibt. (Das konnte man unter openHAB2 mit dem http Cache erreichen).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

redaeq
Beiträge: 18
Registriert: 26. Aug 2022 14:10
Answers: 0

Re: youless ls120, JOSONPath, von OH2 zu OH3

Beitrag von redaeq »

Mega, das ist mal ein guter Hinweis gewesen.
pwr bekomme ich jetzt ausgegeben.
cnt allerdings nicht, das könnte an dem führenden Leerzeichen liegen?!
Hast du da noch ne Idee?
bzw. das steht ja noch in ""....

redaeq
Beiträge: 18
Registriert: 26. Aug 2022 14:10
Answers: 0

Re: youless ls120, JOSONPath, von OH2 zu OH3

Beitrag von redaeq »

Hab es jetzt als String Item angelegt, dann bekomm ich das angezeigt.
Für Grafana muss man dann auf State Timeline wechseln, dann bekommt man das schön angezeigt.
VIelen vielen Dank nochmal!!

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

Re: youless ls120, JOSONPath, von OH2 zu OH3

Beitrag von udo1toni »

Leicht anders formatiert:

Code: Alles auswählen

{
    "cnt": " 28476,306",
    "pwr": 192,
    "lvl": 13,
    "dev": "(&plusmn;0%)",
    "det": "",
    "con": "",
    "sts": "",
    "cs0": " 0,000",
    "ps0": 0,
    "raw": 143
}
Der Name des Wertes steht jeweils links, weil der Name ein String ist, ist er in Anführungszeichen.
Der Wert steht jeweils rechts. Sobald ein Wert in Anführungszeichen steht, ist es ein String.
Das Problem ist hier das "falsche" Dezimaltrennzeichen, zwar schreibt man in Deutschland 6 Komma 3 (6,3) aber das ist innerhalb JSON nicht erlaubt. Die Zahl muss zwingend in amerikanischer Schreibweise geschrieben werden, also 6 Punkt 3 (6.3). Das Komma dient außerdem als Datensatztrenner.
Die Programmierer des Stromzählers haben offensichtlich nicht so weit gedacht und stattdessen den Zählerstand einfach als String formatiert.

Leider hast Du damit denn in openHAB ein Problem (zumindest, wenn Du das JSON mit dem Profile JSONPATH zerlegst.
Drei Möglichkeiten: 1. Du legst für diese Werte zwei eigene Channels an (also cnt und und cs0) und nimmst die JSONPATH Transformation im Channel vor. Anschließend kannst Du den gewonnenen String entweder noch in der State Transformation verkettet an JS übergeben oder JS im Profile verwenden, um aus dem String die Zahl zu gewinnen (Komma gegen Punkt tauschen, Leerzeichen entfernen).
2. Du Definierst eine JS Transformation, die direkt den JSONPATH enthält und die Wandlung vornimmt. Leider kann man einer JS Transformation keinen zweiten Parameter übergeben, so dass Du diese JS Transformation kopieren musst, um auch den zweiten Wert so zu bekommen. Dafür kann ST Du aber weiter mit nur einem Channel arbeiten.
3. Du lässt den String im Item, definierst je ein weiteres Item für diese beiden Werte und nimmst die Umrechnung in einer Rule vor.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

redaeq
Beiträge: 18
Registriert: 26. Aug 2022 14:10
Answers: 0

Re: youless ls120, JOSONPath, von OH2 zu OH3

Beitrag von redaeq »

Uiuiui, ok das klingt im aktuellen Stadium etwas zu wild für mich, ich glaub da muss ich mich erst noch fortbilden ;)
Ich vermute, dass Möglichkeit 3 am nächsten an meine Kenntnisse rankommen, allerdings muss ich mich da selbst etwas durchwursteln ;)
Ich danke dir für die ausführlichen und sachlichen Hinweise :)

Antworten