Seite 1 von 2

FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 11:16
von Mr. BJ
Hallo zusammen,

ich quäle mich mit Regex in einem Item herum und ich hoffe mir kann da jemand helfen.
Ich verwende das Fritz!Box TR064-Binding und bei der Version-Abfrage bekomme ich immer 141.06.87 anstatt 06.87.
Also habe ich folgendes in meiner .items eingefügt:

Code: Alles auswählen

String  fboxVersion
        "FBox Version [REGEX(\\d{2}.\\d{1,}$):%s]"
        {fritzboxtr064="softwareVersion"}
auch so brachte kein Erfolg:

Code: Alles auswählen

String  fboxVersion
        "FBox Version [%s]"
        {fritzboxtr064="softwareVersion:REGEX(\\d{2}.\\d{1,}$)"}
In der Sitemap habe ich es auch bereits verscuht aber kein Erfolg.
An sich ist der RegEx in Ordnung, ich habe es bei regex101 geprüft. Ich schätze das ich ein Denkfehler in der Items-Datei habe.

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 14:00
von hr3
Probier mal

Code: Alles auswählen

String  fboxVersion
        "FBox Version [REGEX(141.(.*?)):%s]"
        {fritzboxtr064="softwareVersion"}

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 15:17
von Mr. BJ
Leider das gleiche Ergebnis.

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 16:02
von hr3
Bei mir funktioniert es damit.
RegEx Transformation ist installiert?
Bitte poste deine sitemap.

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 17:29
von Mr. BJ

Code: Alles auswählen

Text item=fboxWanIPExternal label="FBox external WAN IP [%s]"

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 18:04
von hr3
Den Sitemap-Eintrag für fboxVersion bitte!

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 18:14
von Mr. BJ
Entschuldige, da habe ich gepennt.

Code: Alles auswählen

Text item=fboxVersion label="FBox Version [%s]"
RegEx Transformation ist auch installiert.

Eine blöde Frage, wenn ich die das Regex in dem Item verwende sollte dann das Ergebnis für alle gleich sein? In der Sitemap verweise/verlinke ich ja nur auf das modifizierte Item, oder?

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 18:31
von udo1toni
Mr. BJ hat geschrieben: 26. Mai 2018 11:16

Code: Alles auswählen

String  fboxVersion "FBox Version [%s]" {fritzboxtr064="softwareVersion:REGEX(\\d{2}.\\d{1,}$)"}
An sich ist der RegEx in Ordnung, ich habe es bei regex101 geprüft.
Das Problem dabei ist, dass es meines Wissens keinen online Verifier für die in openHAB verwendete REGEX-Art gibt.

Es gibt eigentlich zwei große Unterschiede bei der Arbeit mit REGEX. Der erste Punkt ist, dass REGEX, falls es keinen Match gibt, die volle Eingangszeichenkette zurückliefert, statt einer leeren Zeichenkette. Dieses Verhalten könnte man eigentlich als fehlerhaft bezeichnen :) aber es gab auch einen Grund, warum openHAB sich so verhält - frag bitte nicht, welchen, ich bekomme es nicht mehr zusammen.
der zweite Punkt ist, dass, falls es einen Match gibt, nicht einfach der gesamte Match zurück geliefert wird, sondern ausschließlich die erste Gruppierung. Du hast in Deinem REGEX keine Gruppierung, weshalb auch nichts zurückgeliefert wird.

Die Gruppen werden durchnumeriert, also $1, $2, $3 usw. Der Status wird eben aus $1 gebildet. Eine in openHAB gültige REGEX muss also immer exakt eine Gruppierung enthalten:

Code: Alles auswählen

REGEX(.*Anfang(.*)Ende.*)
Mit einem Eingabewert

Code: Alles auswählen

Das ist der Anfang vom Ende!
wird openHAB

Code: Alles auswählen

" vom "
zurückliefern (natürlich ohne die Gänsefüßchen, aber eben mit den Leerzeichen).
Es gibt noch etliche andere Unterschiede, allgemein kann man sagen, dass REGEX eher das Minimum an Möglichkeiten bietet. Jegliche Spezialitäten sollte man von vornherein vergessen. Wenn man wirklich komplexe Matches bilden muss, ist es besser, gleich zu JS zu greifen.

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 19:35
von hr3

Code: Alles auswählen

Text item=fboxVersion

Re: FRITZ!Box - Item mit Regex

Verfasst: 26. Mai 2018 19:39
von hr3
Nein, entweder Label im Item oder in der Sitemap definieren. Wenn in der Sitemap angegeben, wird die Definition im Item ignoriert