Gibt es eine Möglichkeit das $we für morgen aufzurufen (inklusive den feiertagen - ich weiss feiertage gehen für morgen)
ich möchte eben gerne eine neue variable die ich auch rücksetzen kann und mir den status für morgen anzeigt. Dann soll ich sie noch ändern können - falls eben für meine weitere Berechnung der morgige tag nicht als Feiertag / freien tag berücksichtig werden soll.
Eine 'fertige' Möglichkeit ist mir nicht bekannt. Aber Perl macht ja vieles möglich ;)
Hier eine kleine Fingerübung:
# Prueft, ob der angegebener Tag Wochenende oder Feiertag ist (optional)
# Params:
# day: 0-heute, 1-morgen etc. Wenn nichts angegeben, wird heute angenommen.
# Holiday-Device: (s. commandref) wird für die Feiertagspruefung verwendet.
# falls nicht angegeben, wird im Attribut holiday2we in global
# nachgesehen. Falls auch nicht angegeben, wird ignoriert.
#
sub isWeOrHoliday(;$$) {
my ($day, $hdev) = @_;
$day = 0 unless $day;
$hdev = $attr{global}{holiday2we} unless $hdev;
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
my $twday = $wday+$day;
$twday = $twday % 7;
my $we = (($twday==0 || $twday==6) ? 1 : 0);
if(!$we && $hdev && $defs{$hdev}) {
my $v = fhem("get $hdev days $day");
$we = 1 if($v ne "none");
}
return $we;
}
fhem> {isWeOrHoliday()}
1
fhem> {isWeOrHoliday(1)}
1
fhem> {isWeOrHoliday(2)}
1
fhem> {isWeOrHoliday(3)}
0
fhem> {isWeOrHoliday(2,"none")}
0
fhem> {isWeOrHoliday(2,"ns")}
1
'ns' heißt bei mir holiday-Device mit Feiertagen für Niedesachsen. Dies ist auch als Attribut in 'global' hinterlegt.
Danke für den Code ;D
Immer gerne ;)
Habe nur das Prinzip aus fhem.pl (da wird $we gesetzt) genommen und entsprechend für andere Tage als 'heute' erweitert.
Ich weiss der Post ist schon älter, aber ich hatte noch das Bedürfnis einen Ferienkalender mit dem Modul Calendar zu berücksichtigen. Aktuell ist das hardcodiert aber ggf. hilft es jemand weiter.
sub isWeOrHoliday(;$$) {
my ($day, $hdev) = @_;
$day = 0 unless $day;
$hdev = $attr{global}{holiday2we} unless $hdev;
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
my $twday = $wday+$day;
$twday = $twday % 7;
my $we = (($twday==0 || $twday==6) ? 1 : 0);
if(!$we && $hdev && $defs{$hdev}) {
my $v = fhem("get $hdev days $day");
$we = 1 if($v ne "none");
}
return $we || isFerienTag($day) ;
}
sub isFerienTag(;$)
{
my ($day) = @_;
$day = 0 unless $day;
my @nextEvents = split("\n", fhem ("get calender.holiday text next"));
my $d = strftime("%d.%m.%y", localtime(time + 24 *60 *60 * $day));
foreach (@nextEvents) {
my $ev =$_;
my $evDate = substr $ev, 0, 8;
my $ferien = ($ev =~ "Ferien" ? 1: 0);
if ($d eq $evDate && $ferien)
{
return 1;
}
}
return 0;
}
Wie weit in die Zukunft die "next" Einträge gehen habe ich nicht geprüft. Ich brauche es hauptsächlich für einen Kalender der Ganztägige Ferien Einträge hat die immer als "Ferien" in der Summary sind. Frage in der Regel immer den nächsten Tag ab. Wie gesagt das Calender device ist noch hardoced drin. Sollte man versch. Kalender nutzen wollen einfach noch der push die nächsten "get" dem Array hinzufügen.
grüsse