Bitte zur besseren Lesbarkeit Skripte in einen Code-Block einfügen:
hab ich erledigt
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.
Bitte zur besseren Lesbarkeit Skripte in einen Code-Block einfügen:
hab ich erledigt
Hallo liebe Community,
ich bin der BitBastler aus Bayern.
Bastle ab und zu an Shelly-Steuerungen für den Eigengebrauch. Nichts großartiges, nur so kleine Hilfsmitte für den täglichen Gebrauch, wie Garagentoröffner, Türöffner und Lichtsteuerungen.
Habe mir hier einige Tips rausgeholt und möchte gerne etwas zurückgeben, vielleicht hilft es ja dem ein oder anderen.
LG
BitBastler
Hallo zusammen,
ich will hier mein Script für eine Treppenhauslichtsteuerung veröffentlichen, um anderen Usern zu helfen.
Wenn jemand vielleicht eine Verbesserung hat oder eine andere Möglichkeit die Anforderung besser oder anders zu lösen, gerne her damit.
Bestand:
2 Lichtkreise (Treppenhaus und Hoflicht) die jeweils mit mehreren Tastern angesteuert werden von 2 mechanischen ELTACO.
Was noch eine Besonderheit ist, ein Lichtkreis ist per Nulleiter geschaltet, der 2. Lichtkreis per Phase. Fragt mich nicht warum, ist halt so.
Meine Anforderung war:
Das Hoflicht war sehr einfach zu lösen über den Automation Timer.
Das Treppenhauslicht breitete mir da mehr Kopfzerbrechen, hab es dann über ein Script lösen können:
/* // Hier kann der Debug-Modus für Fehlersuche aktiviert werden
print("🔍 Skript gestartet");
Shelly.addEventHandler(function (event) {
if (event.component === "input:" + inputId) {
print("🆕 Event erkannt:", JSON.stringify(event));
}
});
*/
print("🔍 Skript gestartet");
let duration = 0;
let timer = null;
let channel = 0; // Relay 0
let inputId = 0; // Input 0
let maxDuration = 300; // Maximale Zeit für das Licht
let pressStart = 0;
let defaultTime = 60; // Standarddauer für das erste Einschalten
// Funktion: Licht ausschalten
function cancelLight() {
if (timer !== null) {
Timer.clear(timer);
timer = null;
}
duration = 0;
Shelly.call("Switch.Set", { id: channel, on: false });
print("❌ Licht manuell ausgeschaltet");
}
// Funktion: Licht einschalten (erste Aktivierung)
function startLight() {
print("🚀 Erstes Einschalten des Lichts für", defaultTime, "Sekunden");
duration = defaultTime;
Shelly.call("Switch.Set", { id: channel, on: true });
if (timer !== null) {
Timer.clear(timer);
}
timer = Timer.set(defaultTime * 1000, false, function () {
Shelly.call("Switch.Set", { id: channel, on: false });
duration = 0;
timer = null;
print("⏱️ Erstes Einschalten beendet – Licht aus");
});
}
// Funktion: Lichtzeit verlängern
function extendTime() {
duration = Math.min(duration + defaultTime, maxDuration);
// Falls das Licht bereits an ist, nur Dauer anpassen
if (timer !== null) {
Timer.clear(timer);
}
Shelly.call("Switch.Set", { id: channel, on: true });
timer = Timer.set(duration * 1000, false, function () {
Shelly.call("Switch.Set", { id: channel, on: false });
duration = 0;
timer = null;
print("⏱️ Timer abgelaufen – Licht aus");
});
print("✅ Verlängert auf", duration, "Sekunden");
}
// Eingangsereignisse überwachen
Shelly.addEventHandler(function (event) {
if (event.component === "input:" + inputId) {
print("🆕 Event erkannt:", JSON.stringify(event));
if (event.info.event === "btn_down") {
pressStart = Shelly.getComponentStatus("sys").uptime || 0;
print("🔘 Taste gedrückt (Startzeit:", pressStart, ")");
}
if (event.info.event === "btn_up") {
let pressEnd = Shelly.getComponentStatus("sys").uptime || 0;
let pressDuration = pressEnd - pressStart;
print("🔁 Taste losgelassen (Dauer:", pressDuration, "Sekunden)");
if (pressDuration >= 2) {
cancelLight();
} else {
if (duration === 0) {
startLight();
} else {
extendTime();
}
}
}
}
});
Alles anzeigen
Das Script kann frei verwendet und angepasst werden. Es ist hier nur Für das Relais 0 aktiv, kann aber jederzeit erweitert werden um z.B. das Hoflich analog zum Treppenhauslicht zu steuern.
Verbesserungsvorschläge oder auch abgewandelte Funktionen können hier gerne diskutiert werden.