http-Binding

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

http-Binding

Beitrag von haiko »

Hallo,

ich bin nicht sicher, ob das das richtige Forum für diese Frage ist. Falls nein, bitte ich um einen Hinweis!

Ich möchte von einer WebSite regelmäßig Informationen abholen und auf meiner Sitemap anzeigen. Dazu habe ich das HTTP-Binding installiert und folgendes Item konfiguriert:

Code: Alles auswählen

String doorText "Geklingelt" { http="<[http://doorbell/bell.json:10000:REGEX((.*))]" }
Ich sehe auch, dass er einen String abholt und in doorText speichert:

Code: Alles auswählen

2021-02-04 19:39:42.486 [vent.ItemStateChangedEvent] - doorText changed from NULL to ["2021-02-03, 18:12:13", "2021-02-03, 18:12:13", 1]
Aber dieser wird nicht im SimpleUI angezeigt. Dort steht lediglich "Geklingelt".

Was mache ich falsch?

Danke für Eure Hilfe!
Haiko

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: http-Binding

Beitrag von int5749 »

haiko hat geschrieben: 4. Feb 2021 19:52 Danke für Eure Hilfe!
Hallo und guten Abend,

hilfreich wäre es den Code hier in entsprechende Tags zu packen, damit er "lesbarer" erscheint. Bei 1-3 Zeilen mag das noch gehen, danach wird es schwierig zu lesen ;)

Versuch mal

Code: Alles auswählen

 String doorText "Geklingelt [%s]" { http="<[http://doorbell/bell.json:10000:REGEX((.*))]" }
 
Durch [%s] wird der gelesene String an den Text angehangen. Falls dies zu lang ist, müsste es evtl. noch umformatiert werden.

Viele Grüße
Jörg
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: http-Binding

Beitrag von udo1toni »

Ich hab das mal angepasst... ;)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Re: http-Binding

Beitrag von haiko »

Klappt! Danke erstmal und sorry, für das fehlende Markup. Ich gelobe Besserung. Gleich noch eine paar Fragen:

1) Ich hatte mir alternativ überlegt, eine Rule zu schreiben, die regelmäßig pollt und das Ergebnis in die Variablen schreibt. Wäre das nicht sogar einfacher?

2) Gibt es auch so etwas wie eine 1:1 Transformation, soll heißen eine Transformation, wo ich nicht REGEX oder JS oder sonst was bemühen muss?

3) Wie sieht es mit Typkonversionen aus? Ich bekomme ja ein Datum und eine Uhrzeit zurück. Schick wäre natürlich, wenn ich das gleich in ein DateTime Item packen könnte.

Nochmals vielen dank für die schnelle Hilfe!

Herzliche Grüße
Haiko

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Re: http-Binding

Beitrag von haiko »

udo1toni hat geschrieben: 4. Feb 2021 21:44 Ich hab das mal angepasst... ;)

Code: Alles auswählen

String danke "Herzlichen Dank!!"

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

Re: http-Binding

Beitrag von udo1toni »

Warum willst Du da eine Rule nutzen? openHAB erledigt den Poll doch ganz alleine? Was ist denn einfacher, als ein Item, welches vollautomatisch befüllt wird?
Sinnvoller wäre es natürlich, wenn die Klingel selbst ein post oder put absetzen könnte und darüber dann aktiv den Status des Items setzt, ein Event Push ist immer effizienter als ein frequent Pull.

Das angegebene REGEX übernimmt die Antwort 1:1. Es ist nicht vorgesehen, auf eine Transformation zu verzichten, aber das sollte auch nicht weiter stören. So gut wie alle http Antworten müssen irgendwie gefiltert werden.

Eine Umwandlung in ein "echtes" Datum ist leider nicht so einfach, schon weil das gelieferte Format keine vollständige Information liefert (es fehlt die Zeitzone). Du könntest aber mit JS (JavaScript) einen Filter programmieren, der ein passendes Zielformat erzeugt und anschließend kannst Du aus dem String Item ein DateTime Item machen, welches dann ein echtes Datum enthält. Die fehlende Zeitzone muss das JavaScript dann ergänzen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Re: http-Binding

Beitrag von haiko »

Vielen Dank für die Antworten und Hinweise. Ich habe meine Aufgabe nun gelöst. Folgende Konfiguration für das Binding habe ich gewählt:

Code: Alles auswählen

DateTime lastRinging "Last ringing [%1$tY-%1$tm-%1$td %1$tH:%1$tM]" { http="<[http://drosselbell/bell.json:10000:JSONPATH($.[0])]" }
DateTime bellStart "Start Drosselbell [%1$tY-%1$tm-%1$td %1$tH:%1$tM]" { http="<[http://drosselbell/bell.json:10000:JSONPATH($.[1])]" }
Number ringCount "Ringings [%d]" { http="<[http://drosselbell/bell.json:10000:JSONPATH($.[2])]" }
Number bellTemp "Bell temperature [%.3f °C]" { http="<[http://drosselbell/bell.json:10000:JSONPATH($.[3])]" }
Mit JSONPATH kann ich hervorragend, die Einzelteile aus dem JSON heraus fummeln:

Code: Alles auswählen

["2021-02-16T15:29:28", "2021-02-15T11:01:14", 3, 25.25]
TimeZone ist nicht notwendig, zum Parsen muss nur in dem Datumsstring das 'T' zwischen Datum und Zeit stehen.

Herzlichen dank nochmals für die Hilfe!
Grüße
Haiko

P.S. Ich bin auch kein Fan von Polling, aber das schien mir die einfachste Lösung zu sein, zumal der Datensatz ja sehr schmal ist. Wie könnte man das anders (besser) lösen?

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

Re: http-Binding

Beitrag von udo1toni »

Da Du das http1 Binding nutzt, solltest Du einen http Cache anlegen. Alternativ kannst Du auch auf http2 umstellen, dort ist der Cache automatisch mit eingebaut.

Der http Cache wird anstelle des http-Aufrufs angegeben. Vorteil: Es gibt nur einen Aufruf für alle vier Items. Mit Deiner Konfiguration rufst Du alle 10 Sekunden vier mal die Adresse auf.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

haiko
Beiträge: 23
Registriert: 30. Sep 2020 21:28
Answers: 0

Re: http-Binding

Beitrag von haiko »

Danke für den Hinweis! Über den Cache hatte ich auch schon nachgedacht. Allerdings finde ich vier Aufrufe alle zehn Sekunden für einen Apache auf einem RasPi Zero, der sich ansonsten total langweilt vertretbar. Es ist eine Optimierungsmöglichkeit. Ich schau mir das nochmal an.

Wenn ich in meinem OpenHAB2 über PaperUI die Bindings anschaue, finde ich nur EINE http-Implementierung. Wie komme ich zu http2? Ich habe mir die Konfiguration von http2 mal angeschaut und das scheint mir doch erheblich komplizierter zu sein.

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

Re: http-Binding

Beitrag von udo1toni »

http2 steht offiizell in OH2 nicht zur Verfügung, es gibt aber ein entsprechendes jar, welches man manuell installieren kann. Ich habe das in der Beta-Phase des Bindings getan. Die Konfiguration ist nicht komplexer als bei http1, es gibt aber (wesentlich) mehr Möglichkeiten. Man muss dabei immer im Hinterkopf behalten, dass alle neuen Bindings den Thing-Ansatz verfolgen. Das bedeutet für http2, dass die URL nun das Thing darstellt, die Channel enthalten dann lediglich die spezifischen Anteile, getrennt für beide Richtugnen, falls ein Channel bidirektional ist. Was also in http1 z.B. in drei Teilen konfiguriert wurde (ankommend, abgehend ON und abgehend OFF), ist in http2 ein Thing mit dem unabänderlichen Teil der URL und einem Channel, in dem der Input-Teil als state sowie der Output-Teil (wiederum unabhängig vom Befehl) als command angegeben sind, sowie dem konkreten ON- Befehl und dem OFF-Befehl. Die URL muss also nur einmal angegeben werden. Was auf den ersten Blick komplexer wirkt, ist in Wirklichkeit nur eine andere Aufteilung der Teilparameter.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten