Originally posted by: <email address deleted>
Hallo.
Wäre es möglich, in FHEM eine Funktion mit einzubauen, die prüft, ob
aktuell ein Feiertag vorliegt?
Für statische Feiertage (Weihnachten, 1. Mai etc.) ist das recht
trivial, denke ich, für bewegliche Feiertage (Ostern, Pfingsten etc.)
ist es etwas komplizierter, aber mit DateTime::Event::Easter (siehe
CPAN) sollte es recht einfach sein, zumindest für die Oster-bezogenen
Feiertage (von Aschermittwoch bis Pfingsten). Die restlichen paar
beweglichen Feiertage, von denen ich mal gehört habe, sollten auch
relativ einfach machbar sein, das sie immer einer zu "erster Sonntag im
März" ähnlichen Regel folgen.
Idealerweise könnte der Benutzer für bestimmte Feiertage angeben, ob sie
relevant sind oder nicht.
Anwendung: Weckfunktion, die nur an Arbeitstagen aktiv werden soll (also
nicht Wochenende und nicht gesetzlicher Feiertag).
Leider fehlt es mir momentan an drei Dingen, um es selbst zu
implementieren: Zeit, Zeit und Zeit ;-)
Im Ernst: Zeit, Kenntnisse der fhem-Interna, (aktive) Perl-Fähigkeiten.
Vorschlag, wie der Benutzer es konfigurieren könnte:
- Ein entsprechendes Modul muss aktiviert werden
- Das Modul liest eine Konfigurationsdatei
Für die Konfigurationsdatei stelle ich mir folgendes Format vor:
- Kommentarzeilen beginnen mit ^\s*# (also beliebiger
Whitespace vor einem #)
- Jede andere Zeile definiert einen Feiertag, es gibt drei Typen:
1) exaktes Datum: ^1\s+MM-DD\s+Name
Beispiel: 1 12-24 Heiligabend
2) relativ zu Ostersonntag: ^2\s+[-+]?[0-9]+\s+Name
Beispiel: 2 +1 Ostermontag
Beispiel: 2 49 Pfingstsonntag
Beispiel: 2 -46 Aschermittwoch
3) relativ im Monat: ^3\s+[+-]?[0-9]+\s+WWW\s+MM\s+Name
Beispiel: 3 -1 Mon 03 Keine Ahnung
(letzter Montag im März)
Beispiel: 3 2 Tue 05 zweiter Dienstag im Mai
Der Name ist nur zur Orientierung des Benutzers gedacht und könnte
daher optional sein. Die 1,2 oder 3 am Anfang ist theoretisch nicht
nötig, da die Unterscheidung auch per RegExp erfolgen könnte.
Ist nur Pseudo-RegExp-Notation und \s sollte equivalent sein zu
[[:space:]], also beliebigen Whitespace matchen (ein Space oder ein
Tab).
Klingt das für Euch vernünftig?
Ciao,
Sven
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Hallo,
Sven Mueller wrote:
> Wäre es möglich, in FHEM eine Funktion mit einzubauen, die prüft, ob
> aktuell ein Feiertag vorliegt?
manchmal bin ich fuer pragmatische Loesungen. Die saehe hier fuer diese
Anforderung dann ganz platt so aus, die Liste der (fuer Deinen Standort
relevanten) Feiertage bis 2012 statisch in einer Datei oder im
Programmcode zu hinterlegen. Das leistet das Gewuenschte, ist vermutlich
10x so schnell im produktiven Einsatz, und ueberaus wartungsfreundlich.
Das mildert die durch fehlende Zeit und Perl-Kenntnisse entstehenden
Umsetzungshuerden ;-)
Gruesse,
Boris
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Dr. Boris Neubert schrieb:
> Sven Mueller wrote:
>> Wäre es möglich, in FHEM eine Funktion mit einzubauen, die prüft, ob
>> aktuell ein Feiertag vorliegt?
>
> manchmal bin ich fuer pragmatische Loesungen. Die saehe hier fuer diese
> Anforderung dann ganz platt so aus, die Liste der (fuer Deinen Standort
> relevanten) Feiertage bis 2012 statisch in einer Datei oder im
> Programmcode zu hinterlegen. Das leistet das Gewuenschte, ist vermutlich
> 10x so schnell im produktiven Einsatz, und ueberaus wartungsfreundlich.
> Das mildert die durch fehlende Zeit und Perl-Kenntnisse entstehenden
> Umsetzungshuerden ;-)
DAS halte ich für eine ganz schlechte Idee. Klar, es würde (evtl.) für
meine Zwecke reichen, aber nur bis ich vergesse, die Liste zu
aktualisieren, wenn sie sozusagen leer läuft.
10x so schnell ist auch nicht sonderlich wahrscheinlich.
Und wartungsfreundlich ist so eine Liste auch nicht gerade, denn alles,
was eine regelmäßige Wartung erfordert (obwohl es vermeidbar wäre), ist
nicht sinnvoll in der Automation.
Davon ab: Woher bekomme ich die Liste der Feiertage bis 2012?
Ciao,
Sven
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
> Wäre es möglich, in FHEM eine Funktion mit einzubauen, die prüft, ob
> aktuell ein Feiertag vorliegt?
Da mich das Problem auch schon laenger wurmt, und mir gerade danach
war, habe ich Svens Vorschlag implementiert und ins CVS eingecheckt
(95_holiday.pm). Kurze Anleitung:
Datei xxx.holiday nach dem oben beschriebenen Syntax in FHEM
Verzeichnis anlegen.
"Instanz" Definieren:
define xxx holiday
Abfrage des heutigen Wertes:
{ Log 1, "Heute ist " . $value{xxx} eq "none" ? "kein Urlaubstag" :
$value{xxx} }
Abfrage / Pruefen anderer Werte
get xxx 12-24
Ostern-abhaengige Werte (Typ 2) gibt es nur dann, wenn man
"DateTime::Event::Easter" installiert hat, die anderen gibt es auch
ohne diesen schrecklichen Modul. Und es gibt noch ein Typ "4" mit
Intervall, Beispiel "4 12-01 12-21 Winterurlaub".
Die Werte werden bei jede Abfrage neu berechnet (die Datei wird
jeweils eingelesen), das aktuelle Wert ($value{xxx}) einmal taeglich,
das habe ich aber noch nicht getestet.
Kommentare? Doku?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Sven Mueller wrote:
> Dr. Boris Neubert schrieb:
>> Sven Mueller wrote:
>>> Wäre es möglich, in FHEM eine Funktion mit einzubauen, die prüft, ob
>>> aktuell ein Feiertag vorliegt?
> Davon ab: Woher bekomme ich die Liste der Feiertage bis 2012?
Bis 2018...
http://www.feiertage.net/
http://de.wikipedia.org/wiki/Feiertage_in_Deutschland
Gruesse,
Boris
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Rudolf Koenig wrote:
>> Wäre es möglich, in FHEM eine Funktion mit einzubauen, die prüft, ob
>> aktuell ein Feiertag vorliegt?
> Kommentare? Doku?
Es gibt in Deutschland drei Klassen von Feiertagen:
1. kalenderfixe Termine (Tag der deutschen Einheit= 03.10.)
2. osterbezogene Termine (Christi Himmelfahrt= Ostersonntag + 39 Tage)
3. Buß- und Bettag = Mittwoch vor dem 23. November
Habe mir jetzt mal nur den Code angesehen. Wie wird die
Berechnungsvorschrift fuer Buß- und Bettag abgebildet?
Gruesse,
Boris
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
> Habe mir jetzt mal nur den Code angesehen. Wie wird die
> Berechnungsvorschrift fuer Buß- und Bettag abgebildet?
Gar nicht. Da fehlt wohl der Typ 5. Kommst Du aus Sachsen? :-)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Rudolf Koenig wrote:
>> Habe mir jetzt mal nur den Code angesehen. Wie wird die
>> Berechnungsvorschrift fuer Buß- und Bettag abgebildet?
>
> Gar nicht. Da fehlt wohl der Typ 5. Kommst Du aus Sachsen? :-)
Noe, Hessen. Aber nach Murphys Gesetz wird es am naechsten Buss- und
Bettag eine Fehlermeldung aus Sachsen geben ;-)
Gruesse,
Boris
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Rudolf Koenig schrieb:
>> Habe mir jetzt mal nur den Code angesehen. Wie wird die
>> Berechnungsvorschrift fuer Buß- und Bettag abgebildet?
>
> Gar nicht. Da fehlt wohl der Typ 5. Kommst Du aus Sachsen? :-)
Hmm, den Typ 3 umarbeiten?
3 [+-]N WeekDay Month Day
Nth $WeekDay before (-) or after (+) date (month,day)?
Das kann immernoch benutzt werden, um den n-ten Montag eines Monats oder
den vorletzten Dienstag eines Monats abzubilden:
3 1 Mon 01 31
(erster Montag nach dem 31.1.)
3 -1 Tue 03 01
(letzter Dienstag im Februar)
Wenn wir definieren, dass ein genauer Hit (1.3. ist ein Dienstag) nicht
als letzter Dienstag vor einem Termin (bzw. erster Montag nach einem
Termin) gezählt wird. (Wird genauer Hit erlaubt, müsste als Datum
jeweils der 01.02. bzw. 29.02. angegeben werden)
Soweit ich mich erinnere, liegt Buß- und Bettag nie auf dem 23.11.
Nunja, davon ab ist mir ein klitzkleines Problemchen aufgefallen in
Deinem Code:
Der Februar kann auch 29 Tage haben ;-)
Fix:
my $dt=DateTime->new(year=>(1900+$lt[5]));
$md[1]=29 if $dt->is_leap_year();
Eingefügt in Zeile 96, direkt unterhalb von:
my @md = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
Ansonsten versuche ich gerade den restlichen Code zu verstehen, um obige
Änderung einpflegen zu können (dann käme auch ein richtiger Patch).
Werde aber frühestens morgen wieder dazu kommen ein wenig reinzuschauen.
Ciao,
Sven
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
> Hmm, den Typ 3 umarbeiten?
Bitte nicht, sonst ist Typ 3 zu kompliziert. Lieber Typ 5 verwenden
> Der Februar kann auch 29 Tage haben ;-)
Das ist mir auch bekannt :-), und ich wollte das ich mit
$md++ if($fd[5]%4 == 0);
loesen, was natuerlich eher
$md++ if($fd[5]%4 == 0 && $fd[4] == 1);
sein soll. Und ich ziehe diese Loesung dem DateTime Krempel vor, auch
wenn es nicht perfekt ist (2100 wird falsch berechnet). Ich mag
DateTime naemlich weiterhin nicht :-/
> dann käme auch ein richtiger Patch
Bitte auch die Doku patchen :-)
Gruss,
Rudi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Hi,
Rudolf Koenig:
> $md++ if($fd[5]%4 == 0 && $fd[4] == 1);
> sein soll. Und ich ziehe diese Loesung dem DateTime Krempel vor, auch
> wenn es nicht perfekt ist (2100 wird falsch berechnet). Ich mag
> DateTime naemlich weiterhin nicht :-/
>
Die Leute, die in den 70ern ihren COBOL-Kram programmiert haben, haben
auch nicht gedacht, dass der bis zur Jahrtausendwende überleben wird.
:-P
Aber eine Schaltjahr-Funktion ist wirklich nicht schwer, und außerdem
dokumentiert der Aufruf einer solchen viel besser als ein kryptisches
"$fd[5]%4 == 0", was da eigentlich vor sich geht.
sub schaltjahr($) {
my($jahr) = @_;
return 0 if $jahr % 4; # 2009
return 1 unless $jahr % 400; # 2000
return 0 unless $jahr % 100; # 2100
return 1; # 2012
}
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: Das Zitat wurde zufällig ausgewählt. | http://smurf.noris.de
- -
Wer die Geometrie begreift, vermag in dieser Welt alles zu verstehen.
-- Galileo Galilei
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
> Die Leute, die in den 70ern ihren COBOL-Kram programmiert haben, haben
> auch nicht gedacht, dass der bis zur Jahrtausendwende überleben wird.
Danke für die Ehre, aber 2100 werde ich (wahrscheinlich) nicht mehr
erleben :-)
> Aber eine Schaltjahr-Funktion ist wirklich nicht schwer, und außerdem
> dokumentiert der Aufruf einer solchen viel besser als ein kryptisches
> "$fd[5]%4 == 0", was da eigentlich vor sich geht.
Damit bin ich aber vollkommen einverstanden, und deswegen habe ich das
auch genauso uebernommen.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Ich habe momentan keinen Zugang zu meinem normalen FHEM Zeug, aber anbei
ein - nur auf Syntax-Fehler geprüfter - Patch, der trotz Deiner
Abneigung gegen DateTime relativ viel DateTime benutzt (ist ohnehin
schon ein Requirement für das Modul, soweit ich gesehen habe, und es ist
halt relativ bequem). Bei der Gelegenheit wurde auch die Berechnung der
Schaltjahre an DateTime ausgelagert.
Eine Datei in contrib für bayrische Feiertage ist auch gleich noch
dabei. (Da ist auch ein Kommentar mit drin für Buß- und Bettag).
Doku ist erweitert. (commandref.html)
Wer Fehler findet darf sie selbst fixen oder an mich melden ;-)
Überflüssige rechtliche Angaben:
Copyright/Verwertungsrechte trete ich an Dich ab, Rudolf, Lizenz für
meinen Code wie für Deinen (jeweils soweit rechtlich möglich, weitere
Verwertung durch mich bleibt vorbehalten).
Ciao,
Sven
Rudolf Koenig schrieb:
>> Hmm, den Typ 3 umarbeiten?
> Bitte nicht, sonst ist Typ 3 zu kompliziert. Lieber Typ 5 verwenden
>
>> Der Februar kann auch 29 Tage haben ;-)
> Das ist mir auch bekannt :-), und ich wollte das ich mit
> $md++ if($fd[5]%4 == 0);
> loesen, was natuerlich eher
> $md++ if($fd[5]%4 == 0 && $fd[4] == 1);
> sein soll. Und ich ziehe diese Loesung dem DateTime Krempel vor, auch
> wenn es nicht perfekt ist (2100 wird falsch berechnet). Ich mag
> DateTime naemlich weiterhin nicht :-/
>
>> dann käme auch ein richtiger Patch
> Bitte auch die Doku patchen :-)
>
> Gruss,
> Rudi
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~---
diff -u -r1.1 95_holiday.pm
--- FHEM/95_holiday.pm 8 May 2009 16:14:03 -0000 1.1
+++ FHEM/95_holiday.pm 19 May 2009 08:51:02 -0000
@@ -93,6 +93,8 @@
my %wd = ("Sun"=>0, "Mon"=>1, "Tue"=>2, "Wed"=>3,
"Thu"=>4, "Fri"=>5, "Sat"=>6);
my @md = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+ my $dt=DateTime->new(year=>(1900+$lt[5]));
+ $md[1]=29 if $dt->is_leap_year();
my $wd = $wd{$a[2]};
if(!defined($wd)) {
Log 1, "Wrong timespec: $l";
@@ -106,7 +108,6 @@
} elsif($a[1] < 0) { # N'th day from the end
my $d = $fd[3] - ($a[1]+1)*7;
my $md = $md[$fd[4]];
- $md++ if($fd[5]%4 == 0);
next if($d > $md || $d < $md-6);
}
@@ -118,6 +119,43 @@
if($args[1] le $fordate && $args[2] ge $fordate) {
$found = $args[3];
last;
+ }
+ } elsif($l =~ m/^5/) { # nth weekday since MM-DD / before MM-DD
+ my @a = split(" +", $l, 6);
+ # arguments: 5
+ my %wd = ("Sun"=>0, "Mon"=>1, "Tue"=>2, "Wed"=>3,
+ "Thu"=>4, "Fri"=>5, "Sat"=>6);
+ my $wd = $wd{$a[2]};
+ if(!defined($wd)) {
+ Log 1, "Wrong timespec: $l";
+ next;
+ }
+ next if $wd != $fd[6]; # check wether weekday matches today
+ my $yday=$fd[7];
+ # create DateTime of the target date
+ my $tgt=DateTime->new(year => 1900+$fd[5], month => $a[4], day => $a[3], hour => 1);
+ my $tgtmin=$tgt;
+ my $tgtmax=$tgt;
+ my $cd=DateTime->new(year => 1900+$fd[5], month => $fd[4], day => $fd[3], hour => 1);
+ if ( $a[1] =~ /^-([0-9])*$/ ) {
+ $tgtmin->subtract(weeks => $1);
+ $tgtmax->subtract(weeks => $1-1);
+ # needs to be lower than max and greater than or equal to min
+ if ( ($cd->epoch() ge $tgtmin->epoch()) && ( $cd->epoch() lt $tgtmax->epoch()) ) {
+ $found=$a[5];
+ last;
+ }
+ } elsif ( $a[1] =~ /^\+?([0-9])*$/ ) {
+ $tgtmin->add(weeks => $1-1);
+ $tgtmax->add(weeks => $1);
+ # needs to be lower than or equal to max and greater min
+ if ( ($cd->epoch() gt $tgtmin->epoch()) && ( $cd->epoch() le $tgtmax->epoch()) ) {
+ $found=$a[5];
+ last;
+ }
+ } else {
+ Log 1, "Wrong distance spec: $l";
+ next;
}
}
}
diff -u -r1.63 commandref.html
--- docs/commandref.html 11 May 2009 16:23:38 -0000 1.63
+++ docs/commandref.html 19 May 2009 08:51:02 -0000
@@ -2964,6 +2964,15 @@
4 01-06 31-06 Summer holiday
[/list]
+ 5
+ Date relative, weekday fixed holiday. Arguments: <nth>
+ <weekday> <day> <month> <holiday-name>
+ Examples:
+ + 5 -1 Wed 23 11 Buss und Bettag (first Wednesday before Nov, 23rd)
+ 5 1 Mon 31 01 First Monday after Jan, 31st (1st Monday in February)
+
+
[/list]
See also he.holiday in the contrib directory for official holidays in the
german country of Hessen.
diff -u contrib/by.holiday
--- contrib/by.holiday 2009-05-19 10:32:10.552085500 +0200
+++ contrib/by.holiday 2009-05-19 10:39:52.000000000 +0200
@@ -0,0 +1,18 @@
+# Siehe auch
+# http://de.wikipedia.org/wiki/Feiertage_in_Deutschland
+
+1 01-01 Neujahr
+1 01-06 Heilige Drei Koenige
+1 05-01 Tag der Arbeit
+1 08-15 Mariae Himmelfahrt (nur bei ueberwiegend katholischer Bevoelkerung)
+1 10-03 Tag der deutschen Einheit
+1 11-01 Allerheiligen
+1 12-25 1. Weihnachtstag
+1 12-26 2. Weihnachtstag
+
+2 -2 Karfreitag
+2 1 Ostermontag
+2 39 Christi Himmelfahrt
+2 50 Pfingsten
+2 60 Fronleichnam
+#5 -1 Wed 23 11 Buss- und Bettag (nur in Sachsen)
Originally posted by: <email address deleted>
Hi,
Sven Mueller:
> + 5 1 Mon 31 01 First Monday after Jan, 31st (1st Monday in February)
Äh. Wie schreibe ich dann den ersten Montag im März?
Würde da evtl. "5 0 Mon 01 03" funktionieren?
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: Das Zitat wurde zufällig ausgewählt. | http://smurf.noris.de
- -
In der Tat sind die Kosten für den Besitz von Windows NT sehr gering.
Das Problem ist nur, daß man Windows NT nicht besitzt sondern nur eine
Lizenz, es zu nutzen.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
5 -1 Mon 08 03 erster Montag im März
5 1 Mon 28 02 kann auch 29.2. liefern
Aber
3 1 Mon 03 erster Montag im März
wäre wohl einfacher.
Wie ich schonmal schrieb: Die Regeln mit Typ 3 lassen sich alle auch
(irgendwie) als Typ 5 ausdrücken, denke ich. Mit Außnahme von Rudolf's
netter "3 0 Mon 03 alle Montage im März" Variante.
Matthias Urlichs schrieb:
> Hi,
>
> Sven Mueller:
>> + 5 1 Mon 31 01 First Monday after Jan, 31st (1st Monday in February)
>
> Äh. Wie schreibe ich dann den ersten Montag im März?
>
> Würde da evtl. "5 0 Mon 01 03" funktionieren?
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Hi,
Sven Mueller:
> 3 1 Mon 03 erster Montag im März
> wäre wohl einfacher.
>
Ah. Logisch. Danke.
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: Das Zitat wurde zufällig ausgewählt. | http://smurf.noris.de
- -
Wer Gulaschsuppe nachmacht oder fälscht oder nachgemachte oder gefälschte
in Umlauf setzt und zum Verzehr bringt, wird mit Zwiebelsuppe nicht unter
zwei Portionen bestraft. Der Oberkellner.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Hallo Sven.
> relativ viel DateTime benutzt (ist ohnehin
> schon ein Requirement für das Modul, soweit ich gesehen habe,
require DateTime::Event::Easter ist nur im Abschnitt
"2" (Osterfeiertage) drin, es wird also nur dann ausgefuehrt, falls
ein Eintrag mit "2" ueberprueft wird. Aber das koennen wir fuer
Abschnitt 5 genauso machen. DateTime nervt mich, weil es 28 Module
laedt (nachgezaehlt), die auf kleinen Rechnern wie der Fritzbox schwer
zu installieren sind und uebermaessig viel Hauptspeicher benoetigen.
> Bei der Gelegenheit wurde auch die Berechnung der
> Schaltjahre an DateTime ausgelagert.
Ich preferiere die "schaltjahr" Funktion :-)
> Wer Fehler findet darf sie selbst fixen oder an mich melden ;-)
Ich melde es lieber, nach ca 10 Minuten herum-aergern mit DateTime:
"get by 11-18" meldet "none". Hinweis: tgtmin und tgtmax muessen
jeweils mit new angelegt werden, sonst verweisen sie auf dem gleichen
Objekt. Das alleine hat das Problem aber immer noch nicht geloest.
Gruss,
Rudi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-
Originally posted by: <email address deleted>
Rudolf Koenig schrieb:
> Hallo Sven.
>
>> relativ viel DateTime benutzt (ist ohnehin
>> schon ein Requirement für das Modul, soweit ich gesehen habe,
>
> require DateTime::Event::Easter ist nur im Abschnitt
> "2" (Osterfeiertage) drin, es wird also nur dann ausgefuehrt, falls
> ein Eintrag mit "2" ueberprueft wird. Aber das koennen wir fuer
> Abschnitt 5 genauso machen. DateTime nervt mich, weil es 28 Module
> laedt (nachgezaehlt), die auf kleinen Rechnern wie der Fritzbox schwer
> zu installieren sind und uebermaessig viel Hauptspeicher benoetigen.
Aha, OK, das nenne ich mal eine gute Begründung. Ich stelle die Funktion
mal um, damit sie mktime() benutzt, um die Referenzzeiten etc. zu erstellen.
>> Bei der Gelegenheit wurde auch die Berechnung der
>> Schaltjahre an DateTime ausgelagert.
>
> Ich preferiere die "schaltjahr" Funktion :-)
Habe ich gesehen.
Kannst Du mir erklären, was die Zeile
$md++ if(schaltjahr($fd[5]+1900) && $fd[4] == 1);
(zeile 111 in 95_holiday.pm) machen soll? $md für Februar wird ja schon
in Zeile 97 angepasst.
>> Wer Fehler findet darf sie selbst fixen oder an mich melden ;-)
>
> Ich melde es lieber, nach ca 10 Minuten herum-aergern mit DateTime:
> "get by 11-18" meldet "none". Hinweis: tgtmin und tgtmax muessen
> jeweils mit new angelegt werden, sonst verweisen sie auf dem gleichen
> Objekt. Das alleine hat das Problem aber immer noch nicht geloest.
Hmm, stimmt, das new() habe ich vergessen.
Ich habe gerade POSIX::mktime gefunden und die Funktion daran angepasst.
Auch die Logik habe ich nochmal durchgesehen und eigentlich keinen
Fehler entdeckt.
Das "get by 11-18" nichts findet wundert mich allerdings nicht, es sei
denn, Du hast die entsprechende holiday-Datei angepasst.
Gibt es einen Tipp, wie ich das sinnvoll debuggen kann?
(leider wieder nicht ausführlich getesteter) neuer Patch ohne
DateTime-Benutzung.
Ciao,
Sven
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~---
diff -u -r1.3 95_holiday.pm
--- FHEM/95_holiday.pm 21 May 2009 09:58:09 -0000 1.3
+++ FHEM/95_holiday.pm 22 May 2009 11:02:17 -0000
@@ -121,6 +121,44 @@
$found = $args[3];
last;
}
+ } elsif($l =~ m/^5/) { # nth weekday since MM-DD / before MM-DD
+ my @a = split(" +", $l, 6);
+ # arguments: 5
+ my %wd = ("Sun"=>0, "Mon"=>1, "Tue"=>2, "Wed"=>3,
+ "Thu"=>4, "Fri"=>5, "Sat"=>6);
+ my $wd = $wd{$a[2]};
+ if(!defined($wd)) {
+ Log 1, "Wrong weekday spec: $l";
+ next;
+ }
+ next if $wd != $fd[6]; # check wether weekday matches today
+ my $yday=$fd[7];
+ # create time object of target date - mktime counts months and their
+ # days from 0 instead of 1, so subtract 1 from each
+ my $tgt=mktime(0,0,1,$a[3]-1,$a[4]-1,$fd[5],0,0,-1);
+ my $tgtmin=$tgt;
+ my $tgtmax=$tgt;
+ my $weeksecs=7*24*60*60; # 7 days, 24 hours, 60 minutes, 60seconds each
+ my $cd=mktime(0,0,1,$fd[3],$fd[4],$fd[5],0,0,-1);
+ if ( $a[1] =~ /^-([0-9])*$/ ) {
+ $tgtmin -= $1*$weeksecs; # Minimum: target date minus $1 weeks
+ $tgtmax = $tgtmin+$weeksecs; # Maximum: one week after minimum
+ # needs to be lower than max and greater than or equal to min
+ if ( ($cd ge $tgtmin) && ( $cd lt $tgtmax) ) {
+ $found=$a[5];
+ last;
+ }
+ } elsif ( $a[1] =~ /^\+?([0-9])*$/ ) {
+ $tgtmin += ($1-1)*$weeksecs; # Minimum: target date plus $1-1 weeks
+ $tgtmax = $tgtmin+$weeksecs; # Maximum: one week after minimum
+ # needs to be lower than or equal to max and greater min
+ if ( ($cd gt $tgtmin) && ( $cd le $tgtmax) ) {
+ $found=$a[5];
+ last;
+ }
+ } else {
+ Log 1, "Wrong distance spec: $l";
+ next;
+ }
}
}
diff -u -r1.63 commandref.html
--- docs/commandref.html 11 May 2009 16:23:38 -0000 1.63
+++ docs/commandref.html 22 May 2009 11:02:17 -0000
@@ -2964,6 +2964,17 @@
4 01-06 31-06 Summer holiday
[/list]
+ 5
+ Date relative, weekday fixed holiday. Arguments: <nth>
+ <weekday> <month> <day> < holiday-name>
+ Note that while +0 or -0 as offsets are not forbidden, their behaviour
+ is undefined in the sense that it might change without notice.
+ Examples:
+ + 5 -1 Wed 11 23 Buss und Bettag (first Wednesday before Nov, 23rd)
+ 5 1 Mon 01 31 First Monday after Jan, 31st (1st Monday in February)
+
+
[/list]
See also he.holiday in the contrib directory for official holidays in the
german country of Hessen.
diff -u contrib/by.holiday
--- contrib/by.holiday 2009-05-19 10:32:10.552085500 +0200
+++ contrib/by.holiday 2009-05-19 10:39:52.000000000 +0200
@@ -0,0 +1,19 @@
+# Siehe auch
+# http://de.wikipedia.org/wiki/Feiertage_in_Deutschland
+
+1 01-01 Neujahr
+1 01-06 Heilige Drei Koenige
+1 05-01 Tag der Arbeit
+1 08-15 Mariae Himmelfahrt (nur bei ueberwiegend katholischer Bevoelkerung)
+1 10-03 Tag der deutschen Einheit
+1 11-01 Allerheiligen
+1 12-25 1. Weihnachtstag
+1 12-26 2. Weihnachtstag
+
+2 -2 Karfreitag
+2 1 Ostermontag
+2 39 Christi Himmelfahrt
+2 50 Pfingsten
+2 60 Fronleichnam
+#5 -1 Wed 11 23 Buss und Bettag (first Wednesday before Nov, 23rd)
+
> Kannst Du mir erklären, was die Zeile
> $md++ if(schaltjahr($fd[5]+1900) && $fd[4] == 1);
> (zeile 111 in 95_holiday.pm) machen soll?
Stimmt, ist ein Bug, habs geloescht.
> Gibt es einen Tipp, wie ich das sinnvoll debuggen kann?
Mit fhem, der laeuft prima mit einem "mobilen" CUL, da braucht man gar
kein HW, um die meisten Module testetn zu koennen.
> (leider wieder nicht ausführlich getesteter) neuer Patch ohne
> DateTime-Benutzung.
Ich habe es eingebaut (obwohl patch sich gewaehrt hat), getestet, und
eingecheckt. Ab jetzt nehme ich nur getestete patches entgegen.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHEM users on Linux" group.
To post to this group, send email to fhem-users@googlegroups.com
To unsubscribe from this group, send email to fhem-users+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/fhem-users?hl=en
-~----------~----~----~----~------~----~------~--~-