GraphQL Schnittstelle Heizungsautomatisierung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Olli85
Beiträge: 1
Registriert: 6. Mär 2020 08:26
Answers: 0

GraphQL Schnittstelle Heizungsautomatisierung

Beitrag von Olli85 »

Hallo zusammen,

ich versuche im Moment Daten aus einer GraphQL Schnittslle zu lesen. Soweit ich es verstanden habe entspricht der Aufbau dem JSON Format. Mit der Einschränkung das die Daten der Antwort immer in einer anderen Reihenfolge sein können.

Ziel ist es eine Belegtstatus für die Unterkünfte darzustellen. Hiezu habe ich bereits Items angelegt welche im Moment manuell aus der UI angsteuert werden. Diese steuern dann die Heizungswerte. Das funktioniert soweit auch sehr gut.
Dieses soll jedoch in Zukunft automatisch funktionieren.

Da ich leider noch nicht so fit in der Programmierung bin hier nun das Problem.
Ich wollte nun die einzelenen Daten aus der Rückemldung lesen. Reservierung_von und Reservierung_bis für jede Wohneinheit je in ein DateTime Item laden.
Das DateTime Item "Reservierung_von" soll nun bei erreichen des Datums den Belegtstatus auf True setzen und das DateTime Item "Reservierung_bis" es wieder auf false setzen.

Es hängt also im Moment daran die Datum-Werte in die entsprechenden Items zu bekommen.

Folgende Rückmeldung erhalte ich vom Server:

Code: Alles auswählen

string(1786) "{"data":{"room_stays":{"edges":[{"node":{"id":"715318","room_setup":{"name":"App. 8"},"reservation_from":"2020-03-04","reservation_to":"2020-03-07","check_in":"2020-03-04T14:38:20+01:00","check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"715318"},{"node":{"id":"745696","room_setup":{"name":"Chalet 4"},"reservation_from":"2020-03-06","reservation_to":"2020-03-08","check_in":null,"check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"745696"},{"node":{"id":"749102","room_setup":{"name":"App. 9"},"reservation_from":"2020-03-02","reservation_to":"2020-03-07","check_in":"2020-03-02T17:25:48+01:00","check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"749102"},{"node":{"id":"749185","room_setup":{"name":"Chalet 5"},"reservation_from":"2020-03-03","reservation_to":"2020-03-07","check_in":"2020-03-03T14:04:37+01:00","check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"749185"},{"node":{"id":"755183","room_setup":{"name":"FEWO 1"},"reservation_from":"2020-03-04","reservation_to":"2020-03-07","check_in":null,"check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"755183"},{"node":{"id":"755725","room_setup":{"name":"App. 6"},"reservation_from":"2020-03-06","reservation_to":"2020-03-07","check_in":null,"check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"755725"},{"node":{"id":"757398","room_setup":{"name":"App. 7"},"reservation_from":"2020-03-05","reservation_to":"2020-03-07","check_in":"2020-03-05T16:41:23+01:00","check_out":null,"selfcheckout_enabled":false,"selfcheckout_url":null},"cursor":"757398"}],"pageInfo":{"startCursor":"715318","endCursor":"757398","hasNextPage":false,"hasPreviousPage":false}}}}"
Die JSON-Daten liegen bereits in einem String Item.

Ich habe bereits versucht mit dem jsonpath die betreffenden Daten auszulesen. Leider jedoch ohne Erfolg.

Ich hoffe jemand kann mir helfen. Vielen Dank im vorraus.

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

Re: GraphQL Schnittstelle Heizungsautomatisierung

Beitrag von udo1toni »

Das ist aber kein gültiges JSON! Der String sieht momentan so aus: string(1786) "hier ist gültiges JSON"
Der nicht unterstrichene Teil muss also zuerst weg. Anschließend kann man dann problemlos auf die einzelnen Werte zugreifen.
Jsonpath wird dann einen länglichen Pfad entlanghangeln müssen. Am besten macht man das mit einem Evaluator, z.B. jsonpath.com. Für den Raum App.8 lautet der Ausdruck für das Startdatum z.B.

Code: Alles auswählen

$.data.room_stays.edges[?(@.node.room_setup.name == 'App.8')].node.reservation_from
Das schöne an dem Filter ist, dass es keine Rolle spielt, in welcher Reihenfolge die Knoten vorliegen (die ist übrigens meist variabel...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten