Autor Thema: data-part - regex  (Gelesen 1799 mal)

Offline Eisix

  • Sr. Member
  • ****
  • Beiträge: 610
data-part - regex
« 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

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3695
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:data-part - regex
« Antwort #1 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%.*"
« Letzte Änderung: 18 November 2016, 17:46:06 von setstate »

Offline Eisix

  • Sr. Member
  • ****
  • Beiträge: 610
Antw:data-part - regex
« Antwort #2 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

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3695
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:data-part - regex
« Antwort #3 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.

Offline Eisix

  • Sr. Member
  • ****
  • Beiträge: 610
Antw:data-part - regex
« Antwort #4 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

Offline Markus.

  • Sr. Member
  • ****
  • Beiträge: 562
Antw:data-part - regex
« Antwort #5 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

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3695
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:data-part - regex
« Antwort #6 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"


Offline C0mmanda

  • Full Member
  • ***
  • Beiträge: 290
Antw:data-part - regex
« Antwort #7 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
« Letzte Änderung: 05 Januar 2017, 18:50:58 von C0mmanda »

Offline Markus.

  • Sr. Member
  • ****
  • Beiträge: 562
Antw:data-part - regex
« Antwort #8 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

Offline Markus.

  • Sr. Member
  • ****
  • Beiträge: 562
Antw:data-part - regex
« Antwort #9 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...?

« Letzte Änderung: 05 Januar 2017, 20:07:17 von Markus. »

Offline grossmaggul

  • Full Member
  • ***
  • Beiträge: 211
    • Mein Blog
Antw:data-part - regex
« Antwort #10 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 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
FHEM auf Debian Server, 2 x nanoCUL868,Homematic,MAX,MiLight,HUE

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3695
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:data-part - regex
« Antwort #11 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="\|(.+)\|.+"

Offline grossmaggul

  • Full Member
  • ***
  • Beiträge: 211
    • Mein Blog
Antw:data-part - regex
« Antwort #12 am: 19 Juli 2018, 01:23:15 »
Zitat
der Ausdruck verhält sich greedy
Sorry für die Frage, ich bin immer noch Regexanfänger :-[, aber was bedeutet das?

Zitat
data-part="\|(.+)\|.+"
Wenn ich das eingebe bekomme ich den kompletten Ausdruck angezeigt.:-(
« Letzte Änderung: 19 Juli 2018, 01:28:38 von grossmaggul »
FHEM auf Debian Server, 2 x nanoCUL868,Homematic,MAX,MiLight,HUE

Offline grossmaggul

  • Full Member
  • ***
  • Beiträge: 211
    • Mein Blog
Antw:data-part - regex
« Antwort #13 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... :-[ :-\

FHEM auf Debian Server, 2 x nanoCUL868,Homematic,MAX,MiLight,HUE