VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
-
Vielen Dank für die schnelle Hilfe. Ich habe mir das Skript entsprechend angepasst und es funktioniert soweit wie gewünscht. Beim Schalter habe ich nun wieder die Actions aktiviert, die entweder die URL http://admin:password@192.168.7.210/script/1/sirenen?alarm oder http://admin:password@192.168.7.210/script/1/sirenen?entwarnung aufruft. Jetzt kann der Alarm über den Schalter oder das Web gestartet werden.
function log(to_log) {
console.log(to_log);
}
function send_response(response, body) {
response.code = 200;
response.body = body;
response.send();
log(body);
}
function SirenenEin() {
Shelly.call("HTTP.get",{url: 'http://admin:123456@localhost/relay/0?turn=on&timer=12'}); //Relais 1 über http sofort einschalten und nach 12 Sekunden ausschalten
Shelly.call("HTTP.get",{url: 'http://admin:123456@192.168.7.211/relay/0?turn=on&timer=12'}); //Relais 2 über http sofort einschalten und nach 12 Sekunden ausschalten
}
function watch(request,response) {
what = request.query;
print(what);
if(what === 'alarm') {
//do something; //Alles, was bei Alarm passieren soll
Shelly.call("HTTP.get",{url: 'http://admin:123456@localhost/relay/0?turn=on&timer=12'}); //Relais 1 über http sofort einschalten und nach 12 Sekunden ausschalten
Shelly.call("HTTP.get",{url: 'http://admin:123456@192.168.7.211/relay/0?turn=on&timer=12'}); //Relais 2 über http sofort einschalten und nach 12 Sekunden ausschalten
Timer.set(24000, false, SirenenEin) //Relais 1 und Relais 2 über http nach 24 Sekunden einschalten
Timer.set(48000, false, SirenenEin) //Relais 1 und Relais 2 über http nach 48 Sekunden einschalten
what_done = 'Alarm wird ausgesendet'
}
if(what === 'entwarnung') {
//do something else; //Alles, was bei Alarm_aus passieren soll
Shelly.call("HTTP.get",{url: 'http://admin:123456@localhost/relay/0?turn=on&timer=60'}); //Relais 1 über http einschalten und nach 60 Sekunden ausschalten
Shelly.call("HTTP.get",{url: 'http://admin:123456@192.168.7.211/relay/0?turn=on&timer=60'}); //Relais 2 über http einschalten und nach 60 Sekunden ausschalten
what_done = 'Entwarung wird ausgesendet'
}
body = what_done;
send_response(response, body);
}
HTTPServer.registerEndpoint('sirenen',watch);
script_id = Shelly.getCurrentScriptId();
own_ip = '192.168.7.210'
log('Die möglichen URLs sind:');
log('http://admin:password@' + own_ip + '/script/' + script_id + '/sirenen?alarm');
log('http://admin:password@' + own_ip + '/script/' + script_id + '/sirenen?entwarnung');
Alles anzeigen
-
Weil du das Event vom Input, da ist ja der lokale Schalter angeschlossen, zum triggern nimmst.
Versuche mal, das auf den Output umzubauen. Den kannst du ja auch, im Gegensatz zum Input, mit der App schalten.
Der Output ändert sich allerdings ständig durch mein Skript und dann kommt es zu Fehlfunktionen oder ich verstehe gerade die Logik dahinter nicht. Ich könnte mir vorstellen mit einem weiteren Relais den Eingang vom Shelly Pro 1 über die App zu steuern, parallel zum Schalter mit einem Shelly Pro 2.
Wie würde das mit einem http-Endpoint aussehen?
-
Ich habe die Tage herumprobiert und ein Skript erstellt mit zwei Shelly Pro 1 und zwei Sirenen sowie einem Schalter an dem ersten Shelly Pro 1 angeschlossen. Das folgende Skript läuft auf dem ersten Shelly Pro 1:
function SirenenEin() {
Shelly.call("Switch.set", {'id': 0, 'on': true, 'toggle_after': 12}); //Relais 1 lokal sofort einschalten und nach 12 Sekunden ausschalten
Shelly.call("HTTP.get",{url: 'http://admin:123456@192.168.7.211/relay/0?turn=on&timer=12'}); //Relais 2 über WebHook sofort einschalten und nach 12 Sekunden ausschalten
}
Shelly.addStatusHandler(function(e) {
if (e.component === "input:0") {
if (e.delta.state === true) { //wenn lokaler Schalter eingeschaltet ist dann Alarm mit dreimal in der Höhe gleich bleibender Ton (Dauerton) von je 12 Sekunden, mit je 12 Sekunden Pause zwischen den Tönen.
Shelly.call("Switch.set", {'id': 0, 'on': true, 'toggle_after': 12}); //Relais 1 lokal sofort einschalten und nach 12 Sekunden ausschalten
Shelly.call("HTTP.get",{url: 'http://admin:123456@192.168.7.211/relay/0?turn=on&timer=12'}); //Relais 2 über WebHook sofort einschalten und nach 12 Sekunden ausschalten
Timer.set(24000, false, SirenenEin) //Relais 1 lokal und Relais 2 über WebHook nach 24 Sekunden einschalten
Timer.set(48000, false, SirenenEin) //Relais 1 lokal und Relais 2 über WebHook nach 48 Sekunden einschalten
print("Ein Alarm wird eine Minute lang mit Pausen signalisiert");
}
else if (e.delta.state === false) { //wenn lokaler Schalter ausgeschaltet ist dann Entwarnung einmal Dauerton für eine Minute
Shelly.call("Switch.set", {'id': 0, 'on': true, 'toggle_after': 60}); //Relais 1 lokal einschalten und nach 60 Sekunden ausschalten
Shelly.call("HTTP.get",{url: 'http://admin:123456@192.168.7.211/relay/0?turn=on&timer=60'}); //Relais 2 über WebHook einschalten und nach 60 Sekunden ausschalten
print("Entwarnung wird eine Minute lang als Dauerton signalisiert");
}
}
});
Alles anzeigen
Das funktioniert soweit erst mal gut aber nur mit dem lokalen Schalter zum Aktivieren der Sirenen. Wenn ich die Sirenen mit den Funktionen von diesem Skript über die Shelly App aktivieren möchte, funktioniert das leider nicht. Vielleicht kann jemand weiterhelfen?
Liebe Grüße
Sebastian
-
Guten Tag,
ich bin neu in der Shelly Skript Welt und habe eine Frage für unseren geplanten Aufbau. Vielleicht kann mir jemand weiterhelfen?
Wir haben vier Shelly Pro 1 mit dem Netzwerk verbunden. Ein Shelly Pro 1 ist mit einem lokalen Schalter verbunden, um einen Alarm auslösen zu können. An jedem Shelly Pro 1 hängt eine Sirene, welche einen Dauerton erzeugt, sobald Strom anliegt.
Das Ziel ist nun ein Skript zu schreiben, um bei Aktivierung des Schalters die Sirene für die Dauer von einer Minute einzuschalten. In dieser Minute soll die Sirene allerdings in einem Intervall von 10 Sekunden eingeschaltet und 10 Sekunden ausgeschaltet sein, solange bis die eine Minute vorbei ist und dann komplett aus.
Beim Deaktivieren des Schalters soll eine Entwarnung erfolgen, sprich die Sirene soll nun dauerhaft für eine Minute eingeschaltet sein. Die anderen drei Shelly Pro 1 sollten Zeitgleich über das Netzwerk aktiviert und deaktiviert werden. Hat hier jemand eine Idee für ein Skript?
Momentan habe ich nur zwei Aktionen erstellt. Die erste Aktion aktiviert bei eingeschalteten Schalter das lokale Relais und über Netzwerk die anderen drei. Die zweite Aktion deaktiviert bei ausgeschalteten Schalter das lokale Relais und über Netzwerk die anderen drei. Leider bekomme ich mit den Aktionen die oben beschriebene Funktion nicht realisiert und denke aber das dies durch ein entsprechendes Skript lösbar sein müsste. Vielen Dank!
Liebe Grüße
Sebastian