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;
}