FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hhsch am 31 Oktober 2015, 15:45:48

Titel: Reading nur mit bestimmter Syntax annehmen
Beitrag von: hhsch am 31 Oktober 2015, 15:45:48
Das Reading eines Dummys soll nur dann aktualisiert werden, wenn es zu einer Regular Expression passt. Dazu habe ich folgenden Dummy eingerichtet:


Internals:
   NAME       ZiSued_TempList
   NR         70
   STATE      on
   TYPE       dummy
   CHANGETIME:
   Helper:
     Dblog:
       List:
         Mydblog:
           TIME       1446301933.81402
           VALUE      1
   Readings:
     2015-10-31 15:32:13   list            12:00 14.0 24:00 17.0
     2015-10-31 15:30:21   list_b          12:00 14.0 24:00 17.0
     2015-10-31 14:56:43   state           on
Attributes:
   alias      Temperatur Plan
   group      Heizung
   room       ZiSued
   userReadings list {my $r = ReadingsVal($name,"list",0);; if($r =~ /^((((1[0-9])|(2[0-3])|[0-9]):[0-6]0) (([1-2][0-9]\.(0|5))|30\.0|[5-9]\.(0|5)) )+(24:00 (([1-2][0-9]\.(0|5))|30\.0|[5-9]\.(0|5)))$/) {fhem("setreading $name list_b $r");; $r;;} else {ReadingsVal($name,"list_b",0);;} }


Die regexp des userReadings funktioniert, sobald ich aber mit dem fhem() Befehl das Backup-Reading list_b setzen will, stürzt fhem ab. Woran liegt das? Gibt es eine einfachere Möglichkeit Readings nur dann anzunehmen wenn sie auf ein regexp matchen?

Grüße
hhsch
Titel: Antw:Reading nur mit bestimmter Syntax annehmen
Beitrag von: hhsch am 01 November 2015, 12:34:26
Habe die Lösung gefunden. Der setreading Befehl führt wohl zu einer unendlichen Rekursion bis der RAM volläuft.

attr userReadings list:list {my $r = ReadingsVal($name,"list",0);; if($r =~ /^((((1[0-9])|(2[0-3])|[0-9]):[0-6]0) (([1-2][0-9]\.(0|5))|30\.0|[5-9]\.(0|5)) )+(24:00 (([1-2][0-9]\.(0|5))|30\.0|[5-9]\.(0|5)))$/) {$r;;} else {ReadingsVal($name,"list_b",0);;}},list_b:list {my $r = ReadingsVal($name,"list",0);; if($r =~ /^((((1[0-9])|(2[0-3])|[0-9]):[0-6]0) (([1-2][0-9]\.(0|5))|30\.0|[5-9]\.(0|5)) )+(24:00 (([1-2][0-9]\.(0|5))|30\.0|[5-9]\.(0|5)))$/) {$r;;}}


Grüße
hhsch