Seite 1 von 4

Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 11:39
von alf4711
Hallo zusammen,

die Weihnachtsdeko soll vom Totensonntag (eine Woche vor dem ersten Advent) bis zum 07.01. leuchten.
ich kenne das MEGA Script zur Berechnung von unzähligen Feiertagen etc.
Im möchte allerdings ungern so ein großes Script benutzen, wenn ich eigentlich "nur" den Totensonntag (7 Tage vor dem 1. Advent) berechnen möchte...

Frage: Eine "SV Weihnachten JA/NEIN" soll sich auf Ja stellen, wenn der Totensonntag war (erster Montag nach dem Totensonntag) und bis zum 07.01. auf JA verbleiben, nach dem 08.01 soll die SV auf NEIN gestellt werden usw.....

Hat jemand eine Idee? Hab schon gegoogelt aber nicht wirklich etwas gefunden.

Danke für die Hilfe !
Gruß, Jörg

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 11:56
von AF-Mobil
Hallo, da der Totensonntag immer zwischen dem 20. und dem 26. November ist würde ich über das Zeitmodul jährlich am 26.November kurz vor Mitternacht die Weihnachtsbeleuchtungsaktivierungssystemvariable setzen.
Gruß AF

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 11:58
von Tyfys
Da hast du ein Beispiel, wie Adventstage berechnet werden :

Code: Alles auswählen

integer TagesMin=86400 ;
integer Datum  = (system.Date("%Y").ToInteger()#"-12-24 12:00:00").ToTime().ToInteger(); 
integer Wochentag = Datum.ToTime().Format("%w");

while (Wochentag <> 0) {
    Datum = Datum - TagesMin;
    Wochentag = Datum.ToTime().Format("%w");
};

string Advent1   = ((Datum - TagesMin * 7 *3).ToTime().Format("%d.%m.%Y"));
string Advent2   = ((Datum - TagesMin * 7 *2).ToTime().Format("%d.%m.%Y"));
string Advent3   = ((Datum - TagesMin * 7 *1).ToTime().Format("%d.%m.%Y"));
string Advent4   = ((Datum - TagesMin * 7 *0).ToTime().Format("%d.%m.%Y"));
string BuBTag    = (Datum - (( TagesMin * 7 *3) + (TagesMin*11 ))).ToTime().Format("%d.%m.%Y");

!oder so
WriteLine( "Busstag    = " # (Datum - (( TagesMin * 7 *3) + (TagesMin*11 ))).ToTime().Format("%d.%m.%Y"));
WriteLine( "1.Advent   = " # (Datum - TagesMin * 7 *3).ToTime().Format("%d.%m.%Y")); 
WriteLine( "2.Advent   = " # (Datum - TagesMin * 7 *2).ToTime().Format("%d.%m.%Y")); 
WriteLine( "3.Advent   = " # (Datum - TagesMin * 7 *1).ToTime().Format("%d.%m.%Y")); 
WriteLine( "4.Advent   = " # (Datum - TagesMin * 7 *0).ToTime().Format("%d.%m.%Y")); 

!oder so
integer ButD= (Datum - (( TagesMin * 7 *3) + (TagesMin*11 ))).ToTime().Yearday(); 
integer Ad1D= (Datum - TagesMin * 7 *3).ToTime().Yearday(); 
integer Ad2D= (Datum - TagesMin * 7 *2).ToTime().Yearday(); 
integer Ad3D= (Datum - TagesMin * 7 *1).ToTime().Yearday(); 
integer Ad4D= (Datum - TagesMin * 7 *0).ToTime().Yearday(); 
 

WriteLine("lfd Tag des Jahres Busstag : " #ButD);
WriteLine("lfd Tag des Jahres 1.Advent: " #Ad1D);
WriteLine("lfd Tag des Jahres 2.Advent: " #Ad2D);
WriteLine("lfd Tag des Jahres 3.Advent: " #Ad3D);
WriteLine("lfd Tag des Jahres 4.Advent: " #Ad4D);


Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 12:18
von AF-Mobil
Hallo noch mal, allerdings hat meine simple Variante den Nachteil, dass sie nicht den Montag unmittelbar nach dem Totensonntag ermittelt sondern den spätesten Beginn der Adventszeit benutzt.
AF

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 13:05
von alf4711
Ja, das ist doch schonmal ein Anfang...
Danke zunächst !!!

Wenn wir jetzt das Script für den Advent nehmen:
Der totensontag ist -7 Tage früher als der erste Advent.
Kann man das irgendwie einbauen?

Danke nochmal !
Gruß, Jörg

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 13:31
von Tyfys
z.B. so nach der while-Schleife

Code: Alles auswählen

string TotSoMo = (Datum - ((TagesMin * 7 * 3) + (TagesMin * 6))).ToTime().Format("%d.%m.%Y"); 
WriteLine("Montag nach Totensonntag: " # TotSoMo);

string heute = system.Date().ToTime().Format("%d.%m.%Y");
WriteLine(heute);

string varname = "SV Weihnachten";
if (heute >= TotSoMo)
{
    WriteLine("an");
    if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(varname).Value() == false );
    {
        dom.GetObject(ID_SYSTEM_VARIABLES).Get(varname).State(true);
    }
}

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 14:47
von alf4711
Hallo Harry,

dankeschön !

Aber ich komme mit dem Vorgehen nicht klar:
1. Muss ich beide Scripte parallel nutzen (ggf. zeitversetzt)?
2. Wie müssen die SV aussehen (genaue Bezeichnung und Variablentyp)?

Danke...
Gruß, Jörg

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 15:43
von Tyfys
Nein eigentlich aus dem ersten bis nach der while-Schleife und dem zweiten ein einziges Skript machen:

Code: Alles auswählen

!Berechnung Montag nach Totensonntag ***********************
integer TagesMin=86400 ;
integer Datum  = (system.Date("%Y").ToInteger()#"-12-24 12:00:00").ToTime().ToInteger(); 
integer Wochentag = Datum.ToTime().Format("%w");

while (Wochentag <> 0) {
    Datum = Datum - TagesMin;
    Wochentag = Datum.ToTime().Format("%w");
};

string TotSoMo = (Datum - ((TagesMin * 7 * 3) + (TagesMin * 6))).ToTime().Format("%F");
string heute = system.Date().ToTime().Format("%F");
string varname = "SV_Weihnachten";
if (heute >= TotSoMo)
{
    if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(varname).Value() == false )
    {
        dom.GetObject(ID_SYSTEM_VARIABLES).Get(varname).State(true);
    }
}

Zum Speichern eine Systemvariable SV_Weihnachten vom Typ Logikwert anlegen.
Skript in ein Programm einbinden.

Laufzeitz z.B. ab 15.11. bis SV_Weihnachten wahr ist.
bzw:
AF-Mobil hat geschrieben:
25.11.2021, 11:56
da der Totensonntag immer zwischen dem 20. und dem 26. November
Wenn dir ein anderer Variablenname besser gefällt, einfach entsprechend anlegen
und im Skript SV_Weihnachten dagen ersetzen.

Die Variable würde jetzt beim ersten Programmlauf auf wahr gesetzt - 22.11. war ja schon :)

Viel Freude am Leuchten...

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 16:23
von alf4711
ja, Harry, was soll ich sagen:
DANKESCHÖN !

Das mit dem 07.01 ist aber noch nicht drin, oder?
Wäre das auch möglich, dass sich die SV nein stellt wenn 07.01 bis zum Totensonntag...

Gruß, Jörg

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Verfasst: 25.11.2021, 17:03
von Tyfys
Nein ist im Skript nicht.

Ich würde einfach ein Programm anlegen.
Einmal jährlich am 7.(oder 8.Januar?) und die Variable setzen auf "falsch" bzw "nein" oder was du dafür angegeben hast.
Ich würde das eine Pgm zB Weihnachtszeit_an nennen und das andere Weihnachtszeit_aus.
Dann hast du die Programme auch hintereinander in der Listenansicht.

Könnte man auch im selben Programm als "sonst wenn"-Zweig machen.