FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ReneR1986 am 04 März 2022, 09:16:50

Titel: Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 04 März 2022, 09:16:50
Hallo zusammen,
ich scheine die Logik der RegEx bei Tablet Ui immer noch nicht begriffen zu haben.

Je nachdem, welches State das Reading des Device hat, soll der Smiley lachen oder weinen bzw. rot oder grün sein.
Aktuell hat das Reading network folgenden Wert:

connected to 192.168.1.155

Die Regex scheint aber nicht zu greifen. Der Smiley lächelt, ist aber grau, nicht grün.
Ich habe mal gelesen, dass allen RegEx bei Tablet UI automatisch ein ^ vorangestellt und ein $ hinten angestellt wird.
Bei https://regex101.com matcht immer alles, wie ich es mir vorstelle, hier jedoch nicht.

<div data-type="symbol"
class="bigger"
data-device="Licht_Wintergarten"
data-get='network'
data-icons='["fa-smile-beam","fa-sad-tear","fa-sad-tear"]'
data-states='["connected.*","disconnected","not connected"]'
data-colors='["green","#FF0000","#FF0000"]'>
</div>
<div class="bold">Shelly Wintergarten</div>
<div data-type="label"
data-get='network'
     data-device="Licht_Wintergarten">
</div>
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: Thomas0401 am 04 März 2022, 17:01:33
Ich denke das muss so bzw. absolut sicher

data-get="network"

und nicht

data-get='network'

Ich bin mir auch nicht sicher ob regex nur bei data-get funktioniert, notfalls würde ich das Reading mit einem userReading umgestallten bzw. es komplett in data-state schreiben.
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: OdfFhem am 06 März 2022, 08:56:38
@ReneR1986

*** reguläre Ausdrücke werden automatisch mit Anfang bzw. Ende geklammert - müssen also immer für den ganzen Wert formuliert werden

Grundsätzlich funktioniert Dein Beispiel, aber Du hast keinen Fall, der die "restlichen" Werte abbildet. Daher kann die Einfärbung bei Änderung des Readingwertes im Zweifel nicht ermittelt werden.

Angenommen, Dich würde nur connected oder nicht connected interessieren:

  data-icons='["fa-smile-beam","fa-sad-tear"]'
  data-states='["connected.*",".*"]'
  data-colors='["green","#FF0000"]'


Angenommen, Dich interessiert jeder Zustand - unerwartete Zustände sollen aber speziell dargestellt werden:

  data-icons='["fa-smile-beam","fa-sad-tear","fa-sad-cry"]'
  data-states='["connected.*","disconnected",".*"]'
  data-colors='["green","#FF0000","yellow"]'

Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 07 März 2022, 16:30:39
Zitatreguläre Ausdrücke werden automatisch mit Anfang bzw. Ende geklammert - müssen also immer für den ganzen Wert formuliert werden

Das habe ich noch nicht 100%ig verstanden.
Heißt das, es muss immer "alles" abgefangen werden. Im Zweifel über ".*"  ?
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: OdfFhem am 08 März 2022, 19:22:40
@ReneR1986

Die im Zitat stehende Aussage sollte nur Deine Vermutung bestätigen, dass reguläre Ausdrücke im aktuellen Zusammenhang stets mit ^ und $ geklammert werden - ein regulärer Ausdruck muss also immer auf den ganzen Prüfwert anwendbar sein.

Im Falle von connected hast Du ja .* ergänzt, um " to 192.168.1.155" abzudecken. Hättest Du das .* nicht ergänzt, hätte der (geklammerte) reguläre Ausdruck nicht gepasst ...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 09 März 2022, 10:30:12
Hmm,

das von mir anfangs verwendete Pattern funktioniert jedoch nicht:

data-states='["connected.*","disconnected","not connected"]'

Wenn ^und $ hinzugefügt werden, sieht es dann eigentlich so aus:

data-states='["^connected.*$","^disconnected$","^not connected$"]'

Je nachdem welcher Wert da ist, also:
connetced to 192.168.1.155
disconnected
not connected

kann der jeweilige reguläre Ausdruck doch auf den Wert angewendet werden...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: OdfFhem am 09 März 2022, 14:46:56
@ReneR1986

Ich hatte Dein Beispiel aus #1 am WE getestet und funktioniert bei mir eigentlich einwandfrei; als Beispielwerte hatte ich ebenfalls die soeben von Dir genannten Werte verwendet.

Vielleicht solltest Du in data-states einfach mal den reinen ".*"-Fall als 4. Variante aufnehmen, um zu sehen, ob denn zumindest dieser Allgemeinfall zum Tragen käme ...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 11 März 2022, 09:27:21
Ich habe zum testen jetzt einmal ".*" als vierte Variante mit eingefügt.
Das klappt erstmal aber das würde ja alles abfangen...

<div data-type="symbol"
class="bigger"
data-device="Licht_Wintergarten"
data-get='network'
data-icons='["fa-smile-beam","fa-sad-tear","fa-sad-tear","fa-smile-beam"]'
data-states='["connected.*","disconnected","not connected",".*"]'
data-colors='["green","#FF0000","#FF0000","green"]'>
</div>
<div class="bold">Shelly Wintergarten</div>
<div data-type="label"
data-get='network'
     data-device="Licht_Wintergarten">
</div>



Ich habe es jetzt erst einmal so gelöst, also am Anfang .*connected to.* :

<div data-type="symbol"
class="bigger"
data-device="Licht_Wintergarten"
data-get='network'
data-icons='["fa-smile-beam","fa-sad-tear","fa-sad-tear"]'
data-states='[".*connected to.*","disconnected","not connected"]'
data-colors='["green","#FF0000","#FF0000"]'>
</div>
<div class="bold">Shelly Wintergarten</div>
<div data-type="label"
data-get='network'
     data-device="Licht_Wintergarten">
</div>


Allerdings ist es schon ein bisschen unbefriedigend, weil ich die Logik hier noch nicht ganz verstanden habe.
Nach meinem Verständnis müsste die aller erste Variante (das hast du ja auch bestätigt) funktionieren...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: OdfFhem am 11 März 2022, 10:37:16
@ReneR1986

Ich hatte z.B. mit einem Readingwert "connetced to 192.168.1.155" getestet und es hat wie erwartet funktioniert.

Scheinbar steht bei Deinem Readingwert noch etwas (Leerzeichen oder ...) vor dem connected - der reguläre Ausdruck ging ja davon aus, dass der Readingwert unmittelbar mit connected beginnt ...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 11 März 2022, 13:45:56
OK, ich denke ich bin der Lösung näher gekommen.
Es scheint tatsächlich an dem Wert im Reading zu liegen..

Zum testen habe ich einmal einen Dummy angelegt und im STATE den selben Wert gesetzt, also:
connetced to 192.168.1.155

Und sieh da, es geht mit connected.* wie erwartet.

Bei dem original Reading im Shelly device scheint der Wert 192.168.1.155 ein Link zu sein.
Jedenfalls lässt er sich anklicken und ich komme dann direkt auf den Shelly.

Warum das ganze ein Problem ist, weiß ich jedoch nicht.
Als Workaround könnte ich jetzt z.B. versuchen ein userReading zu erstellen und den Wert des original Readings in einen "normalen" String zu konvertieren.
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 11 März 2022, 16:56:12
Obwohl, wenn es tatsächlich als Link in der Form <a href... usw. interpretiert wird, macht es schon Sinn, warum es vorher nicht ging...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: OdfFhem am 11 März 2022, 17:01:58
@ReneR1986

Ich vermute jetzt, dass Dein Shelly mit einem FHEM-Gerät vom TYPE SHELLY abgebildet wird.

Nach dem Modul steht bei Dir im Reading nicht "connected to ...", sondern "<html>connected to ...".
Deshalb brauchst Du vor connected ebenfalls ".*" oder ".html." oder ...
Titel: Antw:Wiedermal RegEx mit Tablet Ui
Beitrag von: ReneR1986 am 11 März 2022, 20:43:55
Das ist es! Danke!