Hallo zusammen, Ich bin absoluter Neuling was die Programmierung der Shellys per Skript angeht.
Ich habe vor mir ein Shelly plus 1PM der neusten Generation und möchte hier ein Skript über einen Tastereingang programmieren.
Das Relais soll nach Tastendruck für 5Sekunden Schließen und danach 30 Sekunden pausieren bevor der nächste Durchlauf Startet. (5 Durchläufe geplant)
das ganze läuft auf 24v.
anschluss ist folgendermaßen: + und - sind klar,
taster ist zwischen SW und - angeschlossen.
Wenn ich jetzt aber den Taster betätige, schließt das Relais nir solange der Zaster gedrückt ist. Sobald man diesen loslässt öffnet es wieder.
Mein Skript sieht bisher so aus:
const CONFIG = {
INPUT_ID: SW, // Eingang (Taster)
OUTPUT_ID: 0, // Ausgang (Relais)
ON_TIME: 3000, // 3 Sekunden EIN (Millisekunden)
OFF_TIME: 20000, // 20 Sekunden AUS (Millisekunden)
REPEAT_COUNT: 5, // Anzahl der Wiederholungen
COMPONENT_TYPE: 'input'
};
let currentCycle = 0;
let isRunning = false;
let timer = null;
function runCycle() {
if (currentCycle >= CONFIG.REPEAT_COUNT) {
// fertig → alles zurücksetzen
Shelly.call("Switch.Set", { id: CONFIG.OUTPUT_ID, on: false });
currentCycle = 0;
isRunning = false;
return;
}
// Ausgang EIN
Shelly.call("Switch.Set", { id: CONFIG.OUTPUT_ID, on: true });
// Nach ON_TIME wieder ausschalten
Timer.set(CONFIG.ON_TIME, false, function () {
Shelly.call("Switch.Set", { id: CONFIG.OUTPUT_ID, on: false });
// Nächsten Zyklus nach OFF_TIME starten
Timer.set(CONFIG.OFF_TIME, false, function () {
currentCycle++;
runCycle();
});
});
}
function setup() {
// Eingang als Button konfigurieren
Shelly.call("Switch.SetConfig", {
id: CONFIG.INPUT_ID,
config: { in_mode: "detached" }
});
Shelly.call("Input.SetConfig", {
id: CONFIG.INPUT_ID,
config: { type: "button" }
});
// Event-Handler für Tastendruck
Shelly.addEventHandler(function (event) {
if (event.info.event === "single_push" &&
event.id === CONFIG.INPUT_ID &&
event.info.component === CONFIG.COMPONENT_TYPE + ":" + JSON.stringify(CONFIG.INPUT_ID)) {
if (!isRunning) {
isRunning = true;
currentCycle = 0;
runCycle();
}
}
});
}
setup();
Danke für eure Hilfe!
Liebe Grüße!