// Konfiguration
const channel1 = 'shelly.1.shellypro2#***********#1.Relay0.Switch'; // Ersetze mit dem richtigen Kanal für den ersten Schalter
const channel2 = 'shelly.1.shellypro2#***********#1.Relay1.Switch'; // Ersetze mit dem richtigen Kanal für den zweiten Schalter
const manualSwitch = '0_userdata.0.Datenpunkte.Licht-Abwesenheit-on-off'; // Ersetze mit dem richtigen manuellen Schalter (Ein/Aus)
// Dunkelheitsprüfungs-Adapter (sun Adapter)
//const sunState = 'sun.0.sunset'; // sunset State liefert 'true' für Dunkelheit
const sunState = '0_userdata.0.Datenpunkte.jemand_zuhause'; // sunset State liefert 'true' für Dunkelheit
// Konfigurierbare Zeiten
const maxOnDuration = 10 * 60 * 1000; // Maximale Einschaltzeit in Millisekunden (z.B. bis 10 Minuten)
const minOnDuration = 2 * 60 * 1000; // Minimale Einschaltzeit in Millisekunden (z.B. 2 Minuten)
const offDuration = 5 * 60 * 1000; // Ausschaltzeit in Millisekunden (z.B. 5 Minuten)
// Funktion zur Erzeugung einer zufälligen Einschaltzeit zwischen minOnDuration und maxOnDuration
function getRandomOnDuration() {
return Math.floor(Math.random() * (maxOnDuration - minOnDuration + 1)) + minOnDuration;
}
// Funktion zum Schalten eines Kanals
function switchChannel(channel, state) {
setState(channel, state, true); // Schaltet den Kanal auf den angegebenen Zustand (true = ein, false = aus)
}
// Prüfen, ob es dunkel ist und das Skript aktiviert wurde
function isDarkAndActive() {
// Abrufen des Sonnenstatus (true = Dunkelheit, false = Tag)
const isDark = getState(sunState).val;
// Abrufen des manuellen Schalters (true = Aktiv, false = Inaktiv)
const isActive = getState(manualSwitch).val;
return isDark && isActive;
}
// Zyklus für Kanal 1
function cycleChannel1() {
if (isDarkAndActive()) {
const onTime = getRandomOnDuration(); // Zufällige Einschaltzeit für Kanal 1
// Einschalten von Kanal 1
switchChannel(channel1, true);
console.log(`Kanal 1 eingeschaltet für ${onTime / 1000} Sekunden.`);
// Nach der zufälligen Einschaltzeit ausschalten
setTimeout(() => {
switchChannel(channel1, false);
console.log(`Kanal 1 ausgeschaltet.`);
// Nach der Ausschaltzeit erneut einschalten
setTimeout(() => {
cycleChannel1();
}, offDuration);
}, onTime);
} else {
console.log("Es ist nicht dunkel oder der manuelle Schalter ist aus. Skript nicht aktiv.");
// Warte 5 Minuten und prüfe erneut
setTimeout(cycleChannel1, 5 * 60 * 1000);
}
}
// Zyklus für Kanal 2
function cycleChannel2() {
if (isDarkAndActive()) {
const onTime = getRandomOnDuration(); // Zufällige Einschaltzeit für Kanal 2
// Einschalten von Kanal 2
switchChannel(channel2, true);
console.log(`Kanal 2 eingeschaltet für ${onTime / 1000} Sekunden.`);
// Nach der zufälligen Einschaltzeit ausschalten
setTimeout(() => {
switchChannel(channel2, false);
console.log(`Kanal 2 ausgeschaltet.`);
// Nach der Ausschaltzeit erneut einschalten
setTimeout(() => {
cycleChannel2();
}, offDuration);
}, onTime);
} else {
console.log("Es ist nicht dunkel oder der manuelle Schalter ist aus. Skript nicht aktiv.");
// Warte 5 Minuten und prüfe erneut
setTimeout(cycleChannel2, 5 * 60 * 1000);
}
}
// Starten der Zyklen
cycleChannel1();
cycleChannel2();