http Binding und Abfrage einer URL unter openHAB 4

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

EnergieAndi
Beiträge: 3
Registriert: 5. Apr 2024 07:03
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von EnergieAndi »

Leider funktioniert es noch nicht. Doch bereits nur nach Anlegen des Channels, also ohne Link zu einem Item habe ich folgende Fehlermeldung:
2024-04-05 15:23:24.061 [WARN ] [form.CascadedValueTransformationImpl] - Transformation ignore, failed to parse $.[?(@.id == 'ZPUFG')].value: The transformation pattern must consist of the type and the pattern separated by a colon
Also nur mit diesem Code:

Code: Alles auswählen

channels:
  - id: Switch_Channel
    channelTypeUID: http:switch
    label: Schalter
    description: ""
    configuration:
      onValue: "true"
      mode: READONLY
      offValue: "false"
      stateTransformation: $.[?(@.id == 'ZPUFG')].value
Eigentlich kommt als Ergebnis der Json-Transformation nur true oder false raus - und das ist ja bei onValue und offValue konfiguriert.
In welchem Feld kann ich die in der Fehlermeldung genannten type und pattern eingeben?? Wie muss das aussehen?

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

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

Da fehlt JSONPATH: vornedran. Schau Dir bitte noch mal die Definition an, die ich weiter oben gepostet habe...
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

EnergieAndi
Beiträge: 3
Registriert: 5. Apr 2024 07:03
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von EnergieAndi »

Oh ja. Das der Fehler. Oh bin ich glücklich. Vielen, vielen Dank.

asd
Beiträge: 7
Registriert: 17. Jul 2020 16:04
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von asd »

Hallo,

ich habe folgendes Problem mit den http Binding / OpenHAB 4.2.1.

Ich würde gerne Daten meiner Wetterstation von AWEKAS abrufen. Mit Hilfe eines persönlichen Keys und der API-Beschreibung kann im mir im Browser alle Daten im JSON-Format anzeigen lassen.

Mein persönlicher Key enthält mehrmals auch das Zeichen %. Das http Binding für automatisch "escaping" durch und ersetzt dabei % in der URL durch %25.

Z.B. wir %7 zu %257

Dadurch wird der Key und damit auch die URL verändert. Diese verändert URL funktioniert leider nicht mehr.

Gibt es für dieses Problem eine Lösung?

lg

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

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

Mein erster Versuch wäre, das % doppelt zu schreiben.
Da hier offensichtlich URL Encoding das "Problem" ist, könnte man stattdessen das Prozentzeichen durch %25 ersetzen (das ist der Escape Code für % im URL Encoding).
Es ist natürlich möglich, dass der Key noch weitere Zeichen enthält, die encodiert werden müssen. Vermutlich der schnellste Weg, das abzugleichen: https://de.wikipedia.org/wiki/URL-Encoding.
Es gibt auch Tools, die das encodieren/decodieren für Dich übernehmen können, z.B. https://meyerweb.com/eric/tools/dencoder/, wobei Dir an dieser Stelle natürlich klar sein muss, dass Du potentiell Deinen Key ins Internet herausposaunst...
Es gibt auch verschiedene Optionen, das offline zu erledigen, dazu wird dann eine Funktion aufgerufen, die das Encodieren übernimmt. Ein Kommandozeilen Tool (wie eigentlich von GNU/Linux für alle möglichen Probleme gewohnt) gibt es wohl nicht - die Aufgabe ist anscheinend zu einfach...
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

asd
Beiträge: 7
Registriert: 17. Jul 2020 16:04
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von asd »

Das einzige Sonderzeichen im Key ist %.

Das URL Encoding habe ich per Hand gemacht, ist aber sicher korrekt.

Im Browser funktioniert der Versuch mit einfach % und % verdoppelt (dein Tip) udn zeigt die JSON Daten an.

Das http Binding ersetzt bei %% aber stur %25%25. Kopiere ich dann die URL aus dem Logsfile in den Browser für das zu einer invaliden Abfrage.

Es liegt also am http Binding. Es ist die Frage ob man im http Binding das escaping unterdrücken kann.

asd
Beiträge: 7
Registriert: 17. Jul 2020 16:04
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von asd »

Ich habe im AWEKAS Forum das Problem thematisiert und von dort den entscheidenden Hinweis zur Lösung bekommen.

Der AWEKAS Key ist bereits Encoded und das Escaping ist bereits durchgeführt.

D.h. man muss den Key decoden z.B. mit https://www.urldecoder.org.

Der decoded Key wird dann in die URL beim http Binding hinter den "key=" eingefügt. Das http Binding für nun wieder das Encoding durch.

Dadurch ist das einlesen der AWEKAS Wetterstationsdaten in Openhab problemlos möglich.

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

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

Das war mir tatsächlich auch noch eingefallen, ich fand es aber zu abwegig...
hätte ich mal...
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

hermann59
Beiträge: 22
Registriert: 25. Feb 2021 08:38
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von hermann59 »

Ich hätte einmal ein paar allgemeine Fragen zu dem Thema:

1. Wenn ein http-request ein json-Objekt liefert, kann ich ja im channel durch eine Transformation ein gewünschtes Datum extrahieren und anschließend diesem channel ein item zuweisen.
Angenommen, ich möchte 20 Daten aus derselben Antwort in 20 items extrahieren, muss ich dann 20 channels anlegen?
Falls ja, wird dann die http-Abfrage 20 mal ausgeführt?
Oder ist es auch möglich, einen channel anzulegen, ihn mit 20 items zu verlinken und die transformation im item zu machen?

2. Wenn ich ein Datum per http-request ändern will, wie gehe ich dann vor?

3. Wie gebe ich Parameter an eine URL weiter (beispielsweise in einer DSL-Rule oder aus dem Inhalt eines Items)?

Danke
Hermann

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

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

Zu 1.: Das http Binding cachet die Anfragen, solange dieselbe URL abgefragt wird, sollten also auch mehrere Channel nicht zu mehr Abfragen führen.
Einfacher ist es aber, für solche Abfragen einen string Channel für das gesamte JSON Objekt zu definieren (json->string) und diesen "read-only" Channel dann mit mehreren Items zu verlinken. Dabei ist der Itemtyp dann vom eigentlichen Datum abhängig, also ob Number, DateTime, Switch oder String.
Das jeweilige Datum wird dann über das Profile extrahiert (das wird innerhalb des Links konfiguriert).

Nachteil des Profiles: Man kann nur eine Transformation durchführen und kann auf direktem Weg auch keine Einheit hinzufügen (für UoM Number Items). Allerdings kann man z.B. JavaScript zur Transformation einsetzen und damit auch mehrere Transformationen innerhalb eines Transformationscripts durchführen.

Zu 2. und 3.: Gewöhnlich muss das jeweilige Datum über die CommandExtension übergeben werden, der Platzhalter %2$ enthält dabei das vom Item empfangene Command - in Richtung Binding muss man immer .sendCommand() als Methode nutzen; eine Eingabe über die UI löst stets ein .sendCommand() aus. Bei Bedarf steht außerdem in %1$ der aktuelle Zeitstempel zur Verfügung. Beide Platzhalter können über die üblichen Formatstrings beeinflusst werden, wobei für %2$ gewöhnlich nur s für String genutzt werden kann, also %2$s als vollständiger Platzhalter.
Siehe auch die offizielle Dokumentation :) https://www.openhab.org/addons/bindings ... formatting
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

Antworten