hier eine Sammlung von Custom-Logiken zum Thema "langsam Dimmen" (entstanden aus diesem Beitrag: viewtopic.php?f=24&t=1752#p18432 )
1.) Zu einem bestimmten Zeitpunkt langsam hochdimmen (von S. Kolbinger)
Code: Alles auswählen
{
"Level": [
["$ValStart","float",0.0],
["$ValEnd","float",100.0],
["$ValStep","float",5.0],
["$ValCurrent","float",0.0],
["$ValNext","float",0.0],
["$Active","bool",false],
["$Run","bool",false],
["$TimeStep","float",1.5],
["$Period","float",0.0],
["$KonstEins","float",1.0]
],
"Module": [
["Multiplexer",["$Active"],"$Run",0],
["Multiplexer",["$ValNext"],"$ValCurrent",0],
["Polynomial","$KonstEins","$ValNext",["$ValStep","$ValCurrent"]],
["Comparator","$ValNext","-$Run","$ValEnd"], // Run sollange nächster Wert nicht größer als Endwert
["Latch","$ValStart","$ValNext","-$Active",0], // Falls deaktiviert => Rücksetzen auf Startwert
["Latch","$ValStart","$ValNext","$Run",2], // Rücksetzen auf Startwert, bei fallender Flanke von $Run
["Multiplexer",[0,"$TimeStep"],"$Period","$Run"], // $Period == 0, stoppt den Timer
["Clocksignal","$Active",0,"$Period"] // Timer für nächsten Schritt
],
"Input": [
["Aktiv","Aktiviere/Deaktivier Dimmer","$Active","u"],
["Start","Start-Wert","$ValStart","u"],
["Ende","End-Wert","$ValEnd","u"],
["Step","Schrittweite","$ValStep","u"],
["Intervall","Zeit [s] zwischen zwei Werten","$TimeStep","u"]
],
"Output": [
["Dimmwert","Aktueller Dimmwert","$ValCurrent","c"]
]
}
Die Parameter sind: Start- und Endwert des Dimmvorgangs, die Schrittweite und die Schrittdauer (in Sekunden).
Der Eingang "Aktiv" muss true sein, wenn der Cron-Timer feuert, damit der Dimmvorgang gestartet wird.
Wird der "Aktiv"-Eingang während des Dimmvorgangs false, wird der Dimmvorgang abgebrochen und der Ausgang bleibt auf dem letzten Wert stehen.
2.) Zu einem bestimmten Zeitpunkt langsam herunterdimmen (Abwandlung von mir zu 1.)
Code: Alles auswählen
{
"Level": [
["$ValStart","float",100.0],
["$ValEnd","float",0.0],
["$ValStep","float",5.0],
["$ValCurrent","float",100.0],
["$ValNext","float",100.0],
["$Active","bool",false],
["$Run","bool",false],
["$TimeStep","float",1.5],
["$Period","float",0.0],
["$KonstEins","float",-1.0]
],
"Module": [
["Multiplexer",["$Active"],"$Run",0],
["Multiplexer",["$ValNext"],"$ValCurrent",0],
["Polynomial","$KonstEins","$ValNext",["$ValCurrent","$ValStep"]], // $ValNext = $ValCurrent + ($ValStep * -1)
["Comparator","$ValEnd","-$Run","$ValNext"], // Run solange nächster Wert nicht kleiner als Endwert
["Latch","$ValStart","$ValNext","-$Active",0], // Falls deaktiviert => Rücksetzen auf Startwert (100).
["Latch","$ValStart","$ValNext","$Run",2], // Rücksetzen auf Startwert, bei fallender Flanke von $Run (100)
["Multiplexer",[0,"$TimeStep"],"$Period","$Run"], // $Period == 0, stoppt den Timer
["Clocksignal","$Active",0,"$Period"] // Timer für nächsten Schritt
],
"Input": [
["Aktiv","Aktiviere/Deaktivier Dimmer","$Active","u"],
["Start","Start-Wert","$ValStart","u"],
["Ende","End-Wert","$ValEnd","u"],
["Step","Schrittweite","$ValStep","u"],
["Intervall","Zeit [s] zwischen zwei Werten","$TimeStep","u"]
],
"Output": [
["Dimmwert","Aktueller Dimmwert","$ValCurrent","c"]
]
}
Zum Herunterdimmen muss der Startwert natürlich größer sein als der Endwert.