Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Fuzzy Lichtergenerator als Einbrecherschreck (Holidaymode)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Fuzzy Lichtergenerator als Einbrecherschreck (Holidaymode)

    This topic has been deleted. Only users with topic management privileges can see it.
    • jmeister79
      jmeister79 last edited by jmeister79

      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();
      });
      
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      948
      Online

      31.9k
      Users

      80.2k
      Topics

      1.3m
      Posts

      1
      1
      113
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo