Einschalten von Verbrauchern (boolean) in Abhängigkeit vom Sonnenstand (hier speziell Sonnenuntergang)
Beliebige Zeiträume vor/nach Sonnenuntergang auswählbar
Aktueller code erlaubt 5 verschiedene Zeitkorrekturen
Hier der code dazu:
Code: Alles auswählen
/**
* Schaltzeiten boolean in Abhängigkeit vom Sonnenstand
* Hier: Abends zum Sonnenuntergang (aus Astrobaustein)
* Korrekturwerte (plus/minus) in Sekunden
*/
{
"Level": [
["$Input","int",0],
["$Result1","bool",false],
["$Result2","bool",false],
["$Result3","bool",false],
["$Result4","bool",false],
["$Result5","bool",false],
["$Out1","int",0],
["$Out2","int",0],
["$Out3","int",0],
["$Out4","int",0],
["$Out5","int",0],
["$Korrektur1","int",0],
["$Korrektur2","int",0],
["$Korrektur3","int",0],
["$Korrektur4","int",0],
["$Korrektur5","int",0],
["$Formula","string","X1+X2"],
["$VAR<Inhibit?>","bool",false]
],
"Module": [
["Break",["$VAR<Inhibit?>"]],
["CalcFormula",["$Input","$Korrektur1"], "$Out1", "$Formula"],
["Wakeup","$Out1","$Result1"],
["SendExplicit","$Result1","$Result1",1],
["CalcFormula",["$Input","$Korrektur2"], "$Out2", "$Formula"],
["Wakeup","$Out2","$Result2"],
["SendExplicit","$Result2","$Result2",1],
["CalcFormula",["$Input","$Korrektur3"], "$Out3", "$Formula"],
["Wakeup","$Out3","$Result3"],
["SendExplicit","$Result3","$Result3",1],
["CalcFormula",["$Input","$Korrektur4"], "$Out4", "$Formula"],
["Wakeup","$Out4","$Result4"],
["SendExplicit","$Result4","$Result4",1],
["CalcFormula",["$Input","$Korrektur5"], "$Out5", "$Formula"],
["Wakeup","$Out5","$Result5"],
["SendExplicit","$Result5","$Result5",1]
],
"Input": [
["Korrektur1","Zeit in sec (positiv oder negativ)","$Korrektur1","u"],
["Korrektur2","Zeit in sec (positiv oder negativ)","$Korrektur2","u"],
["Korrektur3","Zeit in sec (positiv oder negativ)","$Korrektur3","u"],
["Korrektur4","Zeit in sec (positiv oder negativ)","$Korrektur4","u"],
["Korrektur5","Zeit in sec (positiv oder negativ)","$Korrektur5","u"],
["Sonnenuntergang","Unixtime aus Astrobaustein","$Input","ci"],
["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
],
"Output": [
["SCHALTEN1 EIN","Schaltzeit 1","$Result1","x"],
["SCHALTEN2 EIN","Schaltzeit 2","$Result2","x"],
["SCHALTEN3 EIN","Schaltzeit 3","$Result3","x"],
["SCHALTEN4 EIN","Schaltzeit 4","$Result4","x"],
["SCHALTEN5 EIN","Schaltzeit 5","$Result5","x"]
]
}
Der Eingang steht auf "ci", das heisst die Logik wird nur dann ausgeführt, wenn eine gültige Eingabe vorhanden ist. Durch das "c" wird die Logik bezüglich dieses Einganges nur 1x täglich "angestossen", da sich ja der Zeitpunkt des Sonnenunterganges nur mit Wechsel des Datums ändert.
Die Korrekturzeiten sind in Sekunden angegeben.
Beim Erreichen des ersten Zeitpunktes wird $Result1 true. Durch das nachfolgende sendexplicit wird nur das true an den Ausgang gesandt durch eine positive flanke von $Result1.
Wird der zweite Zeitpunkt erreicht wird $Result2 true. Hier selbes Verhalten wie oben beschrieben.
Allerdings wird auch das erste wakeup wieder ausgeführt (Problem siehe hier: viewtopic.php?f=103&t=4529#p58915).
Ist aber nicht von Belang, da $Result1 ja schon true war. Dadurch zieht das nachfolgende sendexplizit nicht -> kein Erneutes Aussenden an den Ausgang.
Selbiges passiert zu den übrigen Schaltpunkten. Schließlich sind alle $Result (1-5) true.
Mit Anbruch eines neuen Tages ändert sich $Input (die Zeit des Sonnenunterganges) -> die Logik wird neu gestartet und $Result1-5 werden wieder false.
Ich hoffe ich habe das verständlich erklärt.
Demnächst möchte ich ähnliches für das Ausschalten am morgen sowie auch für Verbraucher zusammenbauen, welche Prozentangaben erwarten (Jalousien).
Letztendlich eine Art abgespeckte Zeitschaltuhr für immer zur selben Zeit wiederkehrende Ereignisse.