FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Eisix am 18 November 2016, 17:15:03

Titel: data-part - regex
Beitrag von: Eisix am 18 November 2016, 17:15:03
Hallo,

versuche gerade ein data-part aus einem reading zu schneiden.

Reading ist
Total: 5633250 MB, Used: 5054605 MB, 95 %, Available: 292471 MB at /Daten


<div data-type="label" data-device="sysmon" data-get="Daten" data-part="((\d{1,3}) \%)\g{2}" >Regex</div>
<div data-type="label" data-device="sysmon" data-get="Daten" data-part="((\d{1,3}) \%)\2" >Regex</div>


Beide Versionen funktionieren nicht. Jemand einen Tip?

Gruß
Eisix
Titel: Antw:data-part - regex
Beitrag von: setstate am 18 November 2016, 17:34:38
Was willst du bekommen? Die 95?

",\s(\d+)\s%"

Eventuell noch ein .* davor und danach, weil automatisch ^ und $ verbaut ist.

".*,\s(\d+)\s%.*"
Titel: Antw:data-part - regex
Beitrag von: Eisix am 18 November 2016, 17:53:37
Ja die 95, 

.*,\s(\d+)\s%.*

funktioniert.
Irgendwie steige ich bei den Regex in Kombination mit Fhem nicht durch :(

Danke!

Gruß
Eisix
Titel: Antw:data-part - regex
Beitrag von: setstate am 18 November 2016, 18:49:58
Schön, dass es klappt.

Man kann mit data-unit oder data-post-text das % wieder anhängen, wenn man es möchte.
Titel: Antw:data-part - regex
Beitrag von: Eisix am 21 November 2016, 10:58:09
Hallo,

wäre

data-part=".*,\s(\d{1,3})\s%.*"

nicht besser?

Basierend darauf

ram    Total: 3943.43 MB, Used: 1092.98 MB, 27.72 %, Free: 2850.45 MB
swap  Total: 8188.00 MB, Used: 1176.95 MB, 14.37 %, Free: 7011.05 MB


<div class="inline">
        <div data-type="knob"
                data-device="sysmon"
                data-get="ram"
                data-anglearc="360"
                data-angleoffset="0"
                data-part=".*,\s(\d{1,3}.\d\d)\s%.*"
                data-min="0"
                data-max="100"
                data-bgcolor="green"
                data-fgcolor="#FA2828"
                class="mini readonly"
                data-unit="%"
        ></div>
        <div data-type="label">ram</div>
</div>
<div class="inline">
        <div data-type="knob"
                data-device="sysmon"
                data-get="swap"
                data-anglearc="360"
                data-angleoffset="0"
                data-part=".*,\s(\d{1,3}.\d\d)\s%.*"
                data-min="0"
                data-max="100"
                data-bgcolor="green"
                data-fgcolor="#FA2828"
                class="mini readonly"
                data-unit="%"
        ></div>
        <div data-type="label">swap</div>
</div>


Ram geht swap nicht  >:(

Jemand eine Idee?

Danke schon mal.
Eisix
Titel: Antw:data-part - regex
Beitrag von: Markus. am 05 Januar 2017, 18:21:54
Hallo Zusammen,

ich muss mich mal hier dran hängen, da mich die regex auch so langsam zur Verzweiflung bringen bzw. die Syntax in bestimmeten Kombinationen der Anwendung...:-(

Hier mal der Wert des REadings das ich als Label darstellen möchte.

24.7�C (Volt)

Versucht habe ich es folgendermaßen..


data-part="$val=~s/([\d.]*).*/$1/"


Das Label bleibt natürlich leer. Wäre klasse wenn mir da einer auf die Sprünge helfen kann.

Gruß

Markus
Titel: Antw:data-part - regex
Beitrag von: setstate am 05 Januar 2017, 18:48:07
Wenn du data-part ganz weglässt, steht aber das kpl. Reading im Label?

und was ist mit data-part="1"

Titel: Antw:data-part - regex
Beitrag von: C0mmanda am 05 Januar 2017, 18:49:27
Warum nicht einfach data-part="7"?
Bei mir funktioniert es einwandfrei bei exakt der Aufgabe des TE! (% Belegung Ram von Sysmon).

Im Default separieren Leerzeichen die data-parts. Einfach abzählen, fertig.

Somit im letzten Beispiel data-part="1"
Grtz
CmdA
Titel: Antw:data-part - regex
Beitrag von: Markus. am 05 Januar 2017, 19:07:32
ja das Label wird angezeigt wenn ich es ohne data-part mache. Aus irgendeinem Grund bringt aber das reading keine Daten aber STATE liefert den String mit dem Wert. Dieser sieht aber folgendermaßen aus....

V: 24.8�C


Gruß

Markus
Titel: Antw:data-part - regex
Beitrag von: Markus. am 05 Januar 2017, 19:18:35
ich habs jetzt mal so gemacht..

data-part="...([\d.]*).*"


So funktioniert es nun, aber geht das noch einfacher?

Gruß

Markus
EDIT:... Was ich festgestellt habe ist, wenn man die Seite auf FTUI öffnet es eine Zeit dauert bis Daten in diesem Label angezeigt werden. Als wenn es nur mit der nächsten Datenänderung des Readings angezeigt wird. Eventuellhat da noch jemand eine Idee...?

Titel: Antw:data-part - regex
Beitrag von: grossmaggul am 18 Juli 2018, 10:34:44
Ich grabe das hier mal wieder aus, irgendwie scheine ich nicht genug begabt zu sein um Regular Expressions zu erstellen und zu verstehen.:-(
Ich würde das ja gerne mal verstehen, aber irgendwie funktionieren regex, die im Regextester (http://"http://chris.photobooks.com/regex/") funktionieren, in ftui nicht.:-/

Folgenden String möchte ich zerlegen:

|/dev/sda|Hitachi HDS723020BLA642|

Im regex Tester habe ich dieses regex getestet:

\|(.*?)\|


Es wird mir dann auch das erwartete Ergebnis angezeigt:

|/dev/sda|
bzw.
/dev/sda

Gebe ich diesen regex jetzt aber beim Labelwidget in data-part an, wird gar nichts ausgegeben, was mache ich da falsch?

gm
Titel: Antw:data-part - regex
Beitrag von: setstate am 18 Juli 2018, 23:16:28
der Ausdruck verhält sich greedy (trotz des extra ? nach dem *). Es wir also alles zwischen dem ersten und letzten | gezogen.

Man könnte es dahin gehend ändern, dass man sagt: nach dem | muss noch irgend etwas folgen .+

data-part="\|(.+)\|.+"
Titel: Antw:data-part - regex
Beitrag von: grossmaggul am 19 Juli 2018, 01:23:15
Zitatder Ausdruck verhält sich greedy
Sorry für die Frage, ich bin immer noch Regexanfänger :-[, aber was bedeutet das?

Zitatdata-part="\|(.+)\|.+"
Wenn ich das eingebe bekomme ich den kompletten Ausdruck angezeigt.:-(
Titel: Antw:data-part - regex
Beitrag von: grossmaggul am 19 Juli 2018, 13:17:46
O.K, ich beantworte mich mal selber, greedy weiß ich jetzt.

Und wenn ich data-part="\|(.+?)\|" so abändere, dann bekomme ich /dev/sda angezeigt.

Jetzt frickele ich gerade daran herum den zweiten Teil des Ausdrucks herauszuschneiden.

Könnte man einen regex erzeugen, der das dann so ausgibt?

/dev/sda     Hitachi HDS723020BLA642

Oder muß man mehrere <div> erzeugen, mit entsprechenden data-parts und diese dann zusammenbauen?

Meine Fragen klingen für die regex Profis wahrscheinlich doof, aber ich versuche jetzt seit geraumer Zeit regex zu verstehen, aber es ist immer noch ein Buch mit sechs Siegeln... :-[ :-\