diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index 0fb46b5de..05f8a4a6b 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -1549,7 +1549,7 @@ sub setValue_collect readingsSingleUpdate ($hash, "error", "${$collect}{output}, ".$@,1); } } - + return if (!defined $r); my ($seconds, $microseconds) = gettimeofday(); @@ -1828,6 +1828,8 @@ sub setValue_bar readingsSingleUpdate ($hash, "error", "${$bar}{output}, ".$@,1); } } + return if (!defined $r); + my ($seconds, $microseconds) = gettimeofday(); $r = ($r =~ /(-?\d+(\.\d+)?)/ ? $1 : "N/A"); @@ -2518,11 +2520,14 @@ ParseCommandsDoIf($$$) sub DOIF_weekdays($$) { my ($hash,$weekdays)=@_; - my @days=split(',',AttrVal($hash->{NAME},"weekdays","So|Su,Mo,Di|Tu,Mi|We,Do|Th,Fr,Sa,WE,AT|WD,MWE|TWE")); + my @days=split(',',AttrVal($hash->{NAME},"weekdays","So|Su,Mo,Di|Tu,Mi|We,Do|Th,Fr,Sa,WE,AT|WD,MWE|TWE,MAT|TWD")); + for (my $i=@days-1;$i>=0;$i--) { - $weekdays =~ s/$days[$i]/$i/; + my $wd = $i==10 ? "X" : $i; + $weekdays =~ s/$days[$i]/$wd/; } + return($weekdays); } @@ -2652,7 +2657,7 @@ sub DOIF_time { } } if ($ret == 1) { - return 1 if ($days eq "" or $days =~ /$wday/ or ($days =~ /7/ and $we) or ($days =~ /8/ and !$we) or ($days =~ /9/ and $twe)); + return 1 if ($days eq "" or $days =~ /$wday/ or ($days =~ /7/ and $we) or ($days =~ /8/ and !$we) or ($days =~ /9/ and $twe) or ($days =~ /X/ and !$twe)); } return 0; } @@ -2673,7 +2678,7 @@ sub DOIF_time_once { my $we=DOIF_we($wday); my $twe=DOIF_tomorrow_we($wday); if ($flag) { - return 1 if ($days eq "" or $days =~ /$wday/ or ($days =~ /7/ and $we) or ($days =~ /8/ and !$we) or ($days =~ /9/ and $twe)); + return 1 if ($days eq "" or $days =~ /$wday/ or ($days =~ /7/ and $we) or ($days =~ /8/ and !$we) or ($days =~ /9/ and $twe) or ($days =~ /X/ and !$twe)); } return 0; } @@ -4523,12 +4528,6 @@ package DOIF; #use Date::Parse qw(str2time); use Time::HiRes qw(gettimeofday); -sub set_bar -{ - my ($bar,$timeOffset,$valueData)=@_; - ::DOIF_set_bar_values($hs,$bar,$timeOffset,$valueData); -} - sub DOIF_ExecTimer { my ($timer)=@_; @@ -5002,7 +5001,7 @@ sub format_value { my ($val,$min,$dec)=@_; my $format; my $value=$val; - if ($val eq "") { + if (!defined $val or $val eq "") { $val="N/A"; $format='%s'; $value=$min; @@ -7853,24 +7852,24 @@ attr di_gong do always

Hinter der Zeitangabe kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

-[<time>|0123456789] 0-9 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we), 8 für Arbeitstage (entspricht !$we) und 9 für Wochenende oder Feiertag morgen (entspricht intern $twe)
+[<time>|0123456789X] mit 0 Sonntag, 1 Montag, ... bis 6 Samstag, 7 Wochenende und Feiertage (entspricht $we), 8 Arbeitstag (entspricht !$we),9 Wochenende oder Feiertag morgen (entspricht intern $twe), X Arbeitstag morgen (entspricht intern !$twe)

alternativ mit Buchstaben-Kürzeln:

-[<time>|So Mo Di Mi Do Fr Sa WE AT MWE] WE entspricht der Ziffer 7, AT der Ziffer 8 und MWE der Ziffer 9
+[<time>|So Mo Di Mi Do Fr Sa WE AT MWE MAT] WE entspricht der Ziffer 7, AT der Ziffer 8, MWE der Ziffer 9, MAT dem Buchstaben X

oder entsprechend mit englischen Bezeichnern:

-[<time>|Su Mo Tu We Th Fr Sa WE WD TWE]
+[<time>|Su Mo Tu We Th Fr Sa WE WD TWE TWD]

  • Mit Hilfe des Attributes weekdays können beliebige Wochentagbezeichnungen definiert werden.

    Die Syntax lautet:

    -weekdays <Bezeichnung für Sonntag>,<Bezeichnung für Montag>,...,<Bezeichnung für Wochenende oder Feiertag>,<Bezeichnung für Arbeitstage>,<Bezeichnung für Wochenende oder Feiertag morgen>
    +weekdays <Bezeichnung für Sonntag>,<Bezeichnung für Montag>,...,<Bezeichnung für Wochenende oder Feiertag>,<Bezeichnung für Arbeitstag>,<Bezeichnung für Wochenende oder Feiertag morgen>,<Bezeichnung für Arbeitstag morgen>

    -Beispiel: di_mydoif attr weekdays Son,Mon,Die,Mit,Don,Fre,Sam,Wochenende,Arbeitstag,WochenendeMorgen
    +Beispiel: di_mydoif attr weekdays Son,Mon,Die,Mit,Don,Fre,Sam,Wochenende,Arbeitstag,WochenendeMorgen,ArbeitstagMorgen

    Anwendungsbeispiel: Radio soll am Wochenende und an Feiertagen um 08:30 Uhr eingeschaltet und um 09:30 Uhr ausgeschaltet werden. Am Montag und Mittwoch soll das Radio um 06:30 Uhr eingeschaltet und um 07:30 Uhr ausgeschaltet werden. Hier mit englischen Bezeichnern: