// Shelly Script: Nach Einschalten 10 Minuten warten,
// dann bei dauerhaft unter 100 W nach 5 Minuten ausschalten.
let CONFIG = {
switchId: 0,
// Wartezeit nach dem Einschalten
startDelayMs: 10 * 60 * 1000,
// Verbrauchsschwelle
powerLimitW: 100,
// Wie lange unter der Schwelle bleiben muss
lowPowerDelayMs: 5 * 60 * 1000,
// Prüfintervall nach Ablauf der ersten 10 Minuten
checkIntervalMs: 10 * 1000
};
let startDelayTimer = null;
let checkTimer = null;
let lowPowerTimer = null;
function clearTimer(timerId) {
if (timerId !== null) {
Timer.clear(timerId);
}
}
function resetAllTimers() {
clearTimer(startDelayTimer);
clearTimer(checkTimer);
clearTimer(lowPowerTimer);
startDelayTimer = null;
checkTimer = null;
lowPowerTimer = null;
}
function switchOff() {
print("Verbrauch war lange genug unter " + CONFIG.powerLimitW + " W. Schalte aus.");
Shelly.call("Switch.Set", {
id: CONFIG.switchId,
on: false
});
resetAllTimers();
}
function checkPower() {
Shelly.call("Switch.GetStatus", {
id: CONFIG.switchId
}, function (status, error_code, error_message) {
if (error_code !== 0) {
print("Fehler beim Lesen des Switch-Status: " + error_message);
return;
}
if (!status.output) {
print("Steckdose ist aus. Überwachung wird beendet.");
resetAllTimers();
return;
}
let power = status.apower;
print("Aktuelle Leistung: " + power + " W");
if (power < CONFIG.powerLimitW) {
if (lowPowerTimer === null) {
print("Verbrauch unter " + CONFIG.powerLimitW + " W. Starte 5-Minuten-Timer.");
lowPowerTimer = Timer.set(CONFIG.lowPowerDelayMs, false, function () {
switchOff();
});
}
} else {
if (lowPowerTimer !== null) {
print("Verbrauch wieder über " + CONFIG.powerLimitW + " W. 5-Minuten-Timer wird zurückgesetzt.");
clearTimer(lowPowerTimer);
lowPowerTimer = null;
}
}
});
}
function startMonitoring() {
print("10 Minuten sind vorbei. Verbrauchsüberwachung startet.");
startDelayTimer = null;
checkPower();
checkTimer = Timer.set(CONFIG.checkIntervalMs, true, function () {
checkPower();
});
}
function handleSwitchOn() {
print("Steckdose wurde eingeschaltet. Starte 10-Minuten-Wartezeit.");
resetAllTimers();
startDelayTimer = Timer.set(CONFIG.startDelayMs, false, function () {
startMonitoring();
});
}
function handleSwitchOff() {
print("Steckdose wurde ausgeschaltet. Alle Timer werden beendet.");
resetAllTimers();
}
// Statusänderungen überwachen
Shelly.addStatusHandler(function (event) {
if (event.component !== "switch:" + CONFIG.switchId) {
return;
}
if (typeof event.delta.output === "undefined") {
return;
}
if (event.delta.output === true) {
handleSwitchOn();
} else {
handleSwitchOff();
}
});
// Falls Script gestartet wird, während die Steckdose bereits eingeschaltet ist
Shelly.call("Switch.GetStatus", {
id: CONFIG.switchId
}, function (status, error_code, error_message) {
if (error_code !== 0) {
print("Fehler beim Initialisieren: " + error_message);
return;
}
if (status.output) {
print("Steckdose war beim Scriptstart bereits eingeschaltet.");
handleSwitchOn();
} else {
print("Steckdose ist beim Scriptstart aus.");
}
});