Ich habe für meinen neuen Schuppen folgende Lichtschaltsteuerung implementiert.
Danke für die Hinweise von ostfriese. Auf Grund seiner Hinweise liegt das Skript nun komplett vor.
Anforderungen
Eine Lampe soll per Bewegungsmelder eingeschaltet werden, wenn die Lampe aus ist.
Der Bewegungsmelder soll per HTTP mit einem Shelly Plus 1 kommunizieren und dabei die Einschaltdauer per GET liefern.
Sobald per Schalter/Taster am Plus 1 Eingang die Lampe eingeschaltet wird, soll die Einschaltdauer deaktiviert werden, damit die Lampe eingeschaltet bleibt.
Dies löste ich mit Hilfe eines Shelly Motion (Gen. 1), einem Shelly Plus 1 und einem kleinen Skript auf dem Plus 1.
Das Skript:
let on = null; // output status
let th = null; // timer handle
function send_response(response, body) {
response.code = 200;
response.body = body;
response.send();
}
HTTPServer.registerEndpoint('on',
function (request, response) {
send_response(response, "OK");
if (on!==true) {
Shelly.call("Switch.set", {'id': 0, 'on': true});
if (request.query.length > 0) {
let dur = JSON.parse(request.query);
print(dur);
if(!isNaN(dur) && dur>0) {
th = Timer.set(Math.floor(1000*dur), false,
function () {
Shelly.call("Switch.set", {'id': 0, 'on': false});
}
);
}
}
}
}
);
Shelly.addEventHandler(function(e) {
on = e.info.state;
if (e.component==="input:0") {
Timer.clear(th);
}
});
Alles anzeigen
Auf dem Bewegungsmelder wird folgende Action konfiguriert:
Als Skript Id kommt typischerweise die 1 zum Zuge, falls auf dem Shelly kein anderes Skript abgelegt wurde.
Dies ist im Zweifelsfalle zu prüfen.
Es sind als Einschaltdauer auch Werte mit Nachkommastellen möglich.
Wenn in der Action des Motion die Einschaltdauer fehlt, bleibt die Lampe eingeschaltet.
Anwendungsfälle
- Jemand geht in den Schuppen, bspw. um ein Fahrrad zu holen.
Die Lampe wird per Bewegungsmelder eingeschaltet und nach einer festgelegten Dauer automatisch ausgeschaltet. - Jemand geht in den Schuppen, um sich dort länger aufzuhalten.
Er schaltet die Lampe per Schalter ein (auch falls sie vom Bewegungsmelder eingeschaltet wurde).
Die Lampe bleibt eingeschaltet, bis sie per Schalter ausgeschaltet wird.
Vielleicht kann dies für andere nützlich sein.