/* Ermittlung von aktiven und inaktibven Rechnersystemen */ /* Sleeptimer zum herunterfahren von Rechnersystemen */ /* Countdown-Anzeige für Sleeptimer */ /* Rechnersysteme direkt hoch und herunterfahren */ /* ----------------------------------------------------------------------------------------------- */ var idSayIt = "sayit.0.tts.text"; /* Rechnersysteme die überwacht werden */ var rechner = [ "ping.0.rasp-ccu.192_168_2_1"/*Fritzbox*/, "ping.0.rasp-ccu.192_168_2_10"/*Sonne*/, "ping.0.rasp-ccu.192_168_2_11"/*Galaxi*/, "ping.0.rasp-ccu.192_168_2_110"/*Blueray*/, "ping.0.rasp-ccu.192_168_2_12"/*DanaPC*/, "ping.0.rasp-ccu.192_168_2_30"/*Homematic-CCU*/, "ping.0.rasp-ccu.192_168_2_35"/*AmazonFire*/, "ping.0.rasp-ccu.192_168_2_40"/*RaspberryPi*/, "ping.0.rasp-ccu.192_168_2_45"/*HarmonyHub*/, "ping.0.rasp-ccu.192_168_2_50"/*QNAP*/, "ping.0.rasp-ccu.192_168_2_60"/*KurtHandy*/, "ping.0.rasp-ccu.192_168_2_70"/*Alienware*/, "ping.0.rasp-ccu.192_168_2_75"/*Surface*/, "ping.0.rasp-ccu.192_168_2_80"/*DennisHandy*/, "ping.0.rasp-ccu.192_168_2_85"/*Technisat*/, "ping.0.rasp-ccu.192_168_2_90"/*BaerbelHandy*/, "ping.0.rasp-ccu.192_168_2_95"/*NUC*/ ]; var anzahl_systeme = rechner.length; // Anzahl der zu überwachenden Rechnersysteme var anzahl_aktive_systeme = 0; // Anzahl der aktiven Rechnersysteme var anzahl_inaktive_systeme = 0; // Anzahl der inaktiven Rechnersysteme var interval = null; // Notwendig für Countdown var countdown = 80; // Initialwert für den Countdown in Sekunden createState('countdown', countdown); createState('afterCount', false); createState('countTrigger', false); createState ('Sonne.Sleeptimer',-1); createState ('Sonne.Sleeptimer_Dauer',0); createState ('Sonne.Shutdown_Befehl'); setState ('Sonne.Shutdown_Befehl','wget -o /dev/null http://192.168.2.25/remote_sonne_shutdown.php'); createState ('Sonne.Wol_Befehl'); setState ('Sonne.Wol_Befehl','wget -o /dev/null http://192.168.2.25/remote_sonne_wol.php'); createState ('Sonne.aktivieren',0); setState ('Sonne.aktivieren',0); /* ----------------------------------------------------------------------------------------------- */ /* Diese Funtion wandelt die übergebenen Sekunden in Stunden / Minuten / Secunden Shreibweise um */ /* Übergabe: Sekunden z.B. 9000 Rückgabe: 2 Stunden 30 Minuten und 00 Sekunden */ /* ----------------------------------------------------------------------------------------------- */ function seconds2text(_seconds) { var sec_num = parseInt(_seconds, 10); // don't forget the second param var hours = Math.floor(sec_num / 3600); var minutes = Math.floor((sec_num - (hours * 3600)) / 60); var seconds = sec_num - (hours * 3600) - (minutes * 60); var time; if (hours > 0) { if (hours < 10) {hours = "0" + hours;} if (minutes < 10) {minutes = "0" + minutes;} if (seconds < 10) {seconds = "0" + seconds;} time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden'; } else if (minutes > 0) { if (minutes < 10) {minutes = "0" + minutes;} if (seconds < 10) {seconds = "0" + seconds;} time = minutes + ' Minuten und ' + seconds + ' Sekunden'; } else { if (seconds < 10) {seconds = "0" + seconds;} time = seconds + ' Sekunden'; } return time; } /* ----------------------------------------------------------------------------------------------- */ /* Diese Funtion stellt einen Countdown zur Verfügung */ /* ----------------------------------------------------------------------------------------------- */ function count() { // remove trigger if (getState('countTrigger').val) { setState('countTrigger', false); } if (countdown > 1) { setState('countdown', --countdown); } else { clearInterval(interval); interval = null; setState('countdown', 0); setState('afterCount', true); } } /* ----------------------------------------------------------------------------------------------- */ /* Dies ist der Auslöser für den countdown, wenn countTrigger geändert wird */ /* ----------------------------------------------------------------------------------------------- */ on('countTrigger', function (obj) { if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) { setState('countdown', countdown); setState('afterCount', false); if (!interval) { count(); interval = setInterval(count, 1000*60); } } }); /* ------------------------------------------------------------------------------------------------------ */ /* Dies ist der Auslöser für die Aktivierung des Sleeptimers */ /* Wenn Sleeptimer auf 1 gesetzt wird, wird ein Countdown ausgelöst und nach Ablauf die Aktion ausgeführt */ /* Wenn während des aktiven Countdowns der Sleeptimer auf 0 gesetzt wird, wird der Countdown agbebrochen */ /* Nach beiden Aktinen wird der Sleelptimer selbst auf -1 gesetzt. */ /* ------------------------------------------------------------------------------------------------------ */ on("javascript.0.Sonne.Sleeptimer"/*aktivieren*/, function(obj) { if (obj.newState.val === 1) { log("Sleeptimer Sonne gestartet " + getState("javascript.0.Sonne.Sleeptimer").val ,"info"); setState (idSayIt, "Sleeptimer Sonne aktiviert " + getState("javascript.0.Sonne.Sleeptimer_Dauer").val + " Minuten") ; countdown=getState("javascript.0.Sonne.Sleeptimer_Dauer").val; log("Sleeptimer Sonne gestartet " + countdown + "Sekunden" ,"info"); myTimeout = setTimeout(function () { setState (idSayIt, "Timer abgelaufen") ; setState("javascript.0.Sonne.Sleeptimer", -1); /* Wert wieder zurücksetzen */ }, getState("javascript.0.Sonne.Sleeptimer_Dauer").val * 1000*60); setState('countTrigger', true); } else { if (obj.newState.val === 0) { log("Sleeptimer Sonne gestoppt " + getState("javascript.0.Sonne.Sleeptimer").val ,"info"); setState (idSayIt, "Sleeptimer Sonne gestoppt") ; clearTimeout(myTimeout); setState("javascript.0.Sonne.Sleeptimer", -1); /* Wert wieder zurücksetzen */ countdown=0; } else { ; /* Nichts tun */ } } }); /* ---------------------------------------------------------------------------------------------------------------------- */ /* Dies ist der Auslöser für das Hochfahren des Rechners */ /* Wenn Sonne.aktivieren auf 0 gesetzt wird, wird der Rechner heruntergefahren, indem der Shutdownbefehl ausgeführt wird. */ /* Wenn Sonne.aktivieren auf 1 gesetzt wird, wird der Rechner hochgefahren, indem der Wolbefehl ausgeführt wird */ /* ---------------------------------------------------------------------------------------------------------------------- */ on("system.adapter.javascript.0.Sonne.aktivieren"/*aktivieren*/, function(obj) { if (obj.newState.val === 0) { log("Computer wird heruntergefahren " + getState("system.adapter.javascript.0.Sonne.Shutdownbefehl"/*Shutdownbefehl*/).val ,"info"); setState (idSayIt, "Computer wird heruntergefahren") ; exec(getState("system.adapter.javascript.0.Sonne.Shutdownbefehl"/*Shutdownbefehl*/).val); setState("system.adapter.javascript.0.Sonne.aktivieren"/*aktivieren*/, -1); /* Wert wieder zurücksetzen */ } else { if (obj.newState.val === 1) { log("Computer wird hochgefahren " + getState("system.adapter.javascript.0.Sonne.Wolbefehl"/*Wolbefehl*/).val ,"info"); setState (idSayIt, "Computer wird hochgefahren") ; exec(getState("system.adapter.javascript.0.Sonne.Wolbefehl"/*Wolbefehl*/).val); setState("system.adapter.javascript.0.Sonne.aktivieren"/*aktivieren*/, -1); /* Wert wieder zurücksetzen */ } else { ; /* Nichts tun */ } } }); /* ---------------------------------------------------------------------------------------------------------------------- */ /* Hauptprogramm: Ermittlung der aktive und inaktiven Rechnersysteme */ /* ---------------------------------------------------------------------------------------------------------------------- */ for (i = 0; i < anzahl_systeme; i++) { x=getState(rechner[i]); if (x.val === true) { anzahl_aktive_systeme++; } else { anzahl_inaktive_systeme++; } } log("Aktiv: " + anzahl_aktive_systeme +" Inaktiv: "+ anzahl_inaktive_systeme,"info");