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.
define n2 notify piri:on { if($hour > 18 || $hour < 5) {
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 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;