readingsChange mit if

Begonnen von ToKa, 13 Dezember 2016, 20:56:06

Vorheriges Thema - Nächstes Thema

ToKa

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
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

rudolfkoenig

\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}

ToKa

RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight