Hauptmenü

data-part - regex

Begonnen von Eisix, 18 November 2016, 17:15:03

Vorheriges Thema - Nächstes Thema

Eisix

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

setstate

#1
Was willst du bekommen? Die 95?

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

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

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

Eisix

Ja die 95, 

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

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

Danke!

Gruß
Eisix

setstate

Schön, dass es klappt.

Man kann mit data-unit oder data-post-text das % wieder anhängen, wenn man es möchte.

Eisix

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

Markus.

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

setstate

Wenn du data-part ganz weglässt, steht aber das kpl. Reading im Label?

und was ist mit data-part="1"


C0mmanda

#7
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

Markus.

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

Markus.

#9
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...?


grossmaggul

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 Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

setstate

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="\|(.+)\|.+"

grossmaggul

#12
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.:-(
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

grossmaggul

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 Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1