vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage

Begonnen von justme1968, 05 Dezember 2016, 19:57:17

Vorheriges Thema - Nächstes Thema

justme1968

mit dem folgenden kleinen patch kann man in disabledForIntervals auch wochentage beim start und ende eines intervalls angeben.

z.b.:
- montag bis freitag: 1;00:00-5;23:59
- das ganze wochende: 6;00:00-23:59 0;00:00-23:59

Index: fhem.pl
===================================================================
--- fhem.pl (revision 12716)
+++ fhem.pl (working copy)
@@ -780,7 +780,23 @@
     my $hms = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
     foreach my $ft (split(" ", $dfi)) {
       my ($from, $to) = split("-", $ft);
-      return 2 if($from && $to && $from le $hms && $hms le $to);
+      next if( !$from );
+      next if( !$to );
+      if( $from =~ m/^(\d);(.*)/ ) {
+        my $from_day, $to_day;
+        $from_day = $1;
+        $from = $2;
+        if( $to =~ m/^(\d);(.*)/ ) {
+          $to_day = $1;
+          $to = $2;
+        }
+        $to_day = $from_day if( !defined($to_day) );
+        return 2 if( ($from_day < $wday || ($from_day == $wday && $from le $hms) )
+                     && ($to_day >$wday || ($to_day == $wday && $hms le $to) ) );
+      } else {
+        return 2 if($from le $hms && $hms le $to);
+      }
+
     }
   }


Index: 90_at.pm
===================================================================
--- 90_at.pm (revision 12716)
+++ 90_at.pm (working copy)
@@ -550,9 +550,10 @@

     <a name="disabledForIntervals"></a>
     <li>disabledForIntervals HH:MM-HH:MM HH:MM-HH-MM...<br>
-        Space separated list of HH:MM tupels. If the current time is between
+        Space separated list of HH:MM or D;HH:MM tupels. If the current time is between
         the two time specifications, the current device is disabled. Instead of
-        HH:MM you can also specify HH or HH:MM:SS. To specify an interval
+        HH:MM you can also specify HH or HH:MM:SS. D is the day of the week, with 0
+        indicating Sunday and 3 indicating Wednesday. To specify an interval
         spawning midnight, you have to specify two intervals, e.g.:
         <ul>
           23:00-24:00 00:00-01:00
@@ -735,9 +736,10 @@
     <a name="disabledForIntervals"></a>
     <li>disabledForIntervals HH:MM-HH:MM HH:MM-HH-MM...<br>
         Das Argument ist eine Leerzeichengetrennte Liste von Minuszeichen-
-        getrennten HH:MM Paaren. Falls die aktuelle Uhrzeit zwischen diesen
+        getrennten HH:MM oder D;HH:MM Paaren. Falls die aktuelle Uhrzeit zwischen diesen
         Werten f&auml;llt, dann wird die Ausf&uuml;hrung, wie beim disable,
-        ausgesetzt.  Statt HH:MM kann man auch HH oder HH:MM:SS angeben.
+        ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben.
+        D ist der Tag der Woche, mit 0 als Sonntag and 3 als Mittwoch.
         Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei
         einzelne angeben, z.Bsp.:
         <ul>
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Im Prinzip finde ich es gut, ich haette nur gerne einen anderen Trenner, da ; per Escape geschuetzt werden muss.
Was haeltst du vom Punkt (.) ?

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Habs mit @ eingecheckt.
Kannst du bitte meine (etwas kuerzere) Implementierung pruefen?

justme1968

ja. so funktioniert das auch. der einzige unterschied ist das man mehr 1@10:00-12:00 schreiben (d.h. den tag bei to weg lassen) kann sondern bei from und to den tag hin schreiben muss.

und es lässt sich nicht so einfach auf 1-5 oder 1,3,5 für die tagesangabe erweitern. aber da man die ja auch einzeln hin schreiben kann macht das nichts.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig


Dr. Boris Neubert

Hallo,

können wir das bitte wiederverwendbar machen? Eine Funktion, die allgemein prüft, ob ein Zeitpunkt in einer Menge von Intervallen liegt?

Kann der Wochentag bitte modulo 7 genommen werden? Dann kann ich 7 schreiben und bekomme Sonntag, so wie ich das erwarte.

Zur Sicherheit: wird 6@00:00-24:00 als Samstag interpretiert?

Gut fände ich, wenn man 1,3-5@12-14:30 schreiben könnte, wobei eine Wochentagsliste nur erlaubt ist, wenn bei der Endezeit kein Wochentag angegeben ist. Also

1,3-5,7@12-14:30 ok (Montag, Mittwoch bis Freitag, Sonntag, jeweils von Mittag bis 14:30)
2@10:15-3@11:15 ok (von Dienstag 10:15 bis Mittwoch 11:15)
2,3@10:15-4@11:15 fehlerhaft

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!