From d21a5f9e53949805088f9f327e73e4074c20eda7 Mon Sep 17 00:00:00 2001 From: damian-s <> Date: Wed, 30 Nov 2016 21:16:44 +0000 Subject: [PATCH] 98_DOIF.pm: $SELF in state and wait, own readings are not deleted, DOIF only with comment git-svn-id: https://svn.fhem.de/fhem/trunk@12691 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_DOIF.pm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) 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.