Ich hab jetzt mit Hilfe von ChatGPT ein Script gebaut, das offensichtlich auch erstaunlich gut funktioniert. Damit bleibt die Funktionalität lokal und es funktioniert auch wie ein klassisches Nachlaufrelais.
Code
// ==========================
// Shelly Lüftersteuerung
// mit fester Einschalt- und Ausschaltverzögerung
// ==========================
// Feste Verzögerungen
let onDelay = 120; // Einschaltverzögerung in Sekunden
let offDelay = 600; // Ausschaltverzögerung in Sekunden
let inputId = 0; // Eingang (SW)
let outputId = 0; // Relaisausgang
let onTimer = null;
let offTimer = null;
// Hilfsfunktion: aktuellen Relaiszustand holen
function getOutputState() {
let st = Shelly.getComponentStatus("switch", outputId);
return st.output;
}
// Eingangsereignisse abfangen
Shelly.addEventHandler(function (event) {
if (event.component === "input:" + inputId) {
if (event.info.state) {
// Schalter EIN
if (offTimer) {
// Nachlauf nicht abbrechen, Lüfter bleibt an
offTimer = null;
}
if (!onTimer && !getOutputState()) {
onTimer = Timer.set(onDelay * 1000, false, function () {
Shelly.call("Switch.Set", { id: outputId, on: true });
onTimer = null;
});
}
} else {
// Schalter AUS
if (onTimer) {
// Einschalt-Timer abbrechen, falls noch nicht aktiv
Timer.clear(onTimer);
onTimer = null;
}
if (getOutputState() && !offTimer) {
// Nachlauf starten, nur wenn Lüfter läuft
offTimer = Timer.set(offDelay * 1000, false, function () {
Shelly.call("Switch.Set", { id: outputId, on: false });
offTimer = null;
});
}
}
}
});
Alles anzeigen