Autor Thema: [FTUI3] Icon name regex  (Gelesen 907 mal)

Offline ms_steini

  • Full Member
  • ***
  • Beiträge: 336
[FTUI3] Icon name regex
« 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1510
    • Cyanide & Happiness
Antw:[FTUI3] Icon name regex
« Antwort #1 am: 09 September 2022, 11:39:55 »
Lass mal ^ und $ weg, da diese durch FTUI3 schon gesetzt werden.
Darüber hinaus zieh doch die 100 mal nach vorne, als ersten map Wert.
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline ms_steini

  • Full Member
  • ***
  • Beiträge: 336
Antw:[FTUI3] Icon name regex
« Antwort #2 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
« Letzte Änderung: 09 September 2022, 12:29:58 von ms_steini »

Offline mr_petz

  • Hero Member
  • *****
  • Beiträge: 1112
Antw:[FTUI3] Icon name regex
« Antwort #3 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
« Letzte Änderung: 09 September 2022, 12:37:22 von mr_petz »
Zustimmung Zustimmung x 1 Informativ Informativ x 1 Liste anzeigen

Offline ms_steini

  • Full Member
  • ***
  • Beiträge: 336
Antw:[FTUI3] Icon name regex
« Antwort #4 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.

Online OdfFhem

  • Hero Member
  • *****
  • Beiträge: 1161
Antw:[FTUI3] Icon name regex
« Antwort #5 am: 09 September 2022, 19:02:42 »
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
Informativ Informativ x 1 Liste anzeigen

Offline ms_steini

  • Full Member
  • ***
  • Beiträge: 336
Antw:[FTUI3] Icon name regex
« Antwort #6 am: 09 September 2022, 19:14:10 »
@OdfFhem

vielen DANK für die Erklärung

Offline mr_petz

  • Hero Member
  • *****
  • Beiträge: 1112
Antw:[FTUI3] Icon name regex
« Antwort #7 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.
« Letzte Änderung: 10 September 2022, 11:50:15 von mr_petz »

Offline ms_steini

  • Full Member
  • ***
  • Beiträge: 336
Antw:[FTUI3] Icon name regex
« Antwort #8 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.
« Letzte Änderung: 09 September 2022, 23:05:30 von ms_steini »

Online OdfFhem

  • Hero Member
  • *****
  • Beiträge: 1161
Antw:[FTUI3] Icon name regex
« Antwort #9 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.


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/ "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 ...

Offline mr_petz

  • Hero Member
  • *****
  • Beiträge: 1112
Antw:[FTUI3] Icon name regex
« Antwort #10 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
« Letzte Änderung: 10 September 2022, 12:28:08 von mr_petz »

 

decade-submarginal