Seite 2 von 2

Re: [V4.0 IP4] Custom Logik zur Adventsberechnung

Verfasst: Do Dez 05, 2024 5:37 pm
von jensgulow
..... habe mal die Logik "geupdatet", da ich für ein anderes Projekt den "day of year" vom 1. Adventssonntag brauchte...

Code: Alles auswählen

/**===================================================================== 
Adventsberechnung

einstellbar: Beginn ab 1. Advent (So) -> $TagePlus 21
             Beginn ab Mo nach Totensonntag -> $TagePlus 27
             
Ende: einzustellen über $ObergrenzeTag -> Heilige 3 Könige: 5; Maria Lichtmess: 33
======================================================================*/ 
{ 

    "Level": [ 
        ["$utime","integer",0],
        ["$yday","integer",0],
        ["$Yday","integer",0],
        ["$Mon","integer",0],
        ["$Mday","integer",0],

        ["$TagInnerhalb","bool",false],  
        ["$UntergrenzeTag","integer",0], 
        ["$ObergrenzeTag","integer",33],         // 06.01.: 5 ; 03.02.: 33
        ["$true","bool",true],  
        ["$adv1","bool",false],
        ["$Val_ok","bool",false],  
        ["$Min","integer",358], 
        ["$Max","integer",365],
        ["$adv2","bool",false],

    	["$CronString","string","0 0 0 25 12 *"],	// 25.12. 00:00 Uhr
        ["$Weihnachtsfeiertag","integer",0], 
        ["$Wday","integer",0],
        ["$TagePlus","integer",27],							// 21: Beginn 1.Advent(So); 27: Beginn Montag nach Totensonntag
        ["$TagePlusAdventssonntag","integer",21],			// 21: Beginn 1.Advent(So)
        ["$TagSekunden","integer",86400],
        ["$Formel1","string","(X1+X2)*X3"],        
        ["$Formel2","string","X1-X2"],        
        ["$OutA","integer",0], 
        ["$OutB","integer",0],
        ["$OutC","integer",0],
        ["$OutD","integer",0],
        ["$adv3","bool",false],

        ["$adv","bool",false]		
    ],
 
    "Module": [ 
	  // aktuelle Zeit "zerlegen" 
	  ["Localtime",0,"$utime",0,0,0,0,0, 0,0,"$yday",0],

	  // prüfen ob 01.01. bis <= $ObergrenzeTag ist -> $adv=1, sonst $adv1=0
	  ["Limiter","$yday",0,"$TagInnerhalb",["$UntergrenzeTag","$ObergrenzeTag"]],
	  ["And" , ["$TagInnerhalb","$true"], "$adv1"],
	  // prüfen ob $yday zwischen 25.12. und 31.12. liegt (31.12. max. 365, 25.12. min 358 - hängt davon ab, ob Schaltjahr ist)
	  ["Limiter","$yday",0,"$Val_ok",["$Min", "$Max"]],
	  ["And" , ["$Val_ok","$true"], "$adv2"],

	  // timestamp vom 25.12. 00.01 Uhr
      ["Cron","$true",0,"$Weihnachtsfeiertag","$CronString"],
      // Wochentag des 25.12. bestimmen
	  ["Localtime","$Weihnachtsfeiertag",0,0,0,0,0,0,0,"$Wday",0,0],
      //Zwischenergebnis berechnen
	  ["CalcFormula",["$Wday","$TagePlus","$TagSekunden"], "$OutA", "$Formel1"],
	  ["CalcFormula",["$Wday","$TagePlusAdventssonntag","$TagSekunden"], "$OutC", "$Formel1"], // -> für die Berechnung wann der erste Adventssonntag ist
	  
	  // $OutA von $Weihnachtsfeiertag (timestamp 25.12) subtrahieren
	  ["CalcFormula",["$Weihnachtsfeiertag","$OutA"], "$OutB", "$Formel2"],

	  // $OutC von $Weihnachtsfeiertag (timestamp 25.12) subtrahieren
	  ["CalcFormula",["$Weihnachtsfeiertag","$OutC"], "$OutD", "$Formel2"],
	  // Jetzt Datum des 1. Adventssonntages bestimmen
	  ["Localtime","$OutD",0,0,0,0,"$Mday","$Mon",0,0,"$Yday",0], // -> wichtig für die Berechnung der Feiertage

	  // Wenn $utime> $OutB ist -> $adv3=1; sonst $adv=0
	  ["Comparator" , "$utime" , "$adv3" , "$OutB"],
	  
	  // wenn $adv1 ODER $adv2 ODER $adv3 = true  -> $adv=1,
	  ["Or",["$adv1", "$adv2", "$adv3"], "$adv"]
    ], 

    "Input": [ 
        
    ], 

    "Output": [ 
    ["Advent","Es ist Adventszeit","$adv","a"],
    ["Tag 1. Adventssonntag","","$Mday","a"],
    ["Monat 1. Adventssonntag","","$Mon","a"],
    ["Day of Year 1. Adventssonntag","","$Yday","a"]
	
    ] 
} 
/**Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. */