Seite 2 von 2

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 20. Aug 2020 09:26
von Tokamak
Johannes911 hat geschrieben: 19. Aug 2020 18:13 @Tokamak: da müsste ich davor noch die Position im Datenstrom herausfiltern
Sollte nicht, da der Anfangsteil mit .* übersprungen wird.

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 20. Aug 2020 19:39
von Johannes911
REGEX für folgende Daten A:

Code: Alles auswählen

<div id="pos365">&nbsp;32,1 &deg;C </div>
<div id="pos366">999,9 &deg;C </div>

Code: Alles auswählen

{ http="<[blnet:10000:REGEX(.*\"pos365\">[&nbsp;]*([-]*[0-9]+,[0-9]).*)]" }
bringt als Ergebnis 32,1 als String.
und

Daten B:

Code: Alles auswählen

<div id="pos190">AUS</div>

Code: Alles auswählen

 { http="<[blnet:30000:REGEX(\"pos190\">([A-Z][A-Z][A-Z]).*)]" }
bringt als Ergebnis entweder AUS oder EIN als String

Damit scheinen meine REGEX-Probleme wohl gelöst



{ http="<[blnet:10000:REGEX(.*\"pos365\">[&nbsp;]*([-]*[0-9]+,[0-9]).*)]" }
............................................Trigger
...............................................................0 bis n mal &nbsp;
.............................................................................0 bis n mal ein Minuszeichen
..................................................................................1 bis n mal Ziffern
...........................................................................................ein Komma
.............................................................................................eine Ziffer
...................................................................................................Rest entsorgen


funktioniert hier auch bei 5-stelligem Betriebsstundenzähler
<div id="pos32">&nbsp;&nbsp;&nbsp;&nbsp;0 Std</div>

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 21. Aug 2020 07:36
von Tokamak
Schon mal

Code: Alles auswählen

{ http="<[blnet:10000:REGEX(.*([-]*[0-9]+,[0-9]) &deg.*)]" }
ausprobiert?

Hier zielst du nur auf die Zahl vor dem °C ab, alles andere wird ignoriert.

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 21. Aug 2020 10:59
von Johannes911
ja, aber meine Lösung ist für mich universeller da sie auch bei den Stunden und Minuten funktioniert (Betriebsstundenzähler)

Code: Alles auswählen

<div id="pos30">&nbsp;&nbsp;&nbsp;&nbsp;2 Std</div>
<div id="pos31">11 Min</div>
<div id="pos32">&nbsp;&nbsp;&nbsp;&nbsp;0 Std</div>
<div id="pos33">27 Min</div>
<div id="pos34">&nbsp;&nbsp;&nbsp;&nbsp;0 Std</div>
<div id="pos35">&nbsp;0 Min</div>
<
aber danke

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 21. Aug 2020 11:38
von Tokamak
Okay, verstehe.

Versuche es mal mit

Code: Alles auswählen

{ http="<[blnet:10000:REGEX(.*([-]*[0-9]+[,0-9]*) .*</div>)]" }
oder kurz

Code: Alles auswählen

{ http="<[blnet:10000:REGEX(.*([-,0-9]+) .*</div>)]" }
Dann hast du jede Zahl vor dem Blank vor der Einheit und dem abschließenden </div> (es könnte sein, dass man das / in </div> escapen muss).

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 21. Aug 2020 20:06
von Johannes911
ja, das klappt für _einen_ Wert, ich habe aber gut 200 verschiedene Werte pos100 - pos395, allerdings mit Lücken. Und da dann zwischen der posnnn und dem Wert diese &nbsp; stehen ...

Danke

Re: openhab, spezielle Fragen zu REGEX

Verfasst: 22. Aug 2020 07:43
von Tokamak
Hast du es mal ausprobiert?

Die von mir angegebene regex zäumt das Pferd von hinten auf.

Sie nimmt die Zahl, die am Ende vor dem Leerzeichen, das vor der Einheit wie etwa °C oder Std steht, unabhängig davon, was davor steht (bzw. sollte es nehmen, da ich es nicht ausprobiert habe). Alles, was vor der Zahl steht, wird ignoriert, sei es nun posXYZ oder &nbsp