Überblick
Der Shelly Plus 1 kann lokal per Script gesteuert werden. Die Scripts laufen direkt auf dem Gerät
und nutzen eine JavaScript-ähnliche Sprache. Typische Komponenten sind input:0 für den Eingang
und switch:0 für den Relaisausgang.
1. Script starten
In der Weboberfläche des Shelly:
http://IP-DES-SHELLY
Dann:
Scripts → Create Script → Code einfügen → Save → Start
2. Einfacher Funktionstest
Dieses Script prüft, ob die Script-Umgebung läuft und gibt Geräteinformationen in der Console aus.
// Shelly Plus 1 - einfacher Test
console.log("Script gestartet");
let info = Shelly.getDeviceInfo();
console.log("Gerät:", info.app);
console.log("Firmware:", info.ver);
3. Relais einschalten und ausschalten
Der Shelly Plus 1 besitzt einen Relaisausgang. Dieser hat die ID 0.
Relais einschalten
// Relais einschalten
Shelly.call("Switch.Set", {
id: 0,
on: true
});
Relais ausschalten
// Relais ausschalten
Shelly.call("Switch.Set", {
id: 0,
on: false
});
4. Relais für 5 Sekunden einschalten
Das Relais wird eingeschaltet und nach 5 Sekunden automatisch wieder ausgeschaltet.
// Relais 5 Sekunden einschalten, dann automatisch aus
Shelly.call("Switch.Set", {
id: 0,
on: true
});
Timer.set(5000, false, function () {
Shelly.call("Switch.Set", {
id: 0,
on: false
});
});
Timer.set(5000, false, ...) bedeutet: nach 5000 ms einmal ausführen.
5. Eingang abfragen und Relais entsprechend setzen
Das Script prüft jede Sekunde den Zustand des Eingangs und schaltet das Relais entsprechend.
// Eingang lesen und Relais entsprechend schalten
function checkInput() {
let input = Shelly.getComponentStatus("input:0");
console.log("Eingang:", input.state);
Shelly.call("Switch.Set", {
id: 0,
on: input.state
});
}
Timer.set(1000, true, checkInput);
6. Tastendruck schaltet Relais um
Bei einer Änderung am Eingang wird das Relais umgeschaltet.
// Bei Änderung am Eingang Relais umschalten
Shelly.addStatusHandler(function (event) {
if (event.component === "input:0") {
console.log("Eingang geändert");
Shelly.call("Switch.Toggle", {
id: 0
});
}
});
7. Sicherheit: maximale Laufzeit begrenzen
Wenn das Relais eingeschaltet wird, schaltet es sich nach einer festgelegten Zeit automatisch wieder aus.
// Wenn Relais eingeschaltet wird, nach 30 Sekunden automatisch ausschalten
let maxLaufzeit = 30000; // 30 Sekunden
Shelly.addStatusHandler(function (event) {
if (event.component === "switch:0") {
if (event.delta.output === true) {
console.log("Relais wurde eingeschaltet - Timer startet");
Timer.set(maxLaufzeit, false, function () {
console.log("Maximale Laufzeit erreicht - Relais aus");
Shelly.call("Switch.Set", {
id: 0,
on: false
});
});
}
}
});
8. Pumpe per Taster für 10 Sekunden starten
Ein Tastendruck startet die Pumpe für 10 Sekunden. Mehrfaches Drücken während der Laufzeit startet keinen zweiten Timer.
// Taster startet Pumpe für 10 Sekunden
let laufzeit = 10000; // 10 Sekunden
let pumpeLaeuft = false;
function pumpeStarten() {
if (pumpeLaeuft) {
console.log("Pumpe läuft bereits");
return;
}
pumpeLaeuft = true;
console.log("Pumpe EIN");
Shelly.call("Switch.Set", {
id: 0,
on: true
});
Timer.set(laufzeit, false, function () {
console.log("Pumpe AUS");
Shelly.call("Switch.Set", {
id: 0,
on: false
});
pumpeLaeuft = false;
});
}
Shelly.addStatusHandler(function (event) {
if (event.component === "input:0") {
if (event.delta.state === true) {
pumpeStarten();
}
}
});
9. HTTP-Request an anderes Gerät senden
Der Shelly kann lokal einen HTTP-Request an einen ESP32, einen zweiten Shelly oder einen kleinen Webserver senden.
// HTTP-Request an anderes Gerät senden
let url = "http://192.168.178.50/status?pumpe=ein";
Shelly.call("HTTP.GET", {
url: url
}, function (result, error_code, error_message) {
if (error_code === 0) {
console.log("HTTP erfolgreich:", result.code);
} else {
console.log("HTTP Fehler:", error_message);
}
});
10. Status regelmäßig ausgeben
Dieses Diagnose-Script gibt alle 5 Sekunden den Zustand von Eingang und Relais aus.
// Alle 5 Sekunden Status anzeigen
function statusAusgeben() {
let input = Shelly.getComponentStatus("input:0");
let sw = Shelly.getComponentStatus("switch:0");
console.log("Eingang:", input.state, "Relais:", sw.output);
}
Timer.set(5000, true, statusAusgeben);
Wichtige Grundbefehle
// Gerätedaten
Shelly.getDeviceInfo();
// Status einer Komponente
Shelly.getComponentStatus("input:0");
Shelly.getComponentStatus("switch:0");
// Relais ein/aus
Shelly.call("Switch.Set", { id: 0, on: true });
Shelly.call("Switch.Set", { id: 0, on: false });
// Relais umschalten
Shelly.call("Switch.Toggle", { id: 0 });
// Einmaliger Timer
Timer.set(5000, false, function () {
console.log("Nach 5 Sekunden");
});
// Wiederholender Timer
Timer.set(1000, true, function () {
console.log("Jede Sekunde");
});
Didaktische Reihenfolge
- Script startet und schreibt in die Console
- Relais per Script ein- und ausschalten
- Timer: Relais nach 5 Sekunden ausschalten
- Eingang lesen
- Taster startet eine zeitbegrenzte Aktion
- Schutzlogik: maximale Laufzeit
- HTTP-Request an ESP32 oder zweiten Shelly
Diese Reihenfolge ist für Unterricht und AG gut geeignet: Erst Ausgabe, dann Aktor, dann Sensor, dann Logik und Kommunikation.