FHEM Forum

FHEM => Automatisierung => Thema gestartet von: ToKa am 13 Dezember 2016, 20:56:06

Titel: readingsChange mit if
Beitrag von: ToKa am 13 Dezember 2016, 20:56:06
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
Titel: Antw:readingsChange mit if
Beitrag von: rudolfkoenig am 14 Dezember 2016, 12:55:54
\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}
Titel: Antw:readingsChange mit if
Beitrag von: ToKa am 14 Dezember 2016, 20:58:44
Vielen Dank!