Seite 1 von 2
[gelöst] http Abfrage Volkszähler mit OH3
Verfasst: 22. Dez 2020 13:58
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
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
http Abfrage Volkszähler mit OH3
Verfasst: 22. Dez 2020 16:50
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
Re: http Abfrage Volkszähler mit OH3
Verfasst: 23. Dez 2020 10:45
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
Re: http Abfrage Volkszähler mit OH3
Verfasst: 25. Dez 2020 23:40
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.
Re: http Abfrage Volkszähler mit OH3
Verfasst: 27. Dez 2020 17:27
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.
Re: http Abfrage Volkszähler mit OH3
Verfasst: 27. Dez 2020 23:48
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.
Re: http Abfrage Volkszähler mit OH3
Verfasst: 28. Dez 2020 09:47
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.
Re: http Abfrage Volkszähler mit OH3
Verfasst: 28. Dez 2020 23:13
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?
Re: [gelöst] http Abfrage Volkszähler mit OH3
Verfasst: 29. Dez 2020 13:15
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?!
Re: [gelöst] http Abfrage Volkszähler mit OH3
Verfasst: 29. Dez 2020 21:12
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.