Ich habe ein möglichst einfach verwendbares Skript erstellt. Dieses stellt zwei sog. HTTP Endpoints zur Verfügung.
- Zum öffnen des Tors per Impulsausgabe, wenn der "Geschlossen-Sensor" dies signalisiert.
- Zum schließen des Tors per Impulsausgabe, wenn der "Offen-Sensor" dies signalisiert.
Ich konnte mangels zweier Sensoren nicht alles testen. Es sollte aber wie gewünscht funktionieren, wenn ich die Wirkung der Impulsausgabe richtig interpretierte (s. #5).
Wenn du das Skript bei geöffnetem Editierfenster startest, erhältst du zwei Sekunden danach im Protokollfenster zwei Ausgaben, etwa so:
open URL: http://172.16.8.1/script/1/open
close URL: http://172.16.8.1/script/1/close
Deine IP Adressen sind anders zu erwarten und die Skript Id (hier 1) kann anders sein, wenn du noch andere Skripte auf dem Shelly Plus 1 gespeichert hast.
Hier das Skript. Kopiere es per Kopier-Symbol oben rechts und nicht etwa per markieren ...!
let Response = {
did : "erledigt",
didnt: "nicht erledigt"
},
Component = { // Components zu beiden Magnetschaltern
opened: "input:100",
closed: "input:101"
},
Duration = 0.5; // Impulsdauer in Sekunden
function impulseOut(dur) {
Shelly.call("Switch.Set", {id:0, on:true, toggle_after: dur});
}
function sendResponse(response, body) {
response.code = 200;
response.headers = [["Content-Type", "text/html"]];
response.body = body;
response.send();
}
function openGate(request,response) {
let closed = Shelly.getComponentStatus(Component.closed);
let doit = closed!==null && closed.state;
if(doit) impulseOut(Duration);
sendResponse(response, (doit ? Response.did : Response.didnt));
}
function closeGate(request,response) {
let opened = Shelly.getComponentStatus(Component.opened);
let doit = opened!==null && opened.state;
if(doit) impulseOut(Duration);
sendResponse(response, (doit ? Response.did : Response.didnt));
}
let openUrl = null, closeUrl = null,
localIP = Shelly.getComponentStatus('wifi').sta_ip;
Timer.set(2000,false,
function(){
openUrl = 'http://'+localIP + HTTPServer.registerEndpoint('open', openGate);
closeUrl = 'http://'+localIP + HTTPServer.registerEndpoint('close', closeGate);
print("open URL: " + openUrl);
print("close URL: " + closeUrl);
}
);
Alles anzeigen
Bei Fragen stehe ich selbstverständlich zur Verfügung.
Edit:
Per open URL kannst du das Tor öffnen lassen wollen, per close URL schließen lassen wollen. Es wird aber nur dann geöffnet, wenn es geschlossen ist und umgekehrt.