Seite 1 von 2

[V4.0 IP4] Custom Logik zur Adventsberechnung

Verfasst: Mo Nov 27, 2023 8:26 am
von jensgulow
Die Adventszeit ist da. Einige der Automatisierungsaufgaben sind in der Adventszeit etwas anders. Von daher habe ich eine Custom Logik zusammengewerkelt, welche im Adventszeitraum ein $adv=1 ausgibt, ausserhalb des Zeitraumes ein $adv = 0.

Über 2 Variablen läßt sich Anfangs-($TagePlus) und Enddatum ($ObergrenzeTag) festlegen.

Viel Spaß!

PS: Ursprungsthread: viewtopic.php?f=103&t=4544&p=50449&hilit=advent#p50449

Code: Alles auswählen

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

einstellbar: Beginn ab 1. Advent (So) -> $TagePlus 21
             Beginn ab Mo nach Totensonntag -> $TagePlus 27
             Ende über $ObergrenzeTag einstellbar (z.B. 06.01.: 5 ; 03.02.: 33)
======================================================================*/ 
{ 
    "Level": [ 
        ["$utime","integer",0],
        ["$yday","integer",0],

        ["$TagInnerhalb","bool",false],  
        ["$UntergrenzeTag","integer",0], 
        ["$ObergrenzeTag","integer",33],         // 06.01.: 5 ; 03.02.: 33
        ["$true","bool",true],  
        ["$adv1","bool",false],

    	["$CronString","string","0 1 0 25 12 *"],	// 25.12. 00:01 Uhr
        ["$Weihnachtsfeiertag","integer",0], 
        ["$Wday","integer",0],
        ["$TagePlus","integer",27],			// 21: Beginn 1.Advent(So); 27: Beginn Montag nach Totensonntag
        ["$TagSekunden","integer",86400],
        ["$Formel1","string","(X1+X2)*X3"],        
        ["$Formel2","string","X1-X2"],        
        ["$OutA","integer",0], 
        ["$OutB","integer",0],
        ["$adv2","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"],

	  // 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"],
	  
	  // $OutA von $Weihnachtsfeiertag (timestamp 25.12) subtrahieren
	  ["CalcFormula",["$Weihnachtsfeiertag","$OutA"], "$OutB", "$Formel2"],

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

    "Input": [ 
    ], 

    "Output": [ 
    ["Advent","Es ist Adventszeit","$adv","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. */  

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

Verfasst: Mo Dez 25, 2023 5:14 pm
von Dragonos2000
@jensgulow Vielen Dank für den Baustein- nutze ihn die letzten Wochen schon doch seit heute gibt der Baustein konsequent "false" aus - ist das bei anderen auch so?

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

Verfasst: Mo Dez 25, 2023 5:54 pm
von jensgulow
Uiiii, da ist ein Fehler in der Logik. Es fehlt der Zeitraum 25.12. - 31.12. wo ja immer ein adv=1 ausgegeben werden sollte..... Ich kümmere mich....

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

Verfasst: Mo Dez 25, 2023 8:08 pm
von jensgulow
So sollte es wieder hinhauen ....

Code: Alles auswählen

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

einstellbar: Beginn ab 1. Advent (So) -> $TagePlus 21
             Beginn ab Mo nach Totensonntag -> $TagePlus 27
             
Ende: fix auf 06.01. eingestellt (Heilige 3 Könige)
======================================================================*/ 
{ 
  "_Meta": { 
    "Description": "",
    "Version": "1.00",
    "Icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLDIxVjE4SDNMOCwxM0g1TDEwLDhIN0wxMiwzTDE3LDhIMTRMMTksMTNIMTZMMjEsMThIMTRWMjFIMTBaIiAvPjwvc3ZnPg=="
  },
    "Level": [ 
        ["$utime","integer",0],
        ["$yday","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 1 0 25 12 *"],	// 25.12. 00:01 Uhr
        ["$Weihnachtsfeiertag","integer",0], 
        ["$Wday","integer",0],
        ["$TagePlus","integer",27],			// 21: Beginn 1.Advent(So); 27: Beginn Montag nach Totensonntag
        ["$TagSekunden","integer",86400],
        ["$Formel1","string","(X1+X2)*X3"],        
        ["$Formel2","string","X1-X2"],        
        ["$OutA","integer",0], 
        ["$OutB","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"],
	  
	  // $OutA von $Weihnachtsfeiertag (timestamp 25.12) subtrahieren
	  ["CalcFormula",["$Weihnachtsfeiertag","$OutA"], "$OutB", "$Formel2"],

	  // 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"] 
    ] 
} 
/**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. */ 
Den Wert für heute müsstest Du dann händisch setzen....ab morgen sollte es klappen.

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

Verfasst: Di Dez 26, 2023 12:16 am
von Dragonos2000
Super, danke Dir :)
Wollte schon selber den Fehler suchen. Aber wenn man eine Logik nicht selbst gebaut hat, ist das echt mühsam. Danke für's kümmern :handgestures-thumbsup:

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

Verfasst: Mo Jan 01, 2024 3:02 pm
von JustMe
Hallo,
zunächst wünsche ich allen ein frohes neues Jahr!. Vielen Dank für die tolle Logik, leider funktioniert sie nicht bei mir. Wenn ich über den Doc-Modus beobachte, bleibt der Ausgang dauerhaft false.Ich kenne mich leider noch nicht so gut aus, als dass ich selber innerhalb des Codes mein Problem finden würde. Aber mehr als Copy-Paste und starten ist das doch nicht, oder habe ich etwas grundlegendes vergessen?
Im Doc-Modus werden mir in den internen Variablen (wenn ich auf das Grafana-Logo klicke) auch lediglich jeweils eine 0 für $utime und $yday angezeigt. Könnte dies ggf. auf das Problem hindeuten, oder kann man bei Grafana das dann gar nicht so sehen bzw. interpretieren?

Ggf kann mir da noch mal jmd einen Hinweiß geben, wie man das am besten debuggen könnte.

Besten Dank und einen guten Start ins neue Jahr!
Frank

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

Verfasst: Mo Jan 01, 2024 4:31 pm
von Dragonos2000
Hast Du per + Zeichen bei den Eingängen noch einen separaten Trigger eingefügt und dort eingestellt, wann die Logik laufen soll? Das reicht bspw. einmal am Tag mittags.
Die Logik ist so gebaut, dass sie nur zu diesen Zeitpunkten prüft, ansonsten wird die Logik nicht ausgeführt- ohne separaten Trigger daher gar nicht.

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

Verfasst: Mo Jan 01, 2024 4:35 pm
von Dragonos2000
Noch ein Nachtrag mit einem Screenshot, wie das aussehen sollte. Die Zeitpunkte kannst Du selber wählen, entsprechend Deiner Bedürfnisse. Zum Debuggen kannst Du den Trigger auch mal auf Intervall und wenige Sekunden einstellen. Braucht es dann später aber nicht mehr so oft...

Bild

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

Verfasst: Di Jan 02, 2024 11:41 am
von JustMe
Danke, funktioniert jetzt!
Werd' noch mal die Doku durchgehen, um zu verstehen, warum man in diesem Baustein noch einen Trigger benötigt. Habe mir auch schon ein paar Custom Logiken erstellt und die gehen alle ohne extra Trigger. Haben aber alle zumindest einen Eingang - Spannend (:

Danke noch mal!

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

Verfasst: Di Jan 02, 2024 12:23 pm
von Dragonos2000
@JustMe freut mich, dass es funktioniert.
JustMe hat geschrieben: Di Jan 02, 2024 11:41 am Haben aber alle zumindest einen Eingang
Da wird das Ausführen der Logik dann durch Beschreiben der Eingänge getriggert, was Du sogar einstellen kannst:
Bei "u" (Update) wird die Logik bspw auch nicht ausgeführt, sondern der Wert nur in die Variable übernommen
Bei "a" (Always) bei jedem beschreiben eines Eingangs
Bei "c" (Change) nur, wenn sich der geschriebene Eingangswert geändert hat: Reihenfolge 1 - 5 - 5 würde bspw bei der zweiten 5 nicht mehr triggern, da sich der Wert nicht geändert hat.

Les' Dir in der Doku am Besten nochmal durch...