Hallo zusammen,
kann man in einem readingsChange eine if Funktion verwenden? Ich will ein reading ändern, das entweder Werte in der Form "dim 21" oder "off" annehmen kann. Ich will erreichen, dass im ersten Fall im reading die Zahl - also im Beispiel 21 - steht oder im zweiten Fall eine 0.
So sieht das List aus:
Internals:
CFGFN
DEF ST.bz.HR.Heizung reportedState (\d+|off) {if($1 eq "off") {"0"} else {$1}}
NAME ST.bz.HR.reportedState.rsc
NOTIFYDEV ST.bz.HR.Heizung
NR 454
NTFY_ORDER 00-ST.bz.HR.reportedState.rsc
STATE active
TYPE readingsChange
Readings:
2016-12-13 20:44:24 state active
Attributes:
verbose 5
Bei "off" funktioniert es, aber im anderen Fall erhalte ich als Ergebnis immer den ursprünglichen Wert (z.B. dim 21).
Was mache ich falsch? Ein online regex tester liefert mir den Wert ohne dim.
Beste Grüße
Torsten
\d+ durch $1 zu ersetzen bewirkt nichts, Du musst schon dim.(\d+) durch $1 ersetzen. Um mit dem gleichen readingsChange auch off auf 0 zu mappen muss der Regexp etwas komplexer sein:
defmod ST.bz.HR.reportedState.rsc readingsChange ST.bz.HR.Heizung reportedState (dim.(\d+)|off) {$1 eq "off" ? 0 : $2}
Vielen Dank!