// Käyttäjän määrittämät asetukset
let powerThreshold = 5; // Tehoraja watteina
let timeoutMinutes = 2; // Aika minuutteina ennen sammuttamista
// Aikaleimat tallennetaan tähän
let switchStates = {};
function checkPower() {
// Käy läpi kaikki switchit (oletetaan max 4, voit vaihtaa jos eri määrä)
for (let i = 0; i < 4; i++) {
Shelly.call("Switch.GetStatus", { id: i }, function (res, errCode, errMsg) {
if (errCode) return;
let id = res.id;
let power = res.apower;
let isOn = res.output;
let now = Math.floor(Date.now() / 1000);
print("Switch", id, "tila:", isOn, "teho:", power);
// Tarkista onko päällä ja teho alle rajan
if (isOn && power < powerThreshold) {
if (!(id in switchStates)) {
switchStates[id] = now;
print("Switch", id, "teho alle rajan. Aikaleima tallennettu:", now);
} else {
let elapsed = (now - switchStates[id]) / 60;
print("Switch", id, "ollut alhaisen tehon tilassa", elapsed, "min.");
if (elapsed >= timeoutMinutes) {
print("Ylitetty aikaraja alhaisen tehon tilassa, sammutetaan.");
Shelly.call("Switch.Set", { id: id, on: false }, null, null);
delete switchStates[id];
}
}
} else {
// Jos teho noussut tai switch pois päältä, nollataan aikaleima
if (id in switchStates) {
print("Switch", id, "ei enää matalatehoinen tai pois päältä. Nollataan tila.");
delete switchStates[id];
}
}
});
}
}
// Suoritetaan kerran minuutissa
Timer.set(60 * 1000, true, checkPower);