[gelöst] http Abfrage Volkszähler mit OH3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Kuli
Beiträge: 66
Registriert: 17. Jan 2017 20:51
Answers: 0

[gelöst] http Abfrage Volkszähler mit OH3

Beitrag von Kuli »

Hallo.

Ich habe hochgerüstet auf OH3 bzw. OH3 neu aufgesetzt. Es läuft die Version 3.0.0 also das gerade releaste Build.
So weit so gut funktioniert alles (Z-Wave-, Mail-, Hue-, Pushover-, Netatmo-, Astro- und Sonos-Binding).
Jetzt habe ich mich dran gemacht und wollte wie unter OH2 meinen Volkszähler aus der MIddelware per http auslesen.

Das unter OH2 laufende Item dazu lautet
Number VZ_Bezug "Bezug [%.3f W]" (Strom) {http="<[http://192.168.4.10:8090/:60000:JSONPAT ... les[0][1])]"}
Ich habe in OH3 jetzt genau wie unter OH2 das HTTP Binding und unter Transformation die JSONPath Transformation installiert.
Unter Items habe ich dann das item mit dem "+" Zeichen und dann "Add Items from Textual Definition" erstellt.
Ich bekomme keine Fehlermeldung aber der Wert des Items ist "NULL".

So hat und funktioniert es zumindest unter Oh2, oder habe ich etwas vergessen?
Unter Things hatte ich dann noch ein http Thing mit der Adresse des Volkszählers angezeigt, was auch als online angezeigt wird, aber ohne Erfolg.

Hat noch jemand eine Idee? Muss ich einen Channel hinzu fügen? Oder funktioniert OH3 hier einfach anders?

Grüße Kuli
Zuletzt geändert von Kuli am 28. Dez 2020 09:48, insgesamt 1-mal geändert.

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

http Abfrage Volkszähler mit OH3

Beitrag von udo1toni »

Du hast unter openHAB2 das http1 Binding genutzt. Unter openHAB3 gibt es keine V1 Bindings mehr. Du musst zwingend Things und Channel anlegen sowie die Channel mit dem Item verknüpfen.
So als grobe Erklärung: Ein Thing in http3 entspricht einem http cache in http1. Ich habe zuhause (tm) schon Volkszähler auf http3 umgestellt, das könnte ich als Vorlage posten, aber erst heute Abend.


Gesendet von iPad mit Tapatalk
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Kuli
Beiträge: 66
Registriert: 17. Jan 2017 20:51
Answers: 0

Re: http Abfrage Volkszähler mit OH3

Beitrag von Kuli »

Hallo ja poste gerne mal wie du es gemacht hast.

Ich hab mich schon mal selber probiert und unter dem Thing "Volkszaehler" mit der http-Adresse inclusive Port des Volkszählers einen Channel "Leistung Volkszaehler" angelegt. Unter diesem Channel habe ich dann ein Item "Leistung Volkszaehler" angelegt und es mit dem Profil "JSONPATH" und der JSONPath Expression "$.data[0].tuples[0][1]" versehen.

Eine Abfrage scheint damit schon mal zu funktionieren, aber ich bekomme die Fehlermeldung:

"[ofiles.JSonPathTransformationProfile] - Could not transform state 'UNDEF' with function '$.data[0].tuples[0][1]' and format '%.3f'"

1. Muss ich dem Channel noch die JSONPath Transformation zuweisen?
2. Dürfen Channel und Item nicht den selben Namen haben?
3. Wie muss ich das "Thing" Volkszaehler" einstellen? Nur die Adresse mit Port oder einen bestimmten "Authentication Mode " oder "Content Type "?

Grüße

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

Re: http Abfrage Volkszähler mit OH3

Beitrag von udo1toni »

So, hier mal mein http volkszähler Thing:

Code: Alles auswählen

Thing http:url:vz "Volkszähler 10min" [ 
    baseURL="http://vz.udo.lokal/middleware.php/data.json?from=-10Minute&to=now&uuid[]=aaaa&uuid[]=bbbb&uuid[]=cccc&uuid[]=dddd",
    refresh=60
    ] {
    Channels: 
        // uuid="aaaa" -> Strom Altbau
        Type number : ch1avg "Strom Altbau avg" [stateTransformation="JSONPATH:$.data[?(@.uuid=='aaaa')].average"]
        Type number : ch1min "Strom Altbau min" [stateTransformation="JSONPATH:$.data[?(@.uuid=='aaaa')].min[1]"]
        Type number : ch1max "Strom Altbau max" [stateTransformation="JSONPATH:$.data[?(@.uuid=='aaaa')].max[1]"]
        Type number : ch1con "Strom Altbau con" [stateTransformation="JSONPATH:$.data[?(@.uuid=='aaaa')].consumption"]
        // uuid="bbbb" -> Bezug
        Type number : ch2avg "Bezug avg" [stateTransformation="JSONPATH:$.data[?(@.uuid=='bbbb')].average"]
        Type number : ch2min "Bezug min" [stateTransformation="JSONPATH:$.data[?(@.uuid=='bbbb')].min[1]"]
        Type number : ch2max "Bezug max" [stateTransformation="JSONPATH:$.data[?(@.uuid=='bbbb')].max[1]"]
        Type number : ch2con "Bezug con" [stateTransformation="JSONPATH:$.data[?(@.uuid=='bbbb')].consumption"]
        // uuid="cccc" -> Einspeisung
        Type number : ch3avg "Einspeisung avg" [stateTransformation="JSONPATH:$.data[?(@.uuid=='cccc')].average"]
        Type number : ch3min "Einspeisung min" [stateTransformation="JSONPATH:$.data[?(@.uuid=='cccc')].min[1]"]
        Type number : ch3max "Einspeisung max" [stateTransformation="JSONPATH:$.data[?(@.uuid=='cccc')].max[1]"]
        Type number : ch3con "Einspeisung con" [stateTransformation="JSONPATH:$.data[?(@.uuid=='cccc')].consumption"]
        // uuid="dddd" -> Gas
        Type number : ch4avg "Gas avg" [stateTransformation="JSONPATH:$.data[?(@.uuid=='dddd')].average"]
        Type number : ch4min "Gas min" [stateTransformation="JSONPATH:$.data[?(@.uuid=='dddd')].min[1]"]
        Type number : ch4max "Gas max" [stateTransformation="JSONPATH:$.data[?(@.uuid=='dddd')].max[1]"]
        Type number : ch4con "Gas con" [stateTransformation="JSONPATH:$.data[?(@.uuid=='dddd')].consumption"]
}
Die uuids sind natürlich durch die korrekten zu ersetzen. Ich habe vier Zähler, die ich auslese.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Kuli
Beiträge: 66
Registriert: 17. Jan 2017 20:51
Answers: 0

Re: http Abfrage Volkszähler mit OH3

Beitrag von Kuli »

Hi Danke.

Ist das jetzt dein Thing in OH3 oder OH2?

Ich habe es jetzt wie folgt unter OH3 gelöst:

1. Unter dem http Binding ein Volkszähler Thing angelegt mit der kompletten "Base URL" inclusive Port. Ansonsten keine weiteren Einstellungen für das Thing. Damit geht das Thing online.
2. Dann auf Channels und dort unter "Add Channel" einen Number Channel erstellt. Soweit war ich ja bereits als ich die Thread eröffnet habe.
Den Fehler, den ich gemacht habe war wohl, die JSONPATH-Abftrage wie bei OH2 in das Item ein zu binden. Hier in OH3 hatte ich Erfolg mit der Abfrage im Channel unter "Configuaration" - "State Transformation". Dort habe ich dann "JSONPATH:$.data[0].tuples[0][1]" eingetragen.
3. In Step 3 brauche ich dann nur noch unter dem Channel ein Number Item erstellen und der Wert wurde passend ausgelesen und im Main-UI angezeigt.

Was ich leider noch nicht hin bekommen habe ist die automatsiche Anzeige in der Gruppe "Leistung", der ich das Item zugeordnet habe.
In der Sitemap erscheint dann in der Gruppe Leistung zwar der Text Leistung Volkszähler aber leider ohne Wert.

Ich denke hier liegt der Fehler in der Formatierung. In OH2 musste man z.B. [%.3f W] in der Item Definition eintragen.
Bei OH3 tappe ich hier völlig im Dunkeln, wo ich das Format einstellen kann.

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

Re: http Abfrage Volkszähler mit OH3

Beitrag von udo1toni »

Das ist natürlich das http Thing in openHAB2. In openHAB3 gerade mal testweise angelegt:

Code: Alles auswählen

UID: http:url:vz
label: Volkszähler 10min
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  refresh: 60
  baseURL: http://192.168.178.99/middleware.php/data.json?from=-10Minute&to=now&uuid[]=aaaa&uuid[]=bbbb&uuid[]=cccc&uuid[]=dddd
  commandMethod: GET
  timeout: 3000
channels:
  - id: ch1avg
    channelTypeUID: http:number
    label: Strom Altbau avg
    description: ""
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='aaaa')].average
  - id: ch1min
    channelTypeUID: http:number
    label: Strom Altbau min
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='aaaa')].min[1]
  - id: ch1max
    channelTypeUID: http:number
    label: Strom Altbau max
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='aaaa')].max[1]
  - id: ch1con
    channelTypeUID: http:number
    label: Strom Altbau con
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='aaaa')].consumption
  - id: ch2avg
    channelTypeUID: http:number
    label: Bezug avg
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='bbbb')].average
  - id: ch2min
    channelTypeUID: http:number
    label: Bezug min
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='bbbb')].min[1]
  - id: ch2max
    channelTypeUID: http:number
    label: Bezug max
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='bbbb')].max[1]
  - id: ch2con
    channelTypeUID: http:number
    label: Bezug con
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='bbbb')].consumption
  - id: ch3avg
    channelTypeUID: http:number
    label: Einspeisung avg
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='cccc')].average
  - id: ch3min
    channelTypeUID: http:number
    label: Einspeisung min
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='cccc')].min[1]
  - id: ch3max
    channelTypeUID: http:number
    label: Einspeisung max
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='cccc')].max[1]
  - id: ch3con
    channelTypeUID: http:number
    label: Einspeisung con
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='cccc')].consumption
  - id: ch4avg
    channelTypeUID: http:number
    label: Gas avg
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='dddd')].average
  - id: ch4min
    channelTypeUID: http:number
    label: Gas min
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='dddd')].min[1]
  - id: ch4max
    channelTypeUID: http:number
    label: Gas max
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='dddd')].max[1]
  - id: ch4con
    channelTypeUID: http:number
    label: Gas con
    description: null
    configuration:
      stateTransformation: JSONPATH:$.data[?(@.uuid=='dddd')].consumption
Die Sitemap muss ihre Label vermutlich direkt konfiguriert bekommen, in der Itemdefinition sehe ich dafür jedenfalls keine Option.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Kuli
Beiträge: 66
Registriert: 17. Jan 2017 20:51
Answers: 0

Re: http Abfrage Volkszähler mit OH3

Beitrag von Kuli »

Ja so sieht es schon besser aus und die Abfrage läuft erfolgreich im angegebenen Intervall. Danke auch für deinen Hinweis, das Label direkt im Item zu konfigurieren. Ich habe die Definition einfach mit in den Labeltext geschreiben "Leistung Volkszähler [%.3f W]". Hätte ich auch drauf kommen können ;-)
Was Interessant ist die Definition im Item "Leistung Volkszähler [%.3f W]" reicht aus, wenn man es in der Sitemap z.B. einer Gruppe zugeordnet darstellt. Wenn man aber in der Sitemap ein Defaultwert mit dem Item anlegt, muss das Label mit "Leistung Volkszähler [%.3f W]" wieder neu definiert werden.
Jetzt läuft alles fein. Leistung und Verbrauch werden wie unter OH2 regelmäßig abgefragt und dargestellt.
Zuletzt geändert von Kuli am 29. Dez 2020 13:16, insgesamt 1-mal geändert.

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

Re: http Abfrage Volkszähler mit OH3

Beitrag von udo1toni »

Kuli hat geschrieben: 28. Dez 2020 09:47Wenn man aber in der Sitemap ein Defaultwert mit dem Item anlegt, muss das Laabel mit "Leistung Volkszähler [%.3f W]" wieder neu definiert werden.
Das ist mir nicht so ganz klar, was meinst Du damit?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Kuli
Beiträge: 66
Registriert: 17. Jan 2017 20:51
Answers: 0

Re: [gelöst] http Abfrage Volkszähler mit OH3

Beitrag von Kuli »

Ich meinte:
Wenn ich unter dem Channel z.B "Leistung Volkszähler" ein Number Item mit dem Label "Leistung Volkszähler (Watt)[%.3f ]" deklariere un dieses der Gruppe (Group Membership) "Leistung (Watt) zuordne, wird in der Gruppe der Text und der Wert des Item angezeigt.

Wenn ich selbiges Item in der Sitemap in eine Gruppe oder ein Frame (als Default Widget) einfügen will, wird nur der Text "Leistung Volkszähler", aber nicht der Wert des Items angezeigt. Das Label des Items wird hier nicht übernommen.Ich musste es also hier nochmal mit "Leistung Volkszähler (Watt)[%.3f ]" deklarieren, dann ging es.

Vielleicht ist das "Default Widget" nicht der richtige Weg ein Item in einer Sitemap dar zu stellen, aber ich habe alle meine Items so in meine Sitemap geholt?!

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

Re: [gelöst] http Abfrage Volkszähler mit OH3

Beitrag von udo1toni »

Doch, das Default Widget sollte eigentlich problemlos funktionieren. openHAB entscheidet dann halt selbst, wie das Item dargestellt wird. Das Label sollte aber so übernommen werden, wie es in der Itemdefinition hinterlegt ist.
Das Group Widget lasse ich aber links liegen, es taugt allenfalls zum schnellen Antesten, aber man verliert jegliche Kontrolle über die Darstellung innerhalb des Group Widgets.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten