NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[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
Antworten
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 322
Registriert: Fr Apr 19, 2019 4:37 pm
Hat sich bedankt: 66 Mal
Danksagung erhalten: 136 Mal

[V4.0 IP4] Custom Logik zur Adventsberechnung

#1

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

Jens

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

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#2

Beitrag 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?
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 322
Registriert: Fr Apr 19, 2019 4:37 pm
Hat sich bedankt: 66 Mal
Danksagung erhalten: 136 Mal

#3

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

Jens

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

Ersteller
jensgulow
Reactions:
Beiträge: 322
Registriert: Fr Apr 19, 2019 4:37 pm
Hat sich bedankt: 66 Mal
Danksagung erhalten: 136 Mal

#4

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

Jens

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

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#5

Beitrag 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:
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

JustMe
Reactions:
Beiträge: 17
Registriert: Di Apr 28, 2020 11:33 pm
Wohnort: C:\Windows
Hat sich bedankt: 9 Mal
Danksagung erhalten: 2 Mal

#6

Beitrag 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
VG
Frank

TWS 960, ID502 ID840, VPN offen, Reboot jederzeit möglich

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#7

Beitrag 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.
Zuletzt geändert von Dragonos2000 am Mo Jan 01, 2024 4:37 pm, insgesamt 1-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#8

Beitrag 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
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

JustMe
Reactions:
Beiträge: 17
Registriert: Di Apr 28, 2020 11:33 pm
Wohnort: C:\Windows
Hat sich bedankt: 9 Mal
Danksagung erhalten: 2 Mal

#9

Beitrag 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!
VG
Frank

TWS 960, ID502 ID840, VPN offen, Reboot jederzeit möglich

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#10

Beitrag 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...
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit
Antworten

Zurück zu „Zusätzliche Logikbausteine“