[gelöst] - JSON an http:url

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
Benutzeravatar
Florian.Reinartz
Beiträge: 103
Registriert: 11. Apr 2022 08:47
Wohnort: bei Schwerin

[gelöst] - JSON an http:url

Beitrag von Florian.Reinartz »

oin in die Runde,
ich habe "jetzt" doch angefangen alles auf openHAB 3.3 umzumodeln.
Also zweiten Raspberry und zurück auf los...
Ich habe allerdings die meisten *.ules, *.items und *.things übernommen bzw. angepasst.
Eins von zwei Rätseln möchte ich mit Eurer Hilf lösen:
In opanHAB 2.5 habe ich mir mittels http.cfg (in /etc/openhab2/service/) von drei Geräten im Netz ein JSON-Protokoll abgerufen:
http.cfg

Code: Alles auswählen

RzWetter.url=http://192.168.20.13/?json
RzWetter.updateInterval=150000

RzPulseCounter.url=http://192.168.20.15/?json
RzPulseCounter.updateInterval=150000

RzSmartPi.url=http://192.168.20.12:1080/api/all/all/now
RzSmartPi..updateInterval=150000
in den Items habe ich dann wie folgt einen definierten Datensatz abgefragt:

Code: Alles auswählen

Number   Wetter_Daten_Lokal_temp    "Außentemperatur [%.1f °C]"   <temperature>   {http="<[RzWetter:150000:JSONPATH($.vars[1].value)]"}
Leider funktioniert diese Methode in OH3 nicht mher!
Viele Recherchen habe immer wieder zu Foren geführt in denen es keine Antworten gab, immer nur Beiträge mit dem Inhalt "die Lösung würde mich auch interressieren..."

Ich habe jetzt eine http.things mit folgendem Inhalt angelegt (erst mal nur für die 192.168.20.13 - Wetter):

Code: Alles auswählen

Thing http:url:RzWetter "RzWetter"   [	baseURL = "http://192.168.20.13/?json", refresh = "150000"]{
	Channels:
		Type number : temp          "RzWetter Temperatur"   [ stateTransformation = "JSONPATH:$.vars.1.value" ]
		Type number : windchill     "RzWetter Gefühlte Temperatur" [ stateTransformation = "JSONPATH:$.vars.2.value" ]}
und der Datei wetter.items:

Code: Alles auswählen

Number   Wetter_Daten_Lokal_temp   "Außentemperatur [%.1f °C]"   <temperature>       {channel="http:192_168_20_13:RzWetter:temp"}
...aber dass funktioniert nicht!!!
Ich habe mal noch die JSON-Datei im RAW-Format und die "schöne" Darstellung als png angehängt...

Ich würde mich freuen wenn irgendjemand Licht ins Dunkle bringen könnte...
Mein Englisch reicht auchg nicht um alle englischenErklärungen voll zu umfassen und leider funktioniert der Google-Webseitenübersetzter beim openHAB-Forum nicht - schade...

Vielne Dank für jede Anregung.
Gruß
Florian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Florian.Reinartz am 2. Jul 2022 14:42, insgesamt 1-mal geändert.
openHAB 4.1.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: JSON an http:url

Beitrag von udo1toni »

Da fehlen die eckigen Klammern im JSONPATH. Die gehören unbedingt mit dazu.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: JSON an http:url

Beitrag von peter-pan »

....könnte es evtl. auch sein, dass die Channel-Parameter in deinem Item noch etwas modifiziert werden müssten ?
Etwa so:

Code: Alles auswählen

Number   Wetter_Daten_Lokal_temp   "Außentemperatur [%.1f °C]"   <temperature>       {channel="http:url:RzWetter:temp"}
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: JSON an http:url

Beitrag von udo1toni »

Achso... wegen des Formats... schau mal:

Code: Alles auswählen

{
	"modultyp": "weatherman",
	"vars": [
		{
			"name": "0",
			"homematic_name": "w_ip",
			"desc": "weatherman_ip",
			"type": "string",
			"unit": "",
			"value": "192.168.20.13"
		},
		{
			"name": "1",
			"homematic_name": "w_temperatur",
			"desc": "aussentemperatur",
			"type": "number",
			"unit": "gradC",
			"value": "13.7"
		},
		{
			"name": "21",
			"homematic_name": "w_windchill",
			"desc": "gefuehlte_temperatur",
			"type": "number",
			"unit": "gradC",
			"value": "13.7"
		},
		{
			"name": "9",
			"homematic_name": "w_taupunkt",
			"desc": "taupunkt_temperatur",
			"type": "number",
			"unit": "gradC",
			"value": "12.2"
		},
		{
			"name": "14",
			"homematic_name": "w_himmeltemperatur",
			"desc": "himmel_temperatur",
			"type": "number",
			"unit": "gradC",
			"value": "0.0"
		},
		{
			"name": "2",
			"homematic_name": "w_feuchte_rel",
			"desc": "rel_feuchte",
			"type": "number",
			"unit": "%",
			"value": "90.9"
		},
		{
			"name": "17",
			"homematic_name": "w_feuchte_abs",
			"desc": "abs_feuchte",
			"type": "number",
			"unit": "g/m3",
			"value": "10.7"
		},
		{
			"name": "18",
			"homematic_name": "w_regensensor_wert",
			"desc": "regenmelderwert",
			"type": "number",
			"unit": "",
			"value": "0"
		},
		{
			"name": "7",
			"homematic_name": "w_regenmelder",
			"desc": "regenstatus",
			"type": "boolean",
			"unit": "",
			"value": "false"
		},
		{
			"name": "8",
			"homematic_name": "w_regenstaerke",
			"desc": "regenstaerke",
			"type": "number",
			"unit": "mm/h",
			"value": "0.0"
		},
		{
			"name": "19",
			"homematic_name": "w_regen_letzte_h",
			"desc": "regen_pro_h",
			"type": "number",
			"unit": "mm",
			"value": "0.0"
		},
		{
			"name": "20",
			"homematic_name": "w_regen_mm_heute",
			"desc": "regen_mm_heute",
			"type": "number",
			"unit": "mm",
			"value": "0.0"
		},
		{
			"name": "32",
			"homematic_name": "w_regenstunden_heute",
			"desc": "regenstunden_heute",
			"type": "number",
			"unit": "h",
			"value": "0.0"
		},
		{
			"name": "27",
			"homematic_name": "w_regen_mm_gestern",
			"desc": "regen_mm_gestern",
			"type": "number",
			"unit": "mm",
			"value": "10.7"
		},
		{
			"name": "3",
			"homematic_name": "w_barometer",
			"desc": "nn_luftdruck",
			"type": "number",
			"unit": "mb",
			"value": "1022.69"
		},
		{
			"name": "11",
			"homematic_name": "w_barotrend",
			"desc": "luftdrucktrend",
			"type": "string",
			"unit": "",
			"value": "stabil"
		},
		{
			"name": "4",
			"homematic_name": "w_wind_mittel",
			"desc": "avg_windgeschwindigkeit",
			"type": "number",
			"unit": "km/h",
			"value": "0.0"
		},
		{
			"name": "5",
			"homematic_name": "w_wind_spitze",
			"desc": "peak_windgeschwindigkeit",
			"type": "number",
			"unit": "km/h",
			"value": "0.0"
		},
		{
			"name": "24",
			"homematic_name": "w_windstaerke",
			"desc": "bft_windgeschwindigkeit",
			"type": "number",
			"unit": "bft",
			"value": "0"
		},
		{
			"name": "23",
			"homematic_name": "w_windrichtung",
			"desc": "windrichtung",
			"type": "string",
			"unit": "",
			"value": "N"
		},
		{
			"name": "6",
			"homematic_name": "w_wind_dir",
			"desc": "windwinkel",
			"type": "number",
			"unit": "grad",
			"value": "0"
		},
		{
			"name": "10",
			"homematic_name": "w_lux",
			"desc": "helligkeit",
			"type": "number",
			"unit": "lux",
			"value": "0.0"
		},
		{
			"name": "28",
			"homematic_name": "w_uv_index",
			"desc": "uv-index",
			"type": "number",
			"unit": "uv_index",
			"value": "0.000"
		},
		{
			"name": "22",
			"homematic_name": "w_sonne_diff_temp",
			"desc": "sonnen_difftemperatur",
			"type": "number",
			"unit": "gradC",
			"value": "2.7"
		},
		{
			"name": "15",
			"homematic_name": "w_sonnentemperatur",
			"desc": "sonnen_temperatur",
			"type": "number",
			"unit": "gradC",
			"value": "16.4"
		},
		{
			"name": "16",
			"homematic_name": "w_sonne_scheint",
			"desc": "sonne_scheint",
			"type": "boolean",
			"unit": "",
			"value": "false"
		},
		{
			"name": "26",
			"homematic_name": "w_sonnenstunden_heute",
			"desc": "Sonnenstunden_heute",
			"type": "number",
			"unit": "h",
			"value": "0.0"
		},
		{
			"name": "12",
			"homematic_name": "w_elevation",
			"desc": "sonne_elevation",
			"type": "number",
			"unit": "grad",
			"value": "-12.5"
		},
		{
			"name": "13",
			"homematic_name": "w_azimut",
			"desc": "sonne_azimut",
			"type": "number",
			"unit": "grad",
			"value": "347.6"
		},
		{
			"name": "30",
			"homematic_name": "w_minuten_vor_sa",
			"desc": "minuten_vor_sa",
			"type": "number",
			"unit": "min",
			"value": "-1173"
		},
		{
			"name": "31",
			"homematic_name": "w_minuten_vor_su",
			"desc": "minuten_vor_su",
			"type": "number",
			"unit": "min",
			"value": "-162"
		}
	],
	"Systeminfo": {
		"MAC-Adresse": "d8:bf:c0:f7:90:ce",
		"Homematic_CCU_ip": "my_ccuip",
		"WLAN_ssid": "AlphaQuadrant",
		"WLAN_Signal_dBm": "-49",
		"sec_seit_reset": "101640",
		"zeitpunkt": "2022.07.02 /00h27",
		"firmware": "wm2_19_2"
	}
}
Das waren ca. 10 Sekunden Arbeit, dafür gibt es Tools ;) in diesem Fall das JSON Plugin in Notepad++ (der einfach viel schneller startet als VSCode, wo es solche Plugins selbstverständlich auch gibt).

Die Konfiguration von http ist auch nicht korrekt. im alten http1-Binding wurde refresh in ms angegeben, in http3 geschieht das aber in s. Also, aus 15000 wird 15.
Und wie gesagt, der JSONPATH lautet im Beispiel $.vars[1].value, nicht $.vars.1.value. Innerhalb des JSON Objekts kannst Du hinter vars einen Doppelpunkt sehen, anschließend eine [. Das bedeutet, hier folgt ein Tupel. Die einzelnen Elemente des Tupels sind nicht benannt, sondern lediglich mit {} markiert. Welchen Teil des Tupels Du nutzen willst, entscheidest Du über den Inhalt von []. Da es keine Namen für die Elemente gibt, kannst Du entweder über den Index zugreifen, oder Du machst es an einem Wert innerhalb des Tupel Elements fest (das wäre die "korrekte" Art, auf einen Wert zuzugreifen):

Code: Alles auswählen

$.vars[?(@.homematic_name=='w_temperatur')].value
Dieser JSONPATH verweist auf den Wert 13.7. Der Unterschied: Es ist nun egal, ob dieser Wert tatsächlich im zweiten Element der Liste steht, oder vielleicht im 27. Element. Wenn Du das JSON Objekt anschaust, wirst Du feststellen, dass die einzelnen Listenelemente keinesfalls nach dem Feld "name" sortiert sind, wie man eigentlich erwarten könnte.
Die Reihenfolge der Tupelelemente kann bei jeder Abfrage eine andere sein, das wird mit der "korrekten" Variante abgefangen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Florian.Reinartz
Beiträge: 103
Registriert: 11. Apr 2022 08:47
Wohnort: bei Schwerin

Re: JSON an http:url

Beitrag von Florian.Reinartz »

Moin Zusammen,
zunächst vielen Dank für Eure Antworten.
Ich bin immer wieder begeister wieviel Mühe Ihr Euch gebt um anderen zu helfen.

Bei mir sieht das Thing jetzt so aus:

Code: Alles auswählen

Thing http:url:RzWetter "RzWetter"
[
	baseURL = "http://192.168.20.13/?json",
	refresh = "15"
]
	{
		Channels:
			Type number : temp			"RzWetter Temperatur"			[ stateTransformation = "$.vars[?(@.name=='1')].value" ]
			Type number : windchill			"RzWetter Gefühlte Temperatur"	[ stateTransformation = "$.vars[?(@.name=='21')].value" ]
			Type number : sonnen_temp		"RzWetter Temperatur in Sonne"	[ stateTransformation = "$.vars[?(@.name=='15')].value" ]
			Type number : abs_humidity		"RzWetter Absolute Luftfeuchte"	[ stateTransformation = "$.vars[?(@.name=='17')].value" ]
			Type number : rel_humidity		"RzWetter Relative Luftfeuchte"	[ stateTransformation = "$.vars[?(@.name=='2')].value" ]
			Type number : dewpoint			"RzWetter Taupunkt"			[ stateTransformation = "$.vars[?(@.name=='9')].value" ]
			Type number : baromin			"RzWetter Luftdruck"			[ stateTransformation = "$.vars[?(@.name=='3')].value" ]
			Type string : trend_baromin		"RzWetter Trend Luftdruck"		[ stateTransformation = "$.vars[?(@.name=='11')].value" ]
			Type number : windpower		"RzWetter Windstärke"			[ stateTransformation = "$.vars[?(@.name=='24')].value" ]
			Type number : windspeed_kmh	"RzWetter Windgeschwindigkeit"	[ stateTransformation = "$.vars[?(@.name=='4')].value" ]
			Type number : windgust_kmh		"RzWetter Böengeschwindigkeit"	[ stateTransformation = "$.vars[?(@.name=='5')].value" ]
			Type string : winddir			"RzWetter Windrichtung"		[ stateTransformation = "$.vars[?(@.name=='23')].value" ]
			Type string : sun				"RzWetter Sonne"				[ stateTransformation = "$.vars[?(@.name=='16')].value" ]
			Type number : solarradiation		"RzWetter Helligkeit"			[ stateTransformation = "$.vars[?(@.name=='10')].value" ]
			Type number : sundegree		"RzWetter Sonnenhöhe"			[ stateTransformation = "$.vars[?(@.name=='12')].value" ]
			Type number : azimutdegree		"RzWetter Sonnenrichtung"		[ stateTransformation = "$.vars[?(@.name=='13')].value" ]
			Type number : sonnenstunden	"RzWetter Sonnenstunden"		[ stateTransformation = "$.vars[?(@.name=='26')].value" ]
			Type string : rain_yes_no		"RzWetter Regen"				[ stateTransformation = "$.vars[?(@.name=='7')].value" ]
			Type number : rainin			"RzWetter Regenstärke"			[ stateTransformation = "$.vars[?(@.name=='8')].value" ]
			Type number : hourrainin		"RzWetter Regenmenge"			[ stateTransformation = "$.vars[?(@.name=='19')].value" ]
			Type number : dailyrainin		"RzWetter Regenmenge heute"	[ stateTransformation = "$.vars[?(@.name=='20')].value" ]
			Type number : dayhourrainin		"RzWetter Regenstunden"		[ stateTransformation = "$.vars[?(@.name=='32')].value" ]
			Type number : yesterdayrainin	"RzWetter Regenmenge gestern"	[ stateTransformation = "$.vars[?(@.name=='27')].value" ]
	}
und die Items so:

Code: Alles auswählen

Number   Wetter_Daten_Lokal_temp        "Außentemperatur [%.1f °C]"       <temperature>    {channel="http:url:RzWetter:temp"}
Number   Wetter_Daten_Lokal_windchill   "Gefühlte Temperatur [%.1f °C]"   <temperature>    {channel="http:url:RzWetter:windchill"}
Ich habe den Bezug nicht auf homematic_name sondern auf name festgelegt da der homematic_name im Weatherman veränderbar ist. Name ist vom Programmierer festgelegt und fix.

Aber bisher tut sich nichts...

Muss ich im Thing denn für "url" (Thing http:url:RzWetter "RzWetter") die richtige url eingenen (192.168.20.13) oder kann da ein beliebiger "Name" stehen (z.B. url)?
Wenn ich mehrere Geräte habe bei denen ich Daten im JSON-Format abfrage bleibt dann url immer gleich oder ändert sich url?

Mach ich noch was falsch?
Danke und Gruß
Florian
Zuletzt geändert von Florian.Reinartz am 2. Jul 2022 13:27, insgesamt 3-mal geändert.
openHAB 4.1.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

Benutzeravatar
Florian.Reinartz
Beiträge: 103
Registriert: 11. Apr 2022 08:47
Wohnort: bei Schwerin

Re: JSON an http:url

Beitrag von Florian.Reinartz »

OHHHH...
Irgendwas passiert!
In den String-Items habe ich jetzt den gesammte JSON-Inhalt!
Inhalt "trend_baromin":

Code: Alles auswählen

{"modultyp":"weatherman","vars":[{"name":"0","homematic_name":"w_ip","desc":"weatherman_ip","type":"string","unit":"","value":"192.168.20.13"},{"name":"1","homematic_name":"w_temperatur","desc":"aussentemperatur","type":"number","unit":"gradC","value":"22.0"},{"name":"21","homematic_name":"w_windchill","desc":"gefuehlte_temperatur","type":"number","unit":"gradC","value":"22.0"},{"name":"9","homematic_name":"w_taupunkt","desc":"taupunkt_temperatur","type":"number","unit":"gradC","value":"8.2"},{"name":"14","homematic_name":"w_himmeltemperatur","desc":"himmel_temperatur","type":"number","unit":"gradC","value":"0.0"},{"name":"2","homematic_name":"w_feuchte_rel","desc":"rel_feuchte","type":"number","unit":"%","value":"41.3"},{"name":"17","homematic_name":"w_feuchte_abs","desc":"abs_feuchte","type":"number","unit":"g/m3","value":"8.0"},{"name":"18","homematic_name":"w_regensensor_wert","desc":"regenmelderwert","type":"number","unit":"","value":"0"},{"name":"7","homematic_name":"w_regenmelder","desc":"regenstatus","type":"boolean","unit":"","value":"false"},{"name":"8","homematic_name":"w_regenstaerke","desc":"regenstaerke","type":"number","unit":"mm/h","value":"0.0"},{"name":"19","homematic_name":"w_regen_letzte_h","desc":"regen_pro_h","type":"number","unit":"mm","value":"0.0"},{"name":"20","homematic_name":"w_regen_mm_heute","desc":"regen_mm_heute","type":"number","unit":"mm","value":"0.0"},{"name":"32","homematic_name":"w_regenstunden_heute","desc":"regenstunden_heute","type":"number","unit":"h","value":"0.0"},{"name":"27","homematic_name":"w_regen_mm_gestern","desc":"regen_mm_gestern","type":"number","unit":"mm","value":"10.7"},{"name":"3","homematic_name":"w_barometer","desc":"nn_luftdruck","type":"number","unit":"mb","value":"1024.99"},{"name":"11","homematic_name":"w_barotrend","desc":"luftdrucktrend","type":"string","unit":"","value":"stabil"},{"name":"4","homematic_name":"w_wind_mittel","desc":"avg_windgeschwindigkeit","type":"number","unit":"km/h","value":"5.8"},{"name":"5","homematic_name":"w_wind_spitze","desc":"peak_windgeschwindigkeit","type":"number","unit":"km/h","value":"10.1"},{"name":"24","homematic_name":"w_windstaerke","desc":"bft_windgeschwindigkeit","type":"number","unit":"bft","value":"2"},{"name":"23","homematic_name":"w_windrichtung","desc":"windrichtung","type":"string","unit":"","value":"N"},{"name":"6","homematic_name":"w_wind_dir","desc":"windwinkel","type":"number","unit":"grad","value":"0"},{"name":"10","homematic_name":"w_lux","desc":"helligkeit","type":"number","unit":"lux","value":"3023.0"},{"name":"28","homematic_name":"w_uv_index","desc":"uv-index","type":"number","unit":"uv_index","value":"0.000"},{"name":"22","homematic_name":"w_sonne_diff_temp","desc":"sonnen_difftemperatur","type":"number","unit":"gradC","value":"13.6"},{"name":"15","homematic_name":"w_sonnentemperatur","desc":"sonnen_temperatur","type":"number","unit":"gradC","value":"35.6"},{"name":"16","homematic_name":"w_sonne_scheint","desc":"sonne_scheint","type":"boolean","unit":"","value":"true"},{"name":"26","homematic_name":"w_sonnenstunden_heute","desc":"Sonnenstunden_heute","type":"number","unit":"h","value":"1.1"},{"name":"12","homematic_name":"w_elevation","desc":"sonne_elevation","type":"number","unit":"grad","value":"54.1"},{"name":"13","homematic_name":"w_azimut","desc":"sonne_azimut","type":"number","unit":"grad","value":"138.2"},{"name":"30","homematic_name":"w_minuten_vor_sa","desc":"minuten_vor_sa","type":"number","unit":"min","value":"-404"},{"name":"31","homematic_name":"w_minuten_vor_su","desc":"minuten_vor_su","type":"number","unit":"min","value":"605"}],"Systeminfo":{"MAC-Adresse":"d8:bf:c0:f7:90:ce","Homematic_CCU_ip":"my_ccuip","WLAN_ssid":"AlphaQuadrant","WLAN_Signal_dBm":"-50","sec_seit_reset":"31130","zeitpunkt":"2022.07.02 /11h38","firmware":"wm2_19_2"}}
Die Auflösung funktioniert also nur noch nicht...
openHAB 4.1.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: JSON an http:url

Beitrag von peter-pan »

...ich weiss nicht, ob ich hier falsch liege, oder du mich nicht ganz verstanden hast ???

Dein Thing heisst doch(für 192.168.20.13):

Code: Alles auswählen

http:url:RzWetter
und der (ein) Channel dazu heisst: dann sollte doch die Bindung im Item so heissen:

Code: Alles auswählen

{channel="http:url:RzWetter:temp"}
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Benutzeravatar
Florian.Reinartz
Beiträge: 103
Registriert: 11. Apr 2022 08:47
Wohnort: bei Schwerin

Re: JSON an http:url

Beitrag von Florian.Reinartz »

Moin,
doch , ich habe verstanden und es auch richtig gemacht.
Da ich nicht weiß was für url stehen muss habe ich experimentiert und Things und Items in den Tread kopiert als sie grade unterschiedlich waren.
Habe den Beitrag korrigiert...

Habe openHAB mal neu gestarter.
Alle Number-Items haben jetzt den Inhalt "UNDEF" und die String-Items enthalten den komplette JSON-String.

Die Auflösung funktionierte nicht!
Es fehlte noch ein JSONPATH !!!
Things vorher:

Code: Alles auswählen

Type number : temp	"RzWetter Temperatur"	[ stateTransformation = "$.vars[?(@.name=='1')].value" ]
jetzt:

Code: Alles auswählen

Type number : temp	"RzWetter Temperatur"	[ stateTransformation = "JSONPATH:$.vars[?(@.name=='1')].value" ]
Danke für die Unterstützung
Gruß
Florian
Zuletzt geändert von Florian.Reinartz am 2. Jul 2022 14:12, insgesamt 1-mal geändert.
openHAB 4.1.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: [gelöst] - JSON an http:url

Beitrag von udo1toni »

Frage 1: hast Du denn JSONPATH auch installiert? Ist genau wie bei openHAB2, man muss alles installieren, was man auch nutzen will...

Frage 2: Es handelt sich hier ja um ein rein lesbares Thing, Du kannst keine Befehle senden. da bietet es sich an, die Konfiguration abzuwandeln:
Das Thing:

Code: Alles auswählen

Thing http:url:RzWetter "RzWetter" [
    baseURL = "http://192.168.20.13/?json",
    refresh = "15"
] {
    Channels:
    Type string : json "RzWetter JSON"
}
Nun hast Du einen Channel, der nur das komplette JSON Objekt hält.

Jetzt brauchst Du noch Items, die einfach mit diesem Channel verlinkt werden. Der Trick: Innerhalb des Links kann ein Profile genutzt werden, hier setzen wir dann das JSONPATH Profile ein:

Code: Alles auswählen

Number RZWtemp            "RzWetter Temperatur"           { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='1')].value"  ] }
Number RZWrel_humidity    "RzWetter Relative Luftfeuchte" { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='2')].value"  ] }
Number RZWbaromin         "RzWetter Luftdruck"            { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='3')].value"  ] }
Number RZWwindspeed_kmh   "RzWetter Windgeschwindigkeit"  { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='4')].value"  ] }
Number RZWwindgust_kmh    "RzWetter Böengeschwindigkeit"  { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='5')].value"  ] }
String RZWrain_yes_no     "RzWetter Regen"                { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='7')].value"  ] }
Number RZWrainin          "RzWetter Regenstärke"          { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='8')].value"  ] }
Number RZWdewpoint        "RzWetter Taupunkt"             { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='9')].value"  ] }
Number RZWsolarradiation  "RzWetter Helligkeit"           { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='10')].value" ] }
String RZWtrend_baromin   "RzWetter Trend Luftdruck"      { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='11')].value" ] }
Number RZWsundegree       "RzWetter Sonnenhöhe"           { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='12')].value" ] }
Number RZWazimutdegree    "RzWetter Sonnenrichtung"       { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='13')].value" ] }
Number RZWsonnen_temp     "RzWetter Temperatur in Sonne"  { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='15')].value" ] }
String RZWsun             "RzWetter Sonne"                { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='16')].value" ] }
Number RZWabs_humidity    "RzWetter Absolute Luftfeuchte" { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='17')].value" ] }
Number RZWhourrainin      "RzWetter Regenmenge"           { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='19')].value" ] }
Number RZWdailyrainin     "RzWetter Regenmenge heute"     { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='20')].value" ] }
Number RZWwindchill       "RzWetter Gefühlte Temperatur"  { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='21')].value" ] }
String RZWwinddir         "RzWetter Windrichtung"         { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='23')].value" ] }
Number RZWwindpower       "RzWetter Windstärke"           { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='24')].value" ] }
Number RZWsonnenstunden   "RzWetter Sonnenstunden"        { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='26')].value" ] }
Number RZWyesterdayrainin "RzWetter Regenmenge gestern"   { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='27')].value" ] }
Number RZWdayhourrainin   "RzWetter Regenstunden"         { chanell="http:url:RzWetter:json"[ profile="transform:JSONPATH", function="$.vars[?(@.name=='32')].value" ] }
Ich habe hier die Schreibweise in der *.items Datei angegeben, geht natürlich genauso auch über die UI.
Der Schreibaufwand dürfte ähnlich sein, allerdings benötigt man keine separaten Channel und also auch keine Differenzierung in der Itemdefinition (außer eben über den JSONPATH, der aber bis auf die Zahl identisch ist).
Ein Nachteil besteht bei Items, die durch eine Transformation weiter gewandelt werden könnten, z.B. RZWrain_yes_no könnte man als Switch Item abbilden, wenn man nach dem JSONPATH noch eine Wertzuordnung (aus true wird ON, aus false wird OFF) vornähme. Es ist nun mal eine Bit-Information, die man auch entsprechend anzeigen könnte, statt den Text anzuzeigen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten