Im folgenden möchte ich einen Baustein zum Schalten, der langen und kurzen Tastendruck auswertet/unterscheidet, mit euch teilen.
Aufgrund der performanten Logik-Engine des TWS funktioniert das Schalten tatsächlich verzögerungsfrei wie bei KNX Tastern, die lang/kurz intern auswerten können. Mein 230V Binäreingang konnte das nicht, jetzt kann er es !
Funktion:
- Der Taster muss auf "Sende 1 bei Betätigung, sende 0 beim Loslassen" parametriert sein.
- Abhängig von der Dauer der Betätigung der Taste wird Ausgang A oder B umgeschaltet.
- Das Umschalten erfolgt parametrierbar entweder vom Status eines Rückmeldeobjektes oder vom letzten Status des Ausgangs der Logik.
- Dauer für langen Tastendruck ist einstellbar, wie auch ein Timeout, falls kein Aus-Telegramm vom Taster kommt.
- Neu mit V1.0: Bei Timeout=0 wird direkt bei erreichen der langen Betätigungszeit geschaltet und nicht erst beim Loslassen.
- Eingang Taster: Hier wir die GA des Tasters verknüpft, der 1 bei Betätigung und 0 beim Loslassen sendet.
- Rückmeldeobjekt A/B:Hier kann für jeden Ausgang das Rückmeldeobjekt des Schaltaktors (nicht des Tasters!) verknüpft werden. Es wird dann vom letzten zurück gemeldeten Status umgeschaltet (==> Wichtig zb bei Zentral aus!)
- Enable Rückmeldung: Damit werden beide Rückmeldeeingänge berücksichtigt (einzeln nicht vorgesehen!). Bleibt dieser Eingang auf "false",
so wird das Ausgang intern auf den Eingang zurückgeführt - Dauer langer Tastendruck: Betätigungszeit, ab der ein langer Tastendruck ausgewertet wird und Objekt B umgeschaltet wird.
- Timeout langer Tastendruck: Zeit nach Empfang des "True" ab der "False" nicht mehr ausgewertet wird. zB Taster bleibt hängen und löst sich nach 2h => ignorieren. Mit Timeout = 0 wird der Timeout deaktiviert! Ab V1.0 wird bei Timeout=0 direkt bei Ablauf der Zeit für Betätigung lang geschaltet. Soll weiterhin erst bei Loslassen geschaltet werden, einfach einen ausreichend langen Timeout setzen.
- Ausgang Schalten A: Schaltobjekt, das bei kurzer Betätigung umgeschaltet wird.
- Ausgang Schalten B: Schaltobjekt, das bei langer Betätigung umgeschaltet wird.
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.
Falls wer einen freiwilligen Beitrag zur Motivation leisten will: Klick
lg
Robert
Neue Version V1.0
Code: Alles auswählen
/**===========================================================
Wertet den Tastendruck aus und schaltet abhäng von kurz/lang
den jeweiligen Ausgang um
V1.0: bei Timeout=0 wird direkt bei erreichen der Zeit für
lange Betätigung geschaltet
============================================================*/
{
"Level":[
// Eingänge
["$I_Taster","bool",false],
["$I_Rueckmeldung_A","bool",false],
["$I_Rueckmeldung_B","bool",false],
["$I_DauerKurzLang","float",0.0],
["$I_DauerTimeout","float",0.0],
["$I_EnableRueckmeldeobjekt","bool",false],
// Ausgänge
["$Ausgang_A","bool",false],
["$Ausgang_B","bool",false],
// interne Variablen
["$Ausgang_B1","bool",false],
["$Ausgang_B2","bool",false],
["$TimerTasterStatus","bool",false],
["$TasterTriggered","bool",false],
["$TasterLosgelassen_Kurz","bool",false],
["$TasterLosgelassen_Lang","bool",false],
["$TasterZeitErreicht_Lang","bool",false],
["$TimerTasterTimeout","bool",false],
["$TimerTasterTimeoutGes","bool",false],
["$TimerTasterTimeout0","bool",false],
["$KonstFalse","bool",false],
["$KonstTrue","bool",true],
["$Konst0","float",0.0],
["$temp_float","float",0.0]
],
"Module":[
// Taster hat Logik getriggert?
["Triggered", "$I_Taster", "$TasterTriggered"],
// Prüfen, ob Timeout einen Wert > 0 hat
["Limiter","$TimerTasterTimeout","$temp_float","$TimerTasterTimeout0",["$Konst0", "$Konst0"]],
// Timeout oder kein Timeout definiert
["Or",["$TimerTasterTimeout","$TimerTasterTimeout0"],"$TimerTasterTimeoutGes"],
// Auswertung der kurzen Betätigung: Timer noch nicht abgelaufen, Taster hat getriggert und ist losgelassen
["And" , ["$TimerTasterStatus","$TasterTriggered","-$I_Taster"],"$TasterLosgelassen_Kurz"],
// Auswertung der langen Betätigung beim Loslassen: Timer abgelaufen, Taster hat getriggert und ist losgelassen
["And" , ["-$TimerTasterStatus","$TasterTriggered","-$I_Taster","$TimerTasterTimeoutGes"],"$TasterLosgelassen_Lang"],
// Auswertung ob langen Betätigungszeit erreicht: Taster hat nicht getriggert und ist noch gedrückt, Timer noch aktiv, da noch nicht ausgewertet.
["And" , ["$TimerTasterStatus","-$TasterTriggered","$I_Taster","$TimerTasterTimeoutGes"],"$TasterZeitErreicht_Lang"],
// Ausgang A umschalten, wenn Taster vor erreichen der Betätigungszeit lang losgelassen wird.
["Multiplexer",["$Ausgang_A","-$I_Rueckmeldung_A"],"$Ausgang_A","$TasterLosgelassen_Kurz"],
// Ausgang B umschalten - 2 Varianten: beim Loslassen (und Zet lang erreicht) oder unmittelbar bei Erreichen der Betätigungszeit lang
["Multiplexer",["$Ausgang_B","-$I_Rueckmeldung_B"],"$Ausgang_B1","$TasterLosgelassen_Lang"],
["Multiplexer",["$Ausgang_B","-$I_Rueckmeldung_B"],"$Ausgang_B2","$TasterZeitErreicht_Lang"],
// Bei Timeout=0 Ausgang bereits bei Ablauf der langen Betätigungszeit schalten
["Multiplexer",["$Ausgang_B1","$Ausgang_B2"],"$Ausgang_B","$TimerTasterTimeout0"],
//
["SendExplicit","$TasterLosgelassen_Kurz","$Ausgang_A",0],
["SendExplicit","$TasterLosgelassen_Lang","$Ausgang_B",0],
["SendExplicit","$TasterZeitErreicht_Lang","$Ausgang_B",0],
// Ausgang auf Rückmeldung schreiben, wenn nicht Rückmeldung nicht aktiv
["Latch","$Ausgang_A","$I_Rueckmeldung_A","-$I_EnableRueckmeldeobjekt",0],
["Latch","$Ausgang_B","$I_Rueckmeldung_B","-$I_EnableRueckmeldeobjekt",0],
// Timer bei steigender Flange starten
["Monoflop","$I_Taster","-$I_Taster","$TimerTasterStatus","$I_DauerKurzLang",2],
["Monoflop","$I_Taster","-$I_Taster","$TimerTasterTimeout","$I_DauerTimeout",2]
],
"Input":[
["Eingang Taster","Winter bei Winter=true","$I_Taster","c"],
["Rückmeldeobjekt A","Rückmeldeobjekt für kurzen Tastendruck ","$I_Rueckmeldung_A","u"],
["Rückmeldeobjekt B","Rückmeldeobjekt für langen Tastendruck","$I_Rueckmeldung_B","u"],
["Enable Rückmeldung","Rückmeldeobjekt damit vom tatsächlichen Status umgeschaltet wird","$I_EnableRueckmeldeobjekt","c"],
["Dauer langer Tastendruck","Mindestdauer für langen Tastendruck","$I_DauerKurzLang","c"],
["Timeout langer Tastendruck","Timeout langer Tastendruck","$I_DauerTimeout","c"]
],
"Output":[
["Ausgang Schalten A","Schaltobjekt für Objekt A","$Ausgang_A","x"],
["Ausgang Schalten B","Schaltobjekt für Objekt B","$Ausgang_B","x"]
//["Debug Val_Small","","$Val_Small","a"]
]
}
/**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.*/
Code: Alles auswählen
/**===========================================================
Wertet den Tastendruck aus und schaltet abhäng von kurz/lang
den jeweiligen Ausgang um
V0.0: Es wird jeweils beim Loslassen geschaltet.
============================================================*/
{
"Level":[
// Eingänge
["$I_Taster","bool",false],
["$I_Rueckmeldung_A","bool",false],
["$I_Rueckmeldung_B","bool",false],
["$I_DauerKurzLang","float",0.0],
["$I_DauerTimeout","float",0.0],
["$I_EnableRueckmeldeobjekt","bool",false],
// Ausgänge
["$Ausgang_A","bool",false],
["$Ausgang_B","bool",false],
// interne Variablen
["$TimerTasterStatus","bool",false],
["$TasterTriggered","bool",false],
["$TasterLosgelassen_Kurz","bool",false],
["$TasterLosgelassen_Lang","bool",false],
["$TimerTasterTimeout","bool",false],
["$TimerTasterTimeoutGes","bool",false],
["$TimerTasterTimeout0","bool",false],
["$KonstFalse","bool",false],
["$KonstTrue","bool",true],
["$Konst0","float",0.0],
["$temp_float","float",0.0]
],
"Module":[
// Taster hat getriggert?
["Triggered", "$I_Taster", "$TasterTriggered"],
//
["Limiter","$TimerTasterTimeout","$temp_float","$TimerTasterTimeout0",["$Konst0", "$Konst0"]],
["Or",["$TimerTasterTimeout","$TimerTasterTimeout0"],"$TimerTasterTimeoutGes"],
["And" , ["$TimerTasterStatus","$TasterTriggered","-$I_Taster"],"$TasterLosgelassen_Kurz"],
["And" , ["-$TimerTasterStatus","$TasterTriggered","-$I_Taster","$TimerTasterTimeoutGes"],"$TasterLosgelassen_Lang"],
["Multiplexer",["$Ausgang_A","-$I_Rueckmeldung_A"],"$Ausgang_A","$TasterLosgelassen_Kurz"],
["Multiplexer",["$Ausgang_B","-$I_Rueckmeldung_B"],"$Ausgang_B","$TasterLosgelassen_Lang"],
["SendExplicit","$TasterLosgelassen_Kurz","$Ausgang_A",0],
["SendExplicit","$TasterLosgelassen_Lang","$Ausgang_B",0],
// Ausgang auf Rückmeldung schreiben, wenn nicht Rückmeldung nicht aktiv
["Latch","$Ausgang_A","$I_Rueckmeldung_A","-$I_EnableRueckmeldeobjekt",0],
["Latch","$Ausgang_B","$I_Rueckmeldung_B","-$I_EnableRueckmeldeobjekt",0],
// Timer bei steigender Flange starten
["Monoflop","$I_Taster","-$I_Taster","$TimerTasterStatus","$I_DauerKurzLang",2],
["Monoflop","$I_Taster","-$I_Taster","$TimerTasterTimeout","$I_DauerTimeout",2]
],
"Input":[
["Eingang Taster","Winter bei Winter=true","$I_Taster","c"],
["Rückmeldeobjekt A","Rückmeldeobjekt für kurzen Tastendruck ","$I_Rueckmeldung_A","c"],
["Rückmeldeobjekt B","Rückmeldeobjekt für langen Tastendruck","$I_Rueckmeldung_B","c"],
["Enable Rückmeldung","Rückmeldeobjekt damit vom tatsächlichen Status umgeschaltet wird","$I_EnableRueckmeldeobjekt","c"],
["Dauer langer Tastendruck","Mindestdauer für langen Tastendruck","$I_DauerKurzLang","c"],
["Timeout langer Tastendruck","Timeout langer Tastendruck","$I_DauerTimeout","c"]
],
"Output":[
["Ausgang Schalten A","Schaltobjekt für Objekt A","$Ausgang_A","x"],
["Ausgang Schalten B","Schaltobjekt für Objekt B","$Ausgang_B","x"]
//["Debug Val_Small","","$Val_Small","a"]
]
}
/**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.*/