[Gelöst] Verhalten von data-part und data-substitution

Begonnen von OdfFhem, 19 Januar 2018, 13:18:38

Vorheriges Thema - Nächstes Thema

OdfFhem

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?

sinus61

1) erscheint mir unlogisch, da müsste aber Setstate was zu sagen

2) Versuch es mal so:
data-substitution="s/.*:(\d.*)\/.*/$1/g"



setstate

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.

OdfFhem

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

sinus61

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 :)

OdfFhem

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.