Das ist ein Aus- oder Ein-Schaltverzögerungs Skript, mann kann bei delay die Verzögerung in Sekunden eintragen und unter invDelayModus kann man auswählen ob Aus- oder Ein-Schaltverzögerung.
false = Ausschaltverzögerung / true = Einschaltverzögerung
Da Aktions oder Webhooks nicht bei eingestellten Passwort funktionieren, könnte das Skript dem ein oder anderen weiter helfen.
(Achtung, das ganze geht nur mit einem Schalter für einen Taster müsste man einfach mein Taster Event Skript etwas anpassen)
Code
let delay = 5; //Verzögerung in Sekunden.
let invDelayModus = false; // false = Ausschaltverzögerung true = Einschaltverzögerung
let cID = 0; //Shelly Channel ID/Relay/Input
let cMode = "detached"; //Shelly Channel/Relay Modus "detached"/"flip"/"momentary"/"follow"
let cType = "switch"; //Shelly Channel/Input Typ, "button"/"switch"
let status = Shelly.getComponentStatus("switch:"+JSON.stringify(cID)).output, t1 = null;
//Prüfen der Input/Output Einstellung
if(Shelly.getComponentConfig("switch:"+JSON.stringify(cID)).initial_state === "match_input"){Shelly.call("Switch.SetConfig",{id: cID,config: {initial_state: "restore_last"}});print("Invalid inital_state!, changed switch:id", cID, " inital_state to restore_last");}
if(Shelly.getComponentConfig("switch:"+JSON.stringify(cID)).in_mode !== cMode){Shelly.call("Switch.SetConfig",{id: cID,config: {in_mode: cMode}});print("Invalid Output Mode!, changed switch:id", cID, " in_mode to ", cMode);}
if(Shelly.getComponentConfig("input:"+JSON.stringify(cID)).type !== cType){Shelly.call("Input.SetConfig",{id: cID,config: {type: cType}});print("Invalid input type!, changed input:id", cID, " type to", cType);}
//Skript Timer Logik
function Timer1(){Shelly.call("Switch.Set",{id: cID, on: invDelayModus});}
//Skript Main Logik
function Check(event){
if((event.info.state === true && event.info.id === cID && event.info.component === "switch:"+JSON.stringify(cID)) || (event.info.state === false && event.info.id === cID && event.info.component === "switch:"+JSON.stringify(cID))){
status = event.info.state;
}
if((event.info.state === true && event.info.id === cID && event.info.component === "input:"+JSON.stringify(cID)) || (event.info.state === false && event.info.id === cID && event.info.component === "input:"+JSON.stringify(cID))){
if(status === invDelayModus){
Timer.clear(t1);
Shelly.call("Switch.Toggle",{id: cID});
}
if(status === !invDelayModus){
Timer.clear(t1);
t1 = Timer.set(1000*delay,false,Timer1);
}
}
return true;
}
//Skript Trigger
Shelly.addEventHandler(Check);
Alles anzeigen
Das Skript steht unter der "mir völlig egal, was ihr damit macht" Lizenz auch bekannt als MIT-Lizenz, habt Spaß damit!