Code: Alles auswählen
/**
* 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.
*
* 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": [
["Stunde von","Stunde von", "$h_from", "c"],
["Minute von","Minute von", "$m_from", "c"],
//["Sekunde von","Sekunde von", "$s_from", "c"],
["Stunde bis","Stunde bis", "$h_to", "c"],
["Minute bis","Minute bis", "$m_to", "c"],
//["Sekunde bis","Sekunde bis", "$s_to", "c"],
["Zyklischer Sendeinterval", "optionaler Sendetakt in Sekunden, 0 = deaktiv Ausgang wird nur bei Änderung gesendet, bei Wert > 0 wird der Ausgang zyklisch entrechend gesendet","$interval","c"]
],
"Output": [
["Zeitfenster aktiv","Aktuelle Zeit ist im Zeitfenster", "$CurrIsInInterval", "t"]
],
"Level": [
["$ltime","integer", 0],
["$h_from","integer", 0],
["$m_from","integer", 0],
["$s_from","integer", 0],
["$h_to","integer", 0],
["$m_to","integer", 0],
["$s_to","integer", 0],
["$h_curr","integer", 0],
["$m_curr","integer", 0],
["$s_curr","integer", 0],
["$TimeFrom","integer",0],
["$TimeTo","integer",0],
["$TimeCurrent","integer",0],
["$CurrIsAfterFrom","bool", false],
["$CurrIsAfterTo","bool", false],
["$CurrIsInInterval","bool", false],
["$Const1","integer",1],
["$Const60","integer",60],
["$Const86400", "integer", 86400],
["$Period","integer",60],
["$ConstTRUE","bool", true],
["$SecondsTillFrom","integer",0],
["$SecondsTillTo","integer",0],
["$SecondsTillNext","integer",1],
["$SecondsTillFrom_GT_Zero", "bool", false],
["$SecondsTillTo_GT_Zero", "bool", false],
["$From_GT_To", "bool", false],
["$interval", "integer", 0]
],
"Module": [
// Aktuelle Uhrzeit
["Localtime",0,"$ltime","$s_curr","$m_curr","$h_curr",0,0,0,0,0,0],
["Polynomial", "$Const60", "$TimeCurrent", ["$s_curr","$m_curr","$h_curr"]],
// Zeit Von in Sekunden
["Polynomial", "$Const60", "$TimeFrom", ["$s_from","$m_from","$h_from"]],
// Zeit Bis in Sekunden
["Polynomial", "$Const60", "$TimeTo", ["$s_to","$m_to","$h_to"]],
// Wie lange noch bis Zeit von?
["Polynomial", "$Const1", "$SecondsTillFrom", ["$TimeFrom", "-$TimeCurrent"]],
["Comparator", "$Const1", "$SecondsTillFrom_GT_Zero", "$SecondsTillFrom"],
["Polynomial", "$SecondsTillFrom_GT_Zero", "$SecondsTillFrom", ["$SecondsTillFrom", "$Const86400"]],
// Wie lange noch bis Zeit bis?
["Polynomial", "$Const1", "$SecondsTillTo", ["$TimeTo", "-$TimeCurrent"]],
["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"],
// zyklischer Sendetimer
["Clocksignal","$ConstTRUE",0,"$interval"],
// Ergebniswert berechnen
["Comparator", "$TimeFrom" , "$CurrIsAfterFrom" , "$TimeCurrent" ],
["Comparator", "$TimeTo" , "$CurrIsAfterTo" , "$TimeCurrent" ],
["And", ["-$CurrIsAfterFrom", "$CurrIsAfterTo"], "$CurrIsInInterval"]
]
}