diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html index 6fc122093..3b6fe10af 100644 --- a/fhem/docs/commandref_frame.html +++ b/fhem/docs/commandref_frame.html @@ -1818,8 +1818,10 @@ The following local attributes are used by a wider range of devices: fhem "set light on" } }
define roll_en *07:45:00 { fhem "trigger SwitchAllRoll on" if(!$we) }
define roll_en *08:30:00 { fhem "trigger SwitchAllRoll on" if($we) }
- + $we is equivalent to calling IsWe(), which optionally takes the arguments + "today", "yesterday" and "tomorrow". Note: for everything else "today" is + assumed without an error message.

  • diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html index 9a1d70136..313dc65b9 100644 --- a/fhem/docs/commandref_frame_DE.html +++ b/fhem/docs/commandref_frame_DE.html @@ -1950,19 +1950,20 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: aktuellen Datum in YYYY-MM-DD Format.
    - Die Variabe $we hat den Wert 1 wenn der abgefragte Tag auf ein Wochenende - fällt (Z.B. $wday == 0 [Sonntag] oder $wday == 6 [Samstag]), und 0 - für die anderen Wochentage. Wenn man das global holiday2we Attribut setzt, dann ist $we ebenfalls 1 - bei Urlaubstagen.
    - + Die Variabe $we hat den Wert 1 wenn der abgefragte Tag auf ein + Wochenende fällt (Z.B. $wday == 0 [Sonntag] oder + $wday == 6 [Samstag]), und 0 für die anderen Wochentage. + Wenn man das global holiday2we Attribut setzt, + dann ist $we ebenfalls 1 bei Urlaubstagen.
    + $we wird mit IsWe() gesetzt, diese Funktion nimmt optional die Argumente + "today", "yesterday" und "tomorrow". Achtung: alles andere wird als "today" + interpretiert, ohne eine Fehlermeldung zu generieren.
  • diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 41f15a4a1..ceb5393fc 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -81,6 +81,7 @@ sub IsDisabled($); sub IsDummy($); sub IsIgnored($); sub IsIoDummy($); +sub IsWe(;$$); sub LoadModule($;$); sub Log($$); sub Log3($$$); @@ -1105,17 +1106,10 @@ AnalyzePerlCommand($$;$) } my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday()); - my $hms = sprintf("%02d:%02d:%02d", $hour, $min, $sec); - my $we = (($wday==0 || $wday==6) ? 1 : 0); - if(!$we) { - foreach my $h2we (split(",", AttrVal("global", "holiday2we", ""))) { - my ($a, $b) = ReplaceEventMap($h2we, [$h2we, Value($h2we)], 0); - $we = 1 if($b && $b ne "none"); - } - } - $month++; - $year+=1900; + $month++; $year+=1900; my $today = sprintf('%04d-%02d-%02d', $year,$month,$mday); + my $hms = sprintf("%02d:%02d:%02d", $hour, $min, $sec); + my $we = IsWe(undef, $wday); if($evalSpecials) { $cmd = join("", map { my $n = substr($_,1); # ignore the % @@ -5898,4 +5892,24 @@ sub genUUID() $fuuidHash{$uuid} = 1; return $uuid; } + +sub +IsWe(;$$) +{ + my ($when, $wday) = @_; + $wday = (localtime(gettimeofday()))[6] if(!defined($wday)); + $when = "state" if(!$when || $when !~ m/^(yesterday|tomorrow)$/); + + my $we = ($when eq "yesterday" ? ($wday==0 || $wday==1) : + ($when eq "state" ? ($wday==6 || $wday==0) : + ($wday==5 || $wday==6))); # tomorrow + if(!$we) { + foreach my $h2we (split(",", AttrVal("global", "holiday2we", ""))) { + my $b = ReadingsVal($h2we, $when, 0); + $we = 1 if($b && $b ne "none"); + } + } + return $we ? 1 : 0; +} + 1;