(Gelöst) Feiertagsabfrage für beliebiges Datum ($WE)

Begonnen von Jupp, 11 Februar 2014, 22:21:01

Vorheriges Thema - Nächstes Thema

Jupp

Hallo zusammen,
ich versuche gerade meineHeizungssteuerung zu automatisieren und möchte dabei immer eine Woche im voraus planen. In der Variable $WE kann ich abfragen, ob heute ein Wochentag ist oder nicht. Dazu habe ich mir einen eigene Feiertagskalender über holiday2we gebaut. Das klappt auch wunderbar. Gibt es eine Möglichkeit, diese Abfrage für ein beliebiges Datum durchzuführen?

Danke und viele Grüße
Jupp

Jupp

...und weil es so schön ist gebe ich mir gerade selbst mal einen Lösungshinweis.
Ich denke, dass ich über meinen Feiertagskalender und ein entsprechendes GET <holiday2we> <MM-DD> schonmal die Auskunft bekomme, ob es ein Feiertag ist oder nicht. In einer eigenen Perl Subroutine könnte man dann eine Abfrage auf Samstag oder Sonntag machen, verknüpft die beiden Infos und gibt dann seine eigene $WE als Rückgabeparameter raus.
Das könnte doch so klappen, oder?

Grüße
Jupp

Groby

Hallo Jupp,

ich denke was Du suchst ist das hier:

holiday2we
If this attribute is set, then the $we variable will be true, if the value of the holiday variable referenced by this attribute is not none.

Example:
attr global holiday2we hessen

MfGroby

Jupp

Ja genau, das passt. Daraus kann ich mir eine passende perl-Funktion zusammen basteln  :)

Vielen Dank
Jupp

Jupp

Trotz meiner eher rudimentären Perl-Kenntnisse habe ich es tatsächlich geschafft eine Subroutine zu bauen, die mir für ein ebliebiges Datum ausgibt, ob es ein Feiertag bzw. Wochende ist/
# Prüfung auf Feiertag mit Offset
sub getFT {
my $Offset = shift;

# Datum berechnen
my $datum = time + ( $Offset * 60 * 60 * 24 );
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime($datum);
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
my $FT = fhem("get NRW ".$Monat."-".$Monatstag,1) eq "none" ? 0 : 1;
if ( ( $Wochentag == 0 || $Wochentag == 6 ) && $FT == 0 ) {
$FT = 1;
}
return($FT);
}


Viele Grüße und danke für die Anregung
Jupp