FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: ms_steini am 09 September 2022, 09:55:54

Titel: [FTUI3] Icon name regex
Beitrag von: ms_steini am 09 September 2022, 09:55:54
schönen guten Tag zusammen,

ich verzweifle gerade an eigentlich ganz einfachem Regex für die Darstellung der Icons.

Ich habe einen Homematic Dimmer und möchte für die einzelnen Helligkeiten (pct) ein anderes Icon anzeigen lassen.
0 = light_light_dim_0
0.5 bis 9.5 = light_light_dim_09
10 bis 19.5 = light_light_dim_10
.
.
90 bis 99.5 = light_light_dim_90
100 =  light_light_dim_100

Es funktioniert auch alles bis auf pct = 100, hier wird das Icon "light_light_dim_09" angezeigt.

Ich habe jede einzelne Regex unter https://regex101.com/ getestet und da scheint alles richtig zu sein.
was ist denn an dem Regex falsch?

<ftui-icon
[name]="EG.Dimmer.Buero_Dim:pct | map('
0:light_light_dim_0,
`^[1-9]$|^[0-9]\.[0-9]$`:light_light_dim_09,
`^1[0-9]$|^1[0-9]\.[0-9]$`:light_light_dim_10,
`^2[0-9]$|^2[0-9]\.[0-9]$`:light_light_dim_20,
`^3[0-9]$|^3[0-9]\.[0-9]$`:light_light_dim_30,
`^4[0-9]$|^4[0-9]\.[0-9]$`:light_light_dim_40,
`^5[0-9]$|^5[0-9]\.[0-9]$`:light_light_dim_50,
`^6[0-9]$|^6[0-9]\.[0-9]$`:light_light_dim_60,
`^7[0-9]$|^7[0-9]\.[0-9]$`:light_light_dim_70,
`^8[0-9]$|^8[0-9]\.[0-9]$`:light_light_dim_80,
`^9[0-9]$|^9[0-9]\.[0-9]$`:light_light_dim_90,
100:light_light_dim_100')">
</ftui-icon>


Vielen Dank
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: yersinia am 09 September 2022, 11:39:55
Lass mal ^ und $ weg, da diese durch FTUI3 schon gesetzt (https://github.com/knowthelist/ftui/blob/master/www/ftui/modules/ftui/ftui.helper.js#L30) werden.
Darüber hinaus zieh doch die 100 mal nach vorne, als ersten map Wert.
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: ms_steini am 09 September 2022, 12:28:22
es geht überhaupt nicht wenn ich ^ und $ weg lasse
dann wird bei jedem PCT Wert das Icon "light_light_dim_09" angezeigt außer bei PCT = 0

Wenn ich die Zeile "`^[1-9]$|^[0-9]\.[0-9]$`:light_light_dim_09," komplett weg lasse funktioniert es, nur dann fehlt mir der Bereich
von 0.5 bis 9.5
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: mr_petz am 09 September 2022, 12:31:46
Mach das ganze doch mit step() und ohne dem regex...
LG

Edit: https://forum.fhem.de/index.php/topic,123701.msg1182722.html#msg1182722
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: ms_steini am 09 September 2022, 13:06:10
jep, funktioniert...

wundert mich allerdings, sollte aber doch auch mit regex funktionieren.
Mit step() ist aber auch viel einfacher.

Danke für den Hinweis.
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: OdfFhem am 09 September 2022, 19:02:42
Zitat von: ms_steini am 09 September 2022, 13:06:10
wundert mich allerdings, sollte aber doch auch mit regex funktionieren.

Der reguläre Ausdruck ist zu allgemein, da man den Punkt (.) in diesem Umfeld nicht maskieren kann ... \ wird ignoriert bzw. entsorgt.

`^[1-9]$|^[0-9]\.[0-9]$`:light_light_dim_09,

100 passt also auf den resultierenden, regulären Ausdruckteil ^[0-9].[0-9]$

Gibt man den Punkt (.) im Rahmen der eckigen Klammern an, so handelt es sich tatsächlich um einen Punkt und nicht mehr um den Platzhalter für ein beliebiges Zeichen

`^[1-9]$|^[0-9][.][0-9]$`:light_light_dim_09,

Kein Treffer mehr im Falle von 100
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: ms_steini am 09 September 2022, 19:14:10
@OdfFhem

vielen DANK für die Erklärung
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: mr_petz am 09 September 2022, 19:43:57
Hier deine Lösung mit map():

<ftui-icon
[name]="EG.Dimmer.Buero_Dim:pct | map('
`0|0.0`:light_light_dim_0,
`^[1-9]$|^0.[1-9]$|^[1-9][.][0-9]$`:light_light_dim_09,
`1[0-9]$|1[0-9].[0-9]`:light_light_dim_10,
`2[0-9]|2[0-9].[0-9]`:light_light_dim_20,
`3[0-9]|3[0-9].[0-9]`:light_light_dim_30,
`4[0-9]|4[0-9].[0-9]`:light_light_dim_40,
`5[0-9]|5[0-9].[0-9]`:light_light_dim_50,
`6[0-9]|6[0-9].[0-9]`:light_light_dim_60,
`7[0-9]|7[0-9].[0-9]`:light_light_dim_70,
`8[0-9]|8[0-9].[0-9]`:light_light_dim_80,
`9[0-9]|9[0-9].[0-9]`:light_light_dim_90,
`100|100.0`:light_light_dim_100')">
</ftui-icon>


Zumindest geht es so im label
LG mr_petz

Edit: Code geändert.
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: ms_steini am 09 September 2022, 23:03:30
das ist natürlich auch nicht schlecht.

Mein Problem war, das ich gedacht habe ich müsste den (.) Punkt mit \ escapen.
Unter https://regex101.com/ wurde es jedenfalls so ausgegeben.

aber in meinem Fall passt "step()" tatsächlich besser.
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: OdfFhem am 10 September 2022, 01:36:57
@mr_petz
Wenn z.B. 1.0 nicht als Wert vorkommen kann, dann klappt Dein Trick mit der Nachkommastelle von 1 bis 9.
Wenn auch ein Wert > 100 und ohne Nachkommastellen vorkommen könnte, dann würden ganz viele Werte zwischen 101 und 999 matchen.


Zitat von: ms_steini am 09 September 2022, 23:03:30
Mein Problem war, das ich gedacht habe ich müsste den (.) Punkt mit \ escapen.
Unter https://regex101.com/ wurde es jedenfalls so ausgegeben.
https://regex101.com/ (https://regex101.com/) "arbeitet" im normalen Umfeld und bietet einem die Möglichkeit zum "Austoben".
Befindet man sich direkt unter JavaScript, sollte man (fast) alle "erarbeiteten" Testszenarien übertragen können.
Im Pipe-Umfeld von FTUI3 hat man allerdings ein paar Restriktionen bzgl. einzelner Zeichen, die die Möglichkeiten reduzieren ...
Titel: Antw:[FTUI3] Icon name regex
Beitrag von: mr_petz am 10 September 2022, 11:18:31
@OdfFhem
Haste mal wieder Recht ;)
aber jetzt:

map('
`0|0.0`:light_light_dim_0,
`^[1-9]$|^0.[1-9]$|^[1-9][.][0-9]$`:light_light_dim_09,
`1[0-9]$|1[0-9].[0-9]`:light_light_dim_10,
`2[0-9]|2[0-9].[0-9]`:light_light_dim_20,
`3[0-9]|3[0-9].[0-9]`:light_light_dim_30,
`4[0-9]|4[0-9].[0-9]`:light_light_dim_40,
`5[0-9]|5[0-9].[0-9]`:light_light_dim_50,
`6[0-9]|6[0-9].[0-9]`:light_light_dim_60,
`7[0-9]|7[0-9].[0-9]`:light_light_dim_70,
`8[0-9]|8[0-9].[0-9]`:light_light_dim_80,
`9[0-9]|9[0-9].[0-9]`:light_light_dim_90,
`100|100.0`:light_light_dim_100')

Es funktioniert nur von 0 bis 100 mit und ohne einer Nachkommastelle.
Bei step() funktioniert es mit egal wievielen Nachkommastellen.
Bei entsprechendem step() würde es bei kleiner 0 und größer 100 auch nicht mehr gehen...
Ich wollte nur @ms_steini eine Lösung aufzeigen.
LG

Edit:
oder 0 bis 100 mit egal wieviel Nachkommastellen und alles regulär:

map('
`^0$|^0[.]0+$`:light_light_dim_0,
`^[1-9]$|^0[.][1-9].*$|^[1-9][.].*$`:light_light_dim_09,
`^1[0-9]$|^1[0-9][.].*$`:light_light_dim_10,
`^2[0-9]$|^2[0-9][.].*$`:light_light_dim_20,
`^3[0-9]$|^3[0-9][.].*$`:light_light_dim_30,
`^4[0-9]$|^4[0-9][.].*$`:light_light_dim_40,
`^5[0-9]$|^5[0-9][.].*$`:light_light_dim_50,
`^6[0-9]$|^6[0-9][.].*$`:light_light_dim_60,
`^7[0-9]$|^7[0-9][.].*$`:light_light_dim_70,
`^8[0-9]$|^8[0-9][.].*$`:light_light_dim_80,
`^9[0-9]$|^9[0-9][.].*$`:light_light_dim_90,
`^100$|^100[.]0+$`:light_light_dim_100')


aber mit step() ist es natürlich einfacher. Ich spiele nur gern... :D