NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[NEUHEIT] Zu bestimmten Zeitpunkten langsam dimmen

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 284 Mal
Danksagung erhalten: 195 Mal

Zu bestimmten Zeitpunkten langsam dimmen

#1

Beitrag 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.
Zuletzt geändert von Matze76 am Do Dez 26, 2019 9:42 pm, insgesamt 1-mal geändert.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 284 Mal
Danksagung erhalten: 195 Mal

#2

Beitrag 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
Zuletzt geändert von Matze76 am Do Dez 26, 2019 10:13 pm, insgesamt 1-mal geändert.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache
Antworten

Zurück zu „Zusätzliche Logikbausteine“