NEU! Datensicherung per FTP / FTPS
mit Anforderung Backup über Systemobjekt, Zeitschaltuhr und VISU
Viele Details dazu hier im Forum

Upgrade: Erweiterte Prüfung von Custom Logik Code
Upgrade: Navigation im Menübaum über Suche mit CTRL-F
Upgrade: Dekodierung für 17 weitere DPT im Busmonitor - mit Farbpunkt bei RGB
Upgrade: Weitere 31 neue physikalische Einheiten und verbesserte Darstellung / Auswahl
Upgrade: Zusätzliche Gestaltungsmöglichkeiten für VISU Widgets auf der Detailseite

Jetzt in der Insider Version 7 zur 4.5 - 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: 476
Registriert: Fr Apr 19, 2019 4:37 pm
Wohnort: Leipzig
Hat sich bedankt: 75 Mal
Danksagung erhalten: 209 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, TWS 3500XL#1691 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“