Berücksichtigung von Feiertagen im Wochenplan

Hallo,

aus gegebenem Anlass eine Frage in die Runde:
Heute haben wir einen Feiertag und prompt sind heute morgen die Rollläden mit den Zeiten des Werktages aufgefahren.

Um den Codieraufwand zu minimeren, habe ich mir folgenden Lösungsansatz überlegt:
Wenn der aktuelle Tag ein Feiertag ist, soll für die Wochenpläne (und davon habe ich einige) der Sonntag als aktueller Tag hinterlegt werden. Damit bräuchte ich für Feiertage keine zusätzlichen Wochenpläne anlegen und auch keine entsprechende Umschaltskripte codieren.

Meine Recherche hat bisher leider keine passende Ergebnisse geliefert. Gibt es eine Möglichkeit, den aktuellen Wochentag für die Wochenpläne zu „manipulieren“?

Gruß

wolkensurfer

Hi wolkensurfer!

Eventuell kannst du dir damit etwas basteln:
IPS_SetEventScheduleAction — IP-Symcon :: Automatisierungssoftware
IPS_SetEventScheduleGroup — IP-Symcon :: Automatisierungssoftware
IPS_SetEventScheduleGroupPoint — IP-Symcon :: Automatisierungssoftware

Aber je mehr ich darüber nachdenke, dann würde ich eher im Script prüfen, ob der jeweilige Tag ein Feiertag ist und dafür einfach einen eigenen Wochenplan machen. Ein Script prüft, ob Feiertag ist, wenn ja, dann wird der Wochenplan deaktiviert und dafür ein anderer aktiviert.

Grüße,
Chris

@Bayaro

Danke Chris für die Links.

Habe mir pro Zimmer einen Rollladen-Wochenplan angelegt. Ist vielleicht etwas oversized, aber wir möchten halt nicht überall zur gleichen Zeit die Rollläden morgens geöffnet bzw. abends geschlossen bekommen. Deinen Lösungsvorschlag hatte ich mir auch schon überlegt gehabt, aber das würde einige zusätzliche Wochenpläne erzeugen. Das wiederum ist nicht der Übersichtlichkeit und Schlankheit des Systems (insbesondere des WebFront) zuträglich. Bisher laufen auch die Rollladen-Wochenpläne autark, d.h. ohne übergeordnete PHP-Skripte. Dies wäre dann allerdings notwendig.

Habe mir die Befehle zur Ereignisverwaltung angeschaut, aber so wie ich das sehe, bekomme ich darüber keinen Zugriff auf den aktuellen Tag.

Vielleicht wäre das eine sinnvolle Erweiterung des Wochenplans: Wenn der heutige Tag ein Feiertag ist, dann soll z.B. der Wochenplan des Sonntags verwendet werden.

Gruß

wolkensurfer

Du könntest im jeweiligen Script, wo du die Rollläden dann hoch/runter fährst abfragen (von einer Variable, die jede Nacht um 0.01 Uhr gesetzt wird, wenn ein Feiertag ist), ob ein Feiertag ist, wenn ja, dann irgendwie anders schalten!? Ist grad sehr theoretisch und ich nicht fit, deshalb versuche ich nur meine Gedanken beizusteuern :slight_smile:

Grüße,
Chris

Danke Chris für Deine Gedanken.

Habe gerade einen Test gemacht:
Für den Hauswirtschaftsraum habe ich einen zweiten Wochenplan (für Feiertage) angelegt. Dieser entspricht dem Tagesplan für den „normalen“ Sonntag.
Den vorhandenen Wochenplan für Nichtfeiertage und den Wochenplan für Feiertage habe ich jeweils zusätzlich ein Ereignis zugefügt, das den Wert der Variable „Feiertag“ überprüft. Bei „true“ (es ist Feiertag) wird der Feiertag-Wochenplan ausgeführt und bei „false“ wird der Nichtfeiertage-Wochenplan ausgeführt. Dieser Weg funktioniert :).

Wenn ich bedenke, dass es mir reichen würde, dass ich bei Feiertag nur den Tagesplan vom „normalen“ Sonntag ausführen müsste, ist dieser Weg doch recht aufwendig. Das würde den zweiten Wochenplan (für Feiertage) sparen.

Gruß

wolkensurfer

Laufen alle deine Wochenpläne in einem Script zusammen, welches dann die Steuerung der Heizung durchführt? So müsstest du nur an einer Stelle diese Prüfung machen und dann vlt. nur einen Feiertags-Wochenplan und dann den Wert daraus verwenden, wenn Feiertag = true !?

Leider fällt mir sonst nur diese Alternative ein >> Funktionswünsche - IP-Symcon Community Forum

:smiley:

Grüße,
Chris

Hi,

ich war auch Anfang der Osterferien darüber gestolpert, bin hiermit zufrieden:

woplan2.PNG

herbert

Hallo herbert,

vielen Dank für Deinen Lösungsweg. Wie bzw. wo erfolgt die Auswahl, welcher der beiden Wochenpläne benutzt wird?

Mein aktueller Stand eines Tests schaut so aus:

Wochenplan Feiertag.jpg

Bei mir gibt es eine Variable „FeierTag“ (leider auf dem Bildschirmdruck etwas abgeschnitten), die an Feiertagen auf true steht (wird in einem eigenen Skript berechnet). Davon abhängig wird entweder der Wochenplan für Feiertage verwendet oder der „normale“ Wochenplan. Das funktioniert soweit auch.

Gruß

wolkensurfer

So mach ich dies auch.

Könnte bitte einer (oder alle :D) sein Script hier posten, mit dem ihr euch die Info holt, ob ein Feiertag ist oder nicht? :slight_smile:

Gibt es da eine Variante, wo man nicht auf eine Webseite angewiesen, die sich morgen schon ändern kann?

Danke und Grüße,
Chris

Hi Bayaro,

Mix aus Feiertag und Ferien.

Ferien:

<?

/*
Dieses Skript ermittelt über die Webseite von www.schulferien.org ob aktuell Ferien sind.
Die Anpassung für die einzelnen Bundesländer ist denkbar einfach. Einfach unter http://www.schulferien.org/iCal/
den passenden Kalender suchen und den Link kopieren. Die Anpassung der Jahreszahl bitte beachten, diese
passt sich automatisch an und muss im Link entsprechend entfernt werden.
*/

$jahr     = date("Y");
$tag      = date("d");
$monat      = date("m");
if (($tag<5 && $monat==1)) $jahr=$jahr-1;    //Korrektur z.B. der 2.Januar gehört noch zum ical-Kalender des Vorjahres
$link     = "http://www.schulferien.org/iCal/Ferien/icals/Ferien_Thueringen_".$jahr.".ics";
$ferien   = "Keine Ferien";
$meldung  = file($link);
$anzahl   = (count($meldung)-1);

for ($count = 0; $count < $anzahl; $count++)
{
    if (strstr($meldung[$count], "SUMMARY:")) {
       $name  = trim(substr($meldung[$count],8));
       $start = trim(substr($meldung[$count+1],19));
       $ende  = trim(substr($meldung[$count+2],17));
        $jetzt = date("Ymd")."
";
        /*$jetzt= 20140217;   //zum Test ein Feriendatum
        echo $jetzt;*/
        if ($jetzt >= $start and $jetzt <= $ende)
        {
           $ferien = $name;
        }
   }
}

if ($ferien == "Keine Ferien")  // Flag für Ferienmodus setzten
{
    SetValueBoolean(18526 /*[Tools, Service\An/Abwesend Feiertage Ferien\Schulferien\Ferien in Thüringen]*/, false);
}
else
{
    SetValueBoolean(18526 /*[Tools, Service\An/Abwesend Feiertage Ferien\Schulferien\Ferien in Thüringen]*/, true);
}

?>

Feiertag:

 <?
/*
***********************************************************
Berechnet den freie Tage, Feiertage
und setzt die Variablen
***********************************************************
*/
//Aktuelles Datum (Format "JJJJMMTT")
$today = date ("md");                                                        // aktueller Tag
$todayy = date ("Ymd");                                                      // aktuelles Datum
$year = date ("Y");                                                          // aktuelles Jahr
//
//
$schulfrei1 = "20080502";                                                    // schulfreier Tag #1
$schulfrei2 = "20080502";                                                    // schulfreier Tag #2
$schulfrei3 = "20080502";                                                    // schulfreier Tag #3
//
// *** Wochentag setzen (Sonntag = 7, Montag = 1) ***
$wday = date("w");
$wday1 = array("7","1","2","3","4","5","6");
$wday2 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
echo "Heute ist Wochentag ", $wday1[$wday], " ($wday2[$wday])","
";
//SetValueString(24833 /*[Objekt #24833 existiert nicht]*/  , $wday1[$wday]);
//SetValueString(53384 /*[Objekt #53384 existiert nicht]*/ , $wday2[$wday]);

// *** Tag des Jahres setzen ***
//SetValueString(46827 /*[Fenster+Türen\Haustür-Raspberry-IPS\LifeBit\LifeBit\ÜberprüfungAktualisierungszeit_besser_kein_Reboot_da_5Volt_sehr_knapp\]*/ , date("z"));

// *** Kalenderwoche setzen ***
//SetValueString(14535 /*[Objekt #14535 existiert nicht]*/ , date("W"));


// *** bewegliche Feiertage ***
if ( ($today == strftime("%m%d",(easter_date() - 2 * 86400)))                   // Karfreitag
//or ($today == "0512")                                                           // Test-Tag (aktuellen Tag eintragen zum Funktionstest)
or ($today == strftime("%m%d",(easter_date() )))                                // Ostersonntag
or ($today == strftime("%m%d",(easter_date() + 1 * 86400)))                     // Ostermontag
or ($today == strftime("%m%d",(easter_date() + 39 * 86400)))                    // Christi Himmelfahrt
or ($today == strftime("%m%d",(easter_date() + 49 * 86400)))                    // Pfingstsonntag
or ($today == strftime("%m%d",(easter_date() + 50 * 86400)))                    // Pfingstmontag
//or ($today == strftime("%m%d",(easter_date() + 60 * 86400)))                    // Fronleichnam
//or (($wochentag == 3) and ($today >= "1116") and ($today <= "1122"))            // Buß u. Bettag

// *** feste Feiertage ***
or ($today == "0101")                                                           // Neujahr
or ($today == "0106")                                                           // Heilige Drei Könige
or ($today == "0501")                                                           // 1. Mai
or ($today == "1003")                                                           // Tag der dt. Einheit
or ($today == "1031")                                                           // Reformationstag
//or ($today == "1101")                                                           // Allerheiligen
or ($today == "1225")                                                           // 1. Weihnachtsfeiertag
or ($today == "1226")                                                           // 2. Weihnachtsfeiertag
// *** freie Tage ***
or ($today == "1224")                                                           // Heiliger Abend
or ($today == "1231")                                                           // Silvester
// ***schulfreie Tage***
or ($todayy == $schulfrei1)                                                     // schulfreier Tag #1
or ($todayy == $schulfrei2)                                                     // schulfreier Tag #2
or ($todayy == $schulfrei3)                                                     // schulfreier Tag #3
)


// *** "Freier Tag"-Variable setzen ***
   {
   SetValueBoolean(45788 /*[Tools, Service\An/Abwesend Feiertage Ferien\An-/Abwesend - Funktion\Freier Tag]*/ , true);                          // Es ist ein freier Tag

//   echo "Heute sind  ein schulfreier Tag, ein freier Tag oder ein Feiertag. ","
";
   }
   else
   {
   SetValueBoolean(45788 /*[Tools, Service\An/Abwesend Feiertage Ferien\An-/Abwesend - Funktion\Freier Tag]*/ , false);                         // Es ist kein freier Tag

//   echo "Heute sind kein schulfreier Tag, kein freier Tag und kein Feiertag. ","
";
   }


// 1. Advent berechnen - Weihnachtsbeleuchtung 2 Tag(e) vorher einschalten
$adventbel = date("md",mktime(0,0,0,11,(26+(7-date("w",mktime(0,0,0,11,26,$year))))))-2;
$advent = date("d.m.Y",mktime(0,0,0,11,(26+(7-date("w",mktime(0,0,0,11,26,$year))))));
if ($adventbel == "1200") $adventbel = "1130";
if ($adventbel == "1199") $adventbel = "1129";
if ($adventbel == "1198") $adventbel = "1128";
if ($adventbel == "1197") $adventbel = "1127";
if ($adventbel == "1196") $adventbel = "1126";
if ($adventbel == "1195") $adventbel = "1125";
//echo "1. Advent ist am ", $advent, "
";
/*
if ( ( ("$today") >= ("$adventbel")                                             // ab dann einschalten
or ("$today") <= ("0105") ) )                                                   // bis 5.Januar einschalten
   {
   SetValueBoolean(ID , true);
//      echo "Es ist Adventszeit und die Weihnachtsbeleuchtung wird eingeschaltet.","
";
   }
   else
   {
   SetValueBoolean(ID , false);
//      echo "Es ist keine Adventszeit und die Weihnachtsbeleuchtung wird nicht eingeschaltet.","
";
   }
*/
?>


Habe ich alles hier aus dem Forum …

herbertf

Hier wär mal eine Variante wo man keine Seite aus dem Internet braucht. PHP liefert ja eh alles g

mal schnell aus dem Internet zusammengeklopft und für Oberösterreich angepasst, sollte aber funktionieren :slight_smile:

<?
$jahr = date('Y');
$ostersonntag = date('Y-m-d',easter_date($jahr));
$ostermontag = date('Y-m-d',easter_date($jahr)+60*60*24*1);
$himmelfahrt = date('Y-m-d',easter_date($jahr)+60*60*24*39); // 39 Tage nach Ostersonntag
$pfingstsonntag = date('Y-m-d',easter_date($jahr)+60*60*24*49); // 49 Tage nach Ostersonntag
$pfingstmontag = date('Y-m-d',easter_date($jahr)+60*60*24*50);
$fronleichnam = date('Y-m-d',easter_date($jahr)+60*60*24*60); // 2. Donnerstag nach Ostersonntag
$arr_feiertage[$jahr.'-01-01']    = 'Neujahr';
$arr_feiertage[$jahr.'-01-06']    = 'Hl. 3 Könige';
$arr_feiertage[$ostersonntag]        = 'Ostersonntag';
$arr_feiertage[$ostermontag]        = 'Ostermontag';
$arr_feiertage[$jahr.'-05-01']    = 'Staatsfeiertag';
$arr_feiertage[$jahr.'-05-04']    = 'St. Florian (Schulfrei)';
$arr_feiertage[$himmelfahrt]        = 'Christi Himmelfahrt';
$arr_feiertage[$pfingstsonntag]    = 'Pfingstsonntag';
$arr_feiertage[$pfingstmontag]    = 'Pfingstmontag';
$arr_feiertage[$fronleichnam]        = 'Fronleichnam';
$arr_feiertage[$jahr.'-08-15']    = 'Maria Himmelfahrt';
$arr_feiertage[$jahr.'-10-26']    = 'Nationalfeiertag';
$arr_feiertage[$jahr.'-11-01']    = 'Allerheiligen';
$arr_feiertage[$jahr.'-12-08']    = 'Maria Empfängnis';
$arr_feiertage[$jahr.'-12-25']    = 'Christtag';
$arr_feiertage[$jahr.'-12-26']    = 'Stefanitag';

$today = date('Y-m-d');
if(array_key_exists($today, $arr_feiertage)) {
    echo "heute ist: ".$arr_feiertage[$today];
} else {
    echo "heute ist kein Feiertag!";}
?>

lg,
Christian.

Herzlichen Dank an euch beide, genau sowas habe ich mir vorgestellt. Hab gar nicht an PHP selbst gedacht :rolleyes:

Dann werde ich das auch mal bei mir integrieren, will eh meine Heizungssteuerung umbauen, da bietet sich das ja an :slight_smile:

Danke und Grüße,
Chris

Hallo, bin neu hier und hab grad eben die Visu aufgesetzt. Benutze sie mit KNX und hab alles soweit hinbekommen wie ich es mir vorgestellt habe. Was mir noch fehlt oder ich nicht gefunden habe, ist eine Feiertagsschaltung die mir die Wochenschaltuhrbefehle überschreibt/sperrt. Gibt es da mittlerweile ein Funktionsmodul oder muss das immer noch mit PHP gemacht werden?

Danke+Gruß
holymoly

Da viele inzwischen eine Bool-Variable pflegen, die anzeigt, ob ein Wochentag ein Feiertag ist, fände ich es ebenfalls sehr hilfreich, wenn man im Wochenplan die ID der Feiertags-Bool-Variablen eintragen könnte und dies mitberücksichtigt würde, indem der Wochentag bei Feiertags-Bool auf true als Sonntag behandelt wird.

@paresy oder Dr. Niels: Wäre dies nicht mit geringem Aufwand umsetzbar? Dann würde man sich die doppelte Wochenplan-Pflege endlich sparen können… Vielleicht haben wir an Weihnachten ja schon die Gelegenheit, das zu testen…:wink:

Danke und viele Grüße!

Schade dass hier noch niemand geantwortet hat

Ich suche gerade auch Möglichkeiten auf Feiertage zu reagieren. Speziell benötige ich noch den Tag (Abend) vor einem Feiertag.
Ich nutze z.Zt. Christian’s Version. Sollte ich das Script nochmal nutzen mit je einem Tag davor oder gibt es eine Kurzversion?

Mit IPS_SetSheduleGroupPoint lässt sich ein bestehender Wochenplan und unter Zuhilfenahme des Feiertag-Skripts komfortabel ändern.
Der Vorteil: Man braucht keine 2 Wochenpläne, falls der Wochenplan im Webfront verlinkt ist, zeigt immer die korrekte Zeit an.

@Heidewinkler
Ich denke es wäre das einfachste (soviele Feiertage haben wir ja nicht) die jeweiligen Tage vor den Feiertagen einfach mit in das Skript zu setzen

Ja Danke, habe ich auch so gemacht. Wobei ich ein zweites Skript nutze da ich auch eine 2. Variable brauche.(Da für Abendbeleuchtung vor Feiertag)

Mit IPS_SetSheduleGroupPoint lässt sich ein bestehender Wochenplan und unter Zuhilfenahme des Feiertag-Skripts komfortabel ändern.
Das musst du bitte mal genauer erläutern.

Hat noch jemand den Ferienkalender von Schulferien im Einsatz? Schaut mir so aus, als ob das jetzt mit einem Captcha geschütz ist.

Ist auch irgendwie klar, wenn das .ical-File jeden Tag von allen Nutzern neu geladen wird.

Gibt es sinnvolle Alternativen?

Grüße
Stefan