OH3 HTTP Binding plain Text auslesen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
ixylon
Beiträge: 7
Registriert: 20. Mär 2021 10:42
Answers: 0

OH3 HTTP Binding plain Text auslesen

Beitrag von ixylon »

Moin,
frisch angemeldet und schon eine Frage.
Bin, nachdem ich mir mit einem unbedachten Befehl die Rechte bei meiner IOBroker-Installation zerschossen habe, jetzt zu OpenHab 3 gewechselt.
Soweit funktioniert alles recht gut. Nun möchte ich gern die Solarwerte von der HANSOL-Anlage auslesen. Die stellt eine simple Webseite zur Verfügung(Gerät hat eig. Webserver).
Unter iObroker habe ich es irgendwie geschafft, die Daten auszulesen.

Nur hier verzweifel ich langsam. HTTP Binding ist installiert, aber ich weiß nicht so richtig was ich angeben muss, um an die Daten zu kommen. Die Daten verstecken sich im Quelltext beispielsweise so:

Code: Alles auswählen

<tr><td>GRID_P(30s)</td><td>720</td><td>LOAD_P(30s)</td><td>720</td></tr>
Die 720 ist der Wert von GRID_P(30s), den ich brauche.

Habt ihr einen Ansatz, wie ich da rangehen muss?
Gruß
Jens

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

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von udo1toni »

REGEX ist das Zauberwort. Du musst also zusätzlich das Regex Transformation Service Addon installieren.
Dann gibst Du beim Channel an, dass die ankommenden Daten durch die Transformation

Code: Alles auswählen

REGEX:(.*GRID_P(30s)</td><td>([0-9\.]*).*)
bearbeitet werden sollen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ixylon
Beiträge: 7
Registriert: 20. Mär 2021 10:42
Answers: 0

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von ixylon »

Der Tip mit dem Addon war schon prima. Das hatte ich schon mal übersehen.
Aber irgendwie will das noch nicht so. Das Thing ist ja schon mal grün, aber es kommt kein Wert.

Ich muss mir das noch mal in Ruhe ansehen, ist jetzt auch schon zu spät.
Aber Danke erst mal.

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

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von udo1toni »

Ja, REGEX Ausdrücke mögen immer ausprobiert werden, da ist eigentlich immer irgendwas nicht ganz korrekt dran...
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ixylon
Beiträge: 7
Registriert: 20. Mär 2021 10:42
Answers: 0

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von ixylon »

Ich komme irgendwie nicht weiter. Mache ich das überhaupt richtig?
1. Thing erstellen mit http-Binding mit der URL und GET und Text/HTML
2. im Thing einen Channel erstellen (String?) und bei state Transformation den Regexbefehl rein: REGEX:(.*GRID_P(30s)</td><td>([0-9\.]*).*)

Aber ich sehe nirgends Daten?
Der Channel gibt ein NULL aus.
Hab ich da einen Denkfehler?

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

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von udo1toni »

Oh. Ich sehe gerade, da sind im Regex Klammern enthalten... (30s) Du musst diese Klammern escapen, mit einem Backslash...

Code: Alles auswählen

REGEX:(.*GRID_P\(30s\)</td><td>([0-9\.]*).*)
Grundsätzlich bietet es sich an, zunächst den Channel ohne Transformation als String Channel anzulegen, dann kann man sehen, dass Daten rein kommen. Anschließend baut man die transformation ein, bis sie korrekt funktioniert. Wenn sichergestellt ist, dass immer ausschließlich Zahlen als Status heraus kommen, kann man dann noch den Channel Typ auf Number ändern.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ixylon
Beiträge: 7
Registriert: 20. Mär 2021 10:42
Answers: 0

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von ixylon »

So jetzt holt sich der Channel die komplette Webseite ohne sie zu filtern.
Ich verstehe nicht, warum...

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

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von udo1toni »

Dann passt der Filterausdruck nicht. REGEX liefert den vollen String aus, wenn das Muster nicht matcht (das ist eine Besonderheit in openHAB)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ixylon
Beiträge: 7
Registriert: 20. Mär 2021 10:42
Answers: 0

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von ixylon »

Das war eine schwere Geburt. Nachdem ich einen Channel geschafft hatte, wollte ich natürlich für die anderen Daten auch Channels anlegen. Und da kamen einfach keine Werte. Nur durch Zufall hab ich dann rausbekommen, dass man erst Werte bekommt, wenn man die Channels an ein Modell gekoppelt hat...böse Falle. ;)

Der REGEX-Ausdruck hat dann letztendlich funktioniert:

Code: Alles auswählen

REGEX:.*GRID_P\(30s\)</td><td>(.*?)<.*
Läuft erst einmal als String, muss ich noch mal genau gucken, wie ich das mit Number mache, da dort auch Minuszeichen kommen können.
Aber erst einmal vielen Dank für Deine Hilfe!

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

Re: OH3 HTTP Binding plain Text auslesen

Beitrag von udo1toni »

Wobei .*? ja für eine beliebige Menge beliebiger Zeichen steht. REGEX matcht auf die kürzestmögliche Zeichensequenz, es nimmt also alle Zeichen zwischen > und <, inklusive einem eventuellen Minuszeichen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten