Erklärung Ich habe ein dummy-Device "testDevice" mit einem Reading "testReading" definiert; das Reading kann die Werte 0 und 1 annehmen und steuert damit die Darstellung eines anderen Wertes.
Variante1
<div data-type="label" data-device="global" data-get="version"
data-part=".*[:](.*)[/].*" data-pre-text="(" data-post-text=")"
data-limits-get="testDevice:testReading" data-limits='["0","1"]' data-classes='["green","red blink"]'
class="inline small"/>
Variante2
<div data-type="label" data-device="global" data-get="version"
data-substitution="s/fhem\.pl\:......//g" data-pre-text="(" data-post-text=")"
data-limits-get="testDevice:testReading" data-limits='["0","1"]' data-classes='["green","red blink"]'
class="inline small"/>
Variante 1 schneidet mir den gewünschten Teil (in diesem Fall die Revisionsnummer) aus global:version; allerdings wird der reguläre Ausdruck von data-part nicht nur auf data-get, sondern auch auf data-limits-get angewendet.
--> Wert richtig, Darstellung falsch (immer grün)
Variante 2 bereitet mir insofern ein Problem, dass ich die Revisionsnummer nicht freigestellt bekomme; allerdings ist die Darstellung in Ordnung, da data-substitution nicht auf data-limits-get angewendet wird.
--> Darstellung richtig (rot oder grün), Wert allerdings "falsch"
Daraus ergeben sich mindestens 2 Fragen:
1) Ist es richtig, dass data-part auch auf data-limits-get angewendet wird? (data-substitution ja scheinbar nicht)
2) Bekommt man auch mit data-substitution die Revisionsnummer freigestellt?
1) erscheint mir unlogisch, da müsste aber Setstate was zu sagen
2) Versuch es mal so:
data-substitution="s/.*:(\d.*)\/.*/$1/g"
Wenn data-limits-get nicht angegeben ist, wird data-limits-get = data-device + ":" + data-get gesetzt
Wenn data-limits-part nicht angegeben, wird data-limits-part = data-part gesetzt
Man kann das aber getrennt im HTML definieren.
1) @setstate
Mit data-limits-part hatte ich auch schon einmal rumprobiert, aber bin zu keinem echten Ergebnis gekommen.
Ein erneuter Versuch brachte dann eben einen unerwartet schnellen Erfolg :)
data-limits-part="(.*)" neutralisiert sozusagen die 'data-part'-Angabe!
Mit data-limits-part="-1" (lt. Doku) ist es wahrscheinlich sogar noch ressourcenschonender.
<div data-type="label" data-device="global" data-get="version"
data-part=".*[:](.*)[/].*" data-pre-text="(" data-post-text=")"
data-limits-get="testDevice:testReading" data-limits-part="(.*)" data-limits='["0","1"]' data-classes='["green","red blink"]'
class="inline small"/>
2) @sinus61
Der vorgeschlagene Ausdruck hat leider nicht geholfen; er führt zu einem harten Fehler "Invalid flags supplied to RegExp constructor".
Irgendwie scheint die Maskierung von "/" nicht zu funktionieren.
Nimmt man "/" und das vorgelagerte Maskierungszeichen "\" raus, dann wird die Seite zwar wieder aufgebaut, aber der Wert ist natürlich falsch.
Hätte ich fast vergessen: Schon mal schönen Dank für die schnelle Hilfe :D
Ja, ich hatte es mit regexp101.com getestet, da geht das. Ftui stört sich aber an dem "/" der gleichzeitig auch delimeter ist.
data-substitution="s#.*:(\d.*)/.*#($1)#g"
Das sollte aber gehen. pre und post spart das auch noch ein :)
2) @sinus61
Prima, hat geklappt. Und das Beste, man versteht es auch noch - perfekt.
Vielen Dank für die hilfreiche Unterstützung und noch einen schönen Abend.