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