diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index 9ba5e9886..5b8ac1707 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -56,10 +56,10 @@ DOIF_delAll($) delete ($hash->{triggertime}); delete ($hash->{interval}); delete ($hash->{regexp}); - delete ($hash->{state}); + #delete ($hash->{state}); #delete ($defs{$hash->{NAME}}{READINGS}); foreach my $key (keys %{$defs{$hash->{NAME}}{READINGS}}) { - delete $defs{$hash->{NAME}}{READINGS}{$key} if ($key !~ "^[A-Z]_"); + delete $defs{$hash->{NAME}}{READINGS}{$key} if ($key =~ "^(Device|state|error|cmd|e_|timer_|wait_|matched_|last_cmd|mode)"); } } @@ -163,6 +163,7 @@ my ($hash,$attr,$value)=@_; return undef if (!defined($value)); my $err=""; my $pn=$hash->{NAME}; + $value =~ s/\$SELF/$pn/g; ($value,$err)=ReplaceAllReadingsDoIf($hash,$value,-1,1); if ($err) { my $error="$pn: error in $attr: $err"; @@ -624,6 +625,7 @@ sub ReplaceAllReadingsDoIf($$$$) if (!defined $tailBlock) { return ("",""); } + $tailBlock =~ s/\$SELF/$hash->{NAME}/g; while ($tailBlock ne "") { $trigger=1; ($beginning,$block,$err,$tailBlock)=GetBlockDoIf($tailBlock,'[\[\]]'); @@ -656,7 +658,7 @@ sub ReplaceAllReadingsDoIf($$$$) $hash->{trigger}{all} = AddItemDoIf($hash->{trigger}{all},"$device") if (!defined ($internal) and !defined($reading)); } elsif ($condition == -2) { - $hash->{state}{device} = AddItemDoIf($hash->{state}{device},$device) if ($device ne $hash->{NAME}); + $hash->{state}{device} = AddItemDoIf($hash->{state}{device},$device); #if ($device ne $hash->{NAME}); } elsif ($condition == -3) { $hash->{itimer}{all} = AddItemDoIf($hash->{itimer}{all},$device); } @@ -923,6 +925,7 @@ DOIF_SetState($$$$$) my $err=""; my $attr=AttrVal($hash->{NAME},"cmdState",""); my $state=AttrVal($hash->{NAME},"state",""); + $state =~ s/\$SELF/$pn/g; my @cmdState=SplitDoIf('|',$attr); return undef if (AttrVal($hash->{NAME},"disable","")); $nr=ReadingsVal($pn,"cmd_nr",0)-1 if (!$event); @@ -1817,6 +1820,7 @@ CmdDoIf($$) $hash->{helper}{last_timer}=0; $hash->{helper}{sleeptimer}=-1; + return("","") if ($tail =~ /^ *$/); while ($tail ne "") { return($tail, "no left bracket of condition") if ($tail !~ /^ *\(/); @@ -1916,6 +1920,8 @@ DOIF_Attr(@) delete ($hash->{state}{device}); my ($block,$err)=ReplaceAllReadingsDoIf($hash,$a[3],-2,0); return $err if ($err); + } elsif($a[0] eq "del" && $a[2] eq "state") { + delete ($hash->{state}{device}); } elsif($a[0] eq "set" && $a[2] eq "wait") { RemoveInternalTimer($hash); #delete ($defs{$hash->{NAME}}{READINGS}{wait_timer}); @@ -2997,7 +3003,7 @@ Zu beachten ist, dass bei einer wahren Bedingung die dazugehörigen Befehle ausg Darstellungselement mit Eingabemöglichkeit im Frontend und Schaltfunktion   back

-Die unter Dummy beschriebenen Attribute readingList und setList stehen auch im DOIF zur Verfügung. Damit wird erreicht, dass DOIF im WEB-Frontend als Eingabeelement mit Schaltfunktion dienen kann. Zusätzliche Dummys sind nicht mehr erforderlich. Es können im Attribut setList, die in FHEMWEB angegebenen Modifier des Attributs widgetOverride verwendet werden. Siehe auch das weiterführende Beispiel für Tablet-UI.
+Die unter Dummy beschriebenen Attribute readingList und setList stehen auch im DOIF zur Verfügung. Damit wird erreicht, dass DOIF im WEB-Frontend als Eingabeelement mit Schaltfunktion dienen kann. Zusätzliche Dummys sind nicht mehr erforderlich. Es können im Attribut setList, die in FHEMWEB angegebenen Modifier des Attributs widgetOverride verwendet werden. Siehe auch das weiterführende Beispiel für Tablet-UI. Für die Verwendung moduleigener Readings ist die Funktionalität nicht gewährleistet.

Anwendungsbeispiel: Eine Schaltuhr mit time-Widget für die Ein- u. Ausschaltzeiten und der Möglichkeit über eine Auswahlliste manuell ein und aus zu schalten.

@@ -3220,8 +3226,8 @@ Hier passiert das nicht mehr, da die ursprünglichen Zustände cmd_1 und cmd_2 j
wait_timer
Angabe des aktuellen Wait-Timers

-
A-Z_<persistent user defined readingname>
-
benutzerdefinierte Readings beginnend mit einem Großbuchstaben mit Unterstrich als Präfix überdauern ein Modify
+
[A-Z]_<readingname>
+
Readings, die mit einem Großbuchstaben und nachfolgendem Unterstrich beginnen, sind für User reserviert und werden auch zukünftig nicht vom Modul selbst benutzt.