From 32f069cbfed1d0f0115b1e9081306aeb063b9ecb Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 1 Jul 2019 07:29:27 +0000 Subject: [PATCH] fhem.pl: add IsWe arguments YYYY-MM-DD and MM-DD (Forum #98583) git-svn-id: https://svn.fhem.de/fhem/trunk@19755 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/docs/commandref_frame.html | 4 ++-- fhem/docs/commandref_frame_DE.html | 5 +++-- fhem/fhem.pl | 21 +++++++++++++++------ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html index 1e0300813..17d4abc38 100644 --- a/fhem/docs/commandref_frame.html +++ b/fhem/docs/commandref_frame.html @@ -1838,8 +1838,8 @@ The following local attributes are used by a wider range of devices: 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.
+ "today", "yesterday", "tomorrow", MM-DD or YYYY-MM-DD. 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 90c7c721f..2ddd25319 100644 --- a/fhem/docs/commandref_frame_DE.html +++ b/fhem/docs/commandref_frame_DE.html @@ -1982,8 +1982,9 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: 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.
    + "today", "yesterday", "tomorrow", MM-DD oder YYYY-MM-DD. Achtung: alles + andere wird als "today" interpretiert, ohne eine Fehlermeldung zu + generieren.

  • diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 88f514ec5..9455733be 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -5959,12 +5959,21 @@ sub IsWe(;$$) { my ($when, $wday) = @_; - $wday = (localtime(gettimeofday()))[6] if(!defined($wday)); - $when = "state" if(!$when); - + + my $dt = ($when && $when =~ m/^((\d{4})-)?([01]\d)-([0-3]\d)$/); + $when = "state" if(!$when || ($when !~ m/^(yesterday|tomorrow)$/ && !$dt)); + if(!defined($wday)) { + if($dt) { + my ($y,$m,$d) = ($2 ? $2-1900 : (localtime())[5], $3-1, $4); + $wday = (localtime(mktime(1,1,1,$d,$m,$y,0,0,-1)))[6]; + } else { + $wday = (localtime(gettimeofday()))[6]; + } + } + my ($we, $wf); foreach my $h2we (split(",", AttrVal("global", "holiday2we", ""))) { - my $b = ReadingsVal($h2we, $when, 0); + my $b = $dt ? CommandGet(undef,"$h2we $when") : ReadingsVal($h2we,$when,0); if($b && $b ne "none") { return 0 if($h2we eq "noWeekEnd"); $we = 1 if($b && $b ne "none"); @@ -5974,8 +5983,8 @@ IsWe(;$$) if(!$wf && !$we) { $we = ($when eq "yesterday" ? ($wday==0 || $wday==1) : - ($when eq "state" ? ($wday==6 || $wday==0) : - ($wday==5 || $wday==6))); # tomorrow + ($when ne "tomorrow" ? ($wday==6 || $wday==0) : + ($wday==5 || $wday==6))); # tomorrow } return $we ? 1 : 0; }