Berechnung Totensonntag - Weihnachtsbeleuchtung

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

alf4711
Beiträge: 48
Registriert: 26.09.2017, 11:52

Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von alf4711 » 25.11.2021, 11:39

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

AF-Mobil
Beiträge: 322
Registriert: 25.11.2016, 19:52
Hat sich bedankt: 4 Mal
Danksagung erhalten: 20 Mal

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von AF-Mobil » 25.11.2021, 11:56

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

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von Tyfys » 25.11.2021, 11:58

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);

Gruß
Harry

AF-Mobil
Beiträge: 322
Registriert: 25.11.2016, 19:52
Hat sich bedankt: 4 Mal
Danksagung erhalten: 20 Mal

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von AF-Mobil » 25.11.2021, 12:18

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

alf4711
Beiträge: 48
Registriert: 26.09.2017, 11:52

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von alf4711 » 25.11.2021, 13:05

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

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von Tyfys » 25.11.2021, 13:31

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);
    }
}
Gruß
Harry

alf4711
Beiträge: 48
Registriert: 26.09.2017, 11:52

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von alf4711 » 25.11.2021, 14:47

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

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von Tyfys » 25.11.2021, 15:43

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...
Zuletzt geändert von Tyfys am 25.11.2021, 22:28, insgesamt 2-mal geändert.
Gruß
Harry

alf4711
Beiträge: 48
Registriert: 26.09.2017, 11:52

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von alf4711 » 25.11.2021, 16:23

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

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Berechnung Totensonntag - Weihnachtsbeleuchtung

Beitrag von Tyfys » 25.11.2021, 17:03

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.
Gruß
Harry

Antworten

Zurück zu „HomeMatic allgemein“