Seite 1 von 2

HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 10:58
von loewes
Hallo zusammen,

ich bin noch neu bei openHAB, aber ein paar Sachen funktionieren inzwischen ganz gut, auch den PV-Speicher konnte ich bereits per HTTP und JSON abfragen (Vielen Dank für dieses super Forum!).
Aber jetzt versuche ich, die Infos aus einer HomeWizard Basisstation auszulesen und da bräuchte ich Hilfe.
Erstmal zu der Ausgabe von dem Gerät, das ich über den Webbrowser erhalte:

Code: Alles auswählen

{"status": "ok", "version": "3.403", "request": {"route": "/get-sensors" }, "response": {"preset":0,"time":"2023-01-10 10:23","switches":[{"id":0,"name":"Ein","type":"switch","status":"off","favorite":"no"},{"id":1,"name":"Arbeitszimmer","type":"radiator","tte":20.0,"favorite":"no"}],"uvmeters":[],"windmeters":[],"rainmeters":[],"thermometers":[],"weatherdisplays":[], "energymeters": [], "energylinks": [], "heatlinks": [], "hues": [], "scenes": [], "kakusensors": [{"id":0,"name":"Tor rechts","status":null,"type":"contact","favorite":"no","timestamp":"00:00","cameraid":null},{"id":1,"name":"Tor links","status":null,"type":"contact","favorite":"no","timestamp":"00:00","cameraid":null}], "cameras": []}}
Firefox zeigt mir das gleich struktuiert an:
Screenshot.jpg
Für die Versionsnummer komme ich noch zurecht, da trage ich bei Item in dem JSONPath Ausdruck einfach nur "version" ein, aber wie muss ich das für andere Werte formulieren, die ja ggf. mehrfach mit verschiedenen IDs auftreten?

Vielen Dank schon mal!

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 13:19
von Mclupo
Die Abfrage geht entlang des Datenaufbaus, getrennt mit einem „.“, also

$.response.switches.0.name

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 13:33
von loewes
Vielen Dank für die schnelle Antwort!
Ich habe die Abfrage getestet: "$.response.switches.1.tte" -> das sollte mir im Beispiel oben 20.0 liefern.
Aber leider sehe ich im Ergebnis: {"status": "failed", "error": 1, "version": "3.403", "request": {"route": "/get-sensors" }}
Woher die Einträge Status:failed und der Error 1 kommen weiß ich nicht, wenn ich die Abfrage im Browser aufrufe, kommt immer Status:OK (wie im Beispiel oben).
Noch eine Idee, was ich da falsch mache? Vielen Dank!

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 15:01
von oh73
versuch es mal mit

"$.response.switches.tte"

die 1 weg lassen, kommt nur von der Anzeige im Browser, ist nicht im Json String!

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 17:43
von loewes
Danke!
Hm... ich hab jetzt nochmal mehrere Varianten ausprobiert, aber immer die gleichen Daten im Ergebnis. Um z.B. die Version auszulesen hat es nur mit der Angabe "version" funktioniert, also ich meine ohne "$." davor. Vielleicht hat noch jemand eine Idee?

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 19:07
von oh73
das scheint kein richtiger JSON String zu sein!

hätte da noch eine andere Möglichkeit,
var request = sendHttpGetRequest("http://deine_IP",1000)

var split_1 = request.split('"tte":').get(1)
var split_2 = split_1.split(',').get(0)
so komme ich an die "20.0"
gibt sicher noch bessere Möglichkeiten, aber viele Wege führen nach Rom!

Edit:
das in einer Rule eingebaut!

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 19:26
von loewes
Das klingt gut, mir wäre das eigentlich lieber so. Als Neuling hier bei dem Thema muss ich aber zugeben, dass ich nicht weiß, wie ich diese Rule anlege... Also ich lege eine neue Rule an und trage das unter "Then/Add Action" ein? Ist das dann ein ECMAScript? Muss ich einen Trigger anlegen, wenn das permanent laufen soll? Danke Euch!

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 19:34
von oh73
oh, so gut bin ich auch wieder nicht!

ich schreibe meine Rules alle in Text Dateien

hier ein Beispiel für deine Seite jede Minute ab zu rufen.

Code: Alles auswählen

rule "json_test"
	when Time cron "0 0/1 * * * ?"
then

	var request = sendHttpGetRequest("http://deine_IP",1000)
	
	var split_1 = request.split('"tte":').get(1)
	var split_2 = split_1.split(',').get(0)
	
	
	logInfo("json Test  = ","tte : "+split_2)

end
sollte aber auch in der Gui funktionieren wenn du das bei Scripts, Rule DSL erstellen, einfügst.

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 20:20
von Harka
ich werfe mal ein $.response.switches[1].tte in den Raum.

Re: HomeWizard per JSON auslesen

Verfasst: 10. Jan 2023 20:37
von loewes
@Harka: damit erhalte ich exakt die gleiche Ausgabe wie mit ".1."... leider...
@oh73: das werde ich testen, auf den ersten Versuch bekomme ich das nicht wirklich zum laufen, ich bekomme die Meldung, dass es ausgeführt wird und dann wieder im "idle" ist. Da muss ich mich wohl erstmal noch damit beschäftigen, wie ich in openHAB 3.4.1 Skripten und Rules richtig anlege... Wenn Du schreibst, dass Du das in Textdateien schreibst, wo muss ich die ablegen und wie greife ich dann auf die Ausgabevariable zu? Danke!