KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[TIPP] [V4.0 IP4] Custom Logik zur Adventsberechnung

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 473
Registriert: Fr Apr 19, 2019 4:37 pm
Wohnort: Leipzig
Hat sich bedankt: 75 Mal
Danksagung erhalten: 206 Mal

#11

Beitrag 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. */    
Viele Grüße

Jens

_____________________________________________________________________
TWS 2600#394 , TWS 3500L#1051, VPN offen, Reboot erlaubt
genutzt? -> TWS, KNX, 1-wire, MQTT, MODBUS, Http-REST-API, IFTTT, Enocean, Amazon Alexa
Antworten

Zurück zu „Zusätzliche Logikbausteine“