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:
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
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.
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
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?
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
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.
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