FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 05 Dezember 2016, 19:57:17

Titel: vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: justme1968 am 05 Dezember 2016, 19:57:17
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>
Titel: Antw:vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: rudolfkoenig am 05 Dezember 2016, 21:47:05
Im Prinzip finde ich es gut, ich haette nur gerne einen anderen Trenner, da ; per Escape geschuetzt werden muss.
Was haeltst du vom Punkt (.) ?
Titel: Antw:vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: justme1968 am 05 Dezember 2016, 22:07:03
wie wäre @ ?
Titel: Antw:vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: rudolfkoenig am 05 Dezember 2016, 22:54:43
Habs mit @ eingecheckt.
Kannst du bitte meine (etwas kuerzere) Implementierung pruefen?
Titel: Antw:vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: justme1968 am 05 Dezember 2016, 23:14:34
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.

Titel: Antw:vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: rudolfkoenig am 05 Dezember 2016, 23:37:21
Den ersten Einwand sehe ich nicht, den zweiten verstehe ich.
Titel: Antw:vorschlag: erweiterung von disabledForIntervals/IsDisabled um wochentage
Beitrag von: Dr. Boris Neubert am 06 Dezember 2016, 19:10:48
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