Code: Alles auswählen
/**=====================================================================
2020-12-11 Unkelbach S.
2022-12-11 Uhrzeiten und Beschriftungen angepasst.
2025-03-04 Fahrbefehl und Zeitverschiebung
======================================================================*/
// https://forum.timberwolf.io/app.php/kb/viewarticle?a=115#Multiplexer
/**
* Zeitfenster
* Der Logikbaustein sendet TRUE, wenn die aktelle Uhrzeit zwischen den beiden angegebenen Zeiten liegt.
* Davor und danach wird FALSE gesendet.
* Über Zyklus [s] kann gesteuert werden, wie oft die Prüfung stattfindet und der Ausgangswert ggfs.
* aktualisiert wird.
* Über "Zyklischer Sendeinterval [s]" kann eingestellt werden, ob der Ausgang zyklisch geschrieben werden soll. Wenn nein = 0, niedriges Werte sollten z.B. zur Schonung des KNX-Bus vermieden werden. 900 = 15 Minuten und stellt vermutlich in den meisten Fällen ein ausreichende Minumum dar. Der Wert 3600 sendet den Ausgang folglich 1x je Stunde und zusätzlich bei Änderung.
*
* Nutzungsrechts: 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."
*
* Erstellt am 12.08.2020 von Markus Großmann
*
* ChangeLog:
* V1.2 (13.08.2020): optionaler zyklischer Sendetakt, output parameter t statt c (edit Robosoc)
* V1.1 (13.08.2020): Ausgang wird nun sekundengenau geschaltet
* V1.0 (13.08.2020): Initial Release
*/
{
"_Meta": { // Optional
"Description": "Zeitfenster",
"Version": "1.2",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["Freigabe","gibt die Logik frei", "$I_Freigabe", "c"]
,["Morgendämmerung","Zeitpunkt der Morgendämmerung", "$I_Morgen", "c"] // Zeitpunkt errechnet seit 01.01.1970 (Astro Baustein)
,["Abenddämmerung","Zeitpunkt der Abenddämmerung", "$I_Abend", "c"] // Zeitpunkt errechnet seit 01.01.1970 (Astro Baustein)
,["Zeitveschiebung","Verschiebung der Morgen und Abend Zeit in Sek.", "$I_Zeitverschiebung", "c"]
],
"Output": [
["Fahrbefehl","Fahrbefehl an die Rolladen", "$O_Output", "c"] // Gruppenadresse
,["Zeitfenster 1 aktiv","Aktuelle Zeit ist im Zeitfenster 1", "$CurrIsInInterval", "c"] // Zeitfenster
,["Debug","Aktuelle Zeit ist im Zeitfenster 1", "$M_Select", "c"]
,["Debug Time","Aktuelle Zeit ist im Zeitfenster 1", "$ltime", "c"]
,["Debug TimeCurrent","Aktuelle Zeit ist im Zeitfenster 1", "$SecondsTillNext", "c"]
,["M_Morgen","Aktuelle Zeit ist im Zeitfenster 1", "$M_Morgen", "c"]
,["M_Abend","Aktuelle Zeit ist im Zeitfenster 1", "$M_Abend", "c"]
],
"Level": [
["$I_Freigabe","bool",true]
,["$Const0","integer",0]
,["$Const100","integer",100]
,["$Const60","integer",60]
,["$Const86400", "integer", 86400]
,["$ConstTRUE","bool", true]
,["$CurrIsAfterFrom","bool", false]
,["$CurrIsAfterTo","bool", false]
,["$CurrIsInInterval","bool", false]
,["$From_GT_To", "bool", false]
,["$h_curr","integer", 0]
,["$h_from","integer", 0]
,["$h_to","integer", 0]
,["$m_curr","integer", 0]
,["$m_from","integer", 0]
,["$m_to","integer", 0]
,["$Period","integer",60]
,["$s_curr","integer", 0]
,["$s_from","integer", 0]
,["$s_to","integer", 0]
,["$SecondsTillFrom","integer",0]
,["$SecondsTillFrom_GT_Zero", "bool", false]
,["$SecondsTillNext","integer",1]
,["$SecondsTillTo","integer",0]
,["$SecondsTillTo_GT_Zero", "bool", false]
,["$Const1","integer",1]
,["$TimeFrom","integer",0]
,["$TimeTo","integer",0]
,["$Const2","integer",2]
,["$I_Abend", "integer", 10]
,["$I_Morgen", "integer", 0]
,["$I_Zeitverschiebung", "integer", 1200]
,["$M_Abend", "integer", 0]
,["$M_Morgen", "integer", 0]
,["$M_Output", "bool", false]
,["$M_Select", "integer", 0]
,["$O_Output", "integer", 0]
,["$ltime","integer", 0]
],
"Module": [
["Break", ["-$I_Freigabe"]] // Logik freigeben
// Subtraktion der Sonnen Untergangszeit
,["Polynomial", "$Const1", "$M_Abend",["$I_Abend", "-$I_Zeitverschiebung"]] //Sonnen Untergang Zeitpunkt abzüglich der Verschiebung
// Addition der Sonnen Aufgangszeit
,["Polynomial", "$Const1", "$M_Morgen",["$I_Morgen", "$I_Zeitverschiebung"]] //Sonnen Aufgang Zeitpunkt zuzüglich der Verschiebung
// Aktuelle Uhrzeit
,["Localtime",0,"$ltime","$s_curr","$m_curr","$h_curr",0,0,0,0,0,0],
// Wie lange noch bis Zeit von?
["Polynomial", "$Const1", "$SecondsTillFrom", ["$M_Morgen", "-$ltime"]],
["Comparator", "$Const1", "$SecondsTillFrom_GT_Zero", "$SecondsTillFrom"],
["Polynomial", "$SecondsTillFrom_GT_Zero", "$SecondsTillFrom", ["$SecondsTillFrom", "$Const86400"]],
// Wie lange noch bis Zeit bis?
["Polynomial", "$Const1", "$SecondsTillTo", ["$M_Abend", "-$ltime"]],
["Comparator", "$Const1", "$SecondsTillTo_GT_Zero", "$SecondsTillTo"],
["Polynomial", "$SecondsTillTo_GT_Zero", "$SecondsTillTo", ["$SecondsTillTo", "$Const86400"]],
// Was ist früher?
["Comparator", "$SecondsTillFrom" , "$From_GT_To" , "$SecondsTillTo" ],
["Multiplexer", ["$SecondsTillFrom", "$SecondsTillTo"],"$SecondsTillNext", "$From_GT_To"],
// Timer setzen
["Clocksignal","$ConstTRUE",0,"$SecondsTillNext"],
// Ergebniswert berechnen
["Comparator", "$M_Morgen" , "$CurrIsAfterFrom" , "$ltime" ],
["Comparator", "$M_Abend" , "$CurrIsAfterTo" , "$ltime" ],
["And", ["-$CurrIsAfterFrom", "$CurrIsAfterTo"], "$CurrIsInInterval"]
// Verarbeitung des Zeitfenster in Fahrbefehle
,["Latch","$Const1","$M_Select","-$CurrIsInInterval",1] // Bei steigender Flanke wird der selectore auf 1 gesetzt.
,["Latch","$Const2","$M_Select","$CurrIsInInterval",1] // Bei steigender Flanke wird der selectore auf 2 gesetzt.
,["Multiplexer",["$M_Output","$Const100","$Const0"],"$O_Output","$M_Select"] // In der Nacht wird 100 gesendet und am Tag 0%
]
}
Du kannst noch eine Zeitverschiebung angeben und die Logik komplett sperren.