Seite 1 von 1

Zu bestimmten Zeitpunkten langsam dimmen

Verfasst: Do Dez 26, 2019 9:42 pm
von Matze76
Hallo zusammen,

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"]
    ]
}
Nachdem man die konstanten Eingänge zu Parametern gemacht und den Cron-Trigger hinzugefügt hat, sollte das ganze etwa so aussehen:

Bild

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"]
    ]
}
Konfiguration wie unter 1.)
Zum Herunterdimmen muss der Startwert natürlich größer sein als der Endwert.

Re: Zu bestimmten Zeitpunkten langsam dimmen

Verfasst: Do Dez 26, 2019 10:03 pm
von Matze76
Zunächst nur für das Herunterdimmen habe ich noch diese Variante gebaut:

Use-Case:
Die Dimmsequenz soll nicht mit einem Festwert, sondern mit dem jeweils aktuellen Dimmwert gestartet werden.

Dazu muss der Code etwas anders aussehen (in den o.g. Beispielen wird schon am Ende der letzten Sequenz der feste Startwert für die nächste Sequenz festgelegt).

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],               // Wird die Logik getriggert, wird $Active an $Run übergeben und die Sequenz gestartet
        ["Latch","$ValStart","$ValNext","$Run",1],          // Bei steigender Flanke von $Run (Sequenz gestartet), setze $ValNext auf aktuellen Eingangswert (Startwert)
         
        ["Multiplexer",["$ValNext"],"$ValCurrent",0],       // $ValNext wird an $ValCurrent (=> Ausgang) gegeben
        ["Polynomial","$KonstEins","$ValNext",["$ValCurrent","$ValStep"]], // $ValNext = $ValCurrent + ($ValStep * -1)
        
        ["Comparator","-$ValNext","-$Run","-$ValEnd"],        // Run solange nächster Wert nicht kleiner als Endwert
        ["Latch","$ValEnd","$ValCurrent","$Run",2],           // Wenn Run gestoppt wird (fallende Flanke), setze $ValCurrent auf den eingestellten Endwert ($ValEnd)
        
        ["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 Einstellungen entsprechen den im ersten Beitrag genannten Beispielen, außer dass der Eingang "Start" nicht mit einem konstanten Parameter belegt wird, sondern mit einem Eingangsobjekt verbunden wird (z. B. dem Statusobjekt "aktueller Dimmwert" der zu dimmenden Beleuchtung).

Wichtig: Der Eingang "Start" darf die Logik nicht triggern, d.h. er muss auf "U" (Update) bleiben.

Da man je nach Schrittweite aufgrund des dynamischen Startwerts am Ende der Sequenz nicht unbedingt genau auf dem Endwert landet, habe ich noch eine Zeile ergänzt, die den Dimmwert am Ende genau auf den eingestellten Endwert setzt.

Einstellungs-Beispiel:

Um 22:15 Uhr wird die Dimmsequenz gestartet und vom dann anliegenden Dimmwert bis auf 0 heruntergedimmt (alle 3 Sekunden 1 Prozentpunkt)

Bild