NEWS
Fuzzy Lichtergenerator als Einbrecherschreck (Holidaymode)
-
Hi,
falls Kevin mal wieder alleine zuhause ist und nicht schlafen kann:
Ich habe mir mal ein kleines Script geschrieben, das zwischen Sonnenuntergang und Aufgang die lichter im Haus zufällig schaltet.
Es wird eine Struktur aus Lichtern erzeugt, die abgearbeitet wird.
Alle 10 min (editierbar) werden zufällig 3 Lampen (parametrierbar) ausgewählt die für eine zufällig generierte Zeit zwischen 1 und 45 min zufällig verzögert eingeschaltet werden.Lampen die beim letzten Zyklus benutzt wurden, werden nicht nochmal gewählt.
Es ist der erste Entwurf.
Gerne höre ich Verbesserungsvorschläge und freue mich über Feedback bezüglich Stil und Form oder bessere Lösungen.Gruß
Nils//Created by jmeister79 09.08.2024 createState("javascript.0.Parameter.BurglarMode", false, { type: 'boolean', name: 'BurglarMode' }); const P_light_struct = [ //ids and optional names for lights you want to switch { id: '...', name: '...' }, { id: '...', name: '...' }, { id: '...', name: '...' }, { id: '...', name: '...' }, { id: '...', name: '...' }, { id: '...', name: '...' }, { id: '...', name: '...' } ]; const P_numOfRandomLights = 3; //init variables var randomLights = []; if (P_numOfRandomLights > P_light_struct.length) {//correct if to many random lights are chosen log("Error: Too many lights") P_numOfRandomLights = P_light_struct.length; } for (var n = 0; n < P_numOfRandomLights; n++) { //create a small array with random numbers randomLights[n] = 99; } function FuzzyLights() { var sunrise = formatDate(getDateObject(getAstroDate("sunriseEnd", undefined, 0)), "hh:mm"); var sunset = formatDate(getDateObject(getAstroDate("sunset", undefined, 0)), "hh:mm"); var now = new Date().toTimeString().substring(0, 5); var randomLightsNew = []; var light = 0; var BurglarMode = getState("javascript.0.Parameter.BurglarMode").val; if (1==1) { //only at night and with parameter for (var n = 0; n < randomLights.length; n++) { //fill a small array with random numbers //randomLights[n] = Math.floor(Math.random() * P_light_struct.length) do { light = Math.floor(Math.random() * P_light_struct.length) //log(light) } while (randomLights.includes(light) || randomLightsNew.includes(light)) //lights are NOT on and no doubles randomLightsNew[n] = light; // write lightnumber to array } randomLights = randomLightsNew; //transfer to array for (var i = 0; i < randomLights.length; i++) { // for every array objekt var runtime = Math.floor(Math.random() * 45);//compute a random runtime for each light of max 45minuntes if (runtime < 1) {//minimum 1 minute runtime runtime = 1; } var delaytime = Math.floor(Math.random() * (runtime-1)); //delaytime smaller than runtime //log(P_light_struct[randomLights[i]].name) //log(runtime) //log(delaytime) runtime = runtime*1000*60; //convert from minutes to milliseconds delaytime = delaytime*1000*60; //convert from minutes to milliseconds setStateDelayed(P_light_struct[randomLights[i]].id, true, delaytime, true) // turn on the random chosen light setStateDelayed(P_light_struct[randomLights[i]].id, false, runtime, true); //turn off after random time } } }; FuzzyLights(); schedule('*/15 * * * *', function () { //every 15 min FuzzyLights(); });