Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] Automatisches Licht

    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

    [Vorlage] Automatisches Licht

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

      Hi Leute,

      hier ein weiterer Script-Schnippsel.
      Der Raumlichter bei Bewegungserkennung für eine gewünschte Zeit einschaltet.
      Wenn während der "Einschaltzeit" wieder Bewegung erkannt wird, beginnt die Einschaltzeit von vorne.

      Lichter die über einen Schalter vor Bewegungserkennung eingeschaltet wurden, werden nicht erfasst und somit auch nicht automatisch ausgeschalten.

      Um das Script zu nutzen müssen die Bewegungsmelder sowie die Lichter die Ihr verwenden möchtet jeweils einer enum.function zugewiesen sein. Alternativ könnt ihr auch jeden Datenpunkt der ausgewertet werden soll einzeln beobachten.

      Wie immer wenn Fragen sind einfach schreiben

      // *******************************************************************************************************
      //
      // Automatiklicht-Script
      // Autor: Peoples
      //
      //
      // Funktionen:  1. Das Licht wird bei Bewegungserkennung eingeschalten
      //                 Zuweisung Bewegungsmelder -> Licht -> Helligkeitssensor in Konfig möglich
      //              2. Einschaltzeit jedes Lichts konfigurierbar
      //
      // V1.0.0       Initiale Version
      // *******************************************************************************************************
      
      // -----------------------------------------------------------------------------
      // allgemeine Variablen
      // -----------------------------------------------------------------------------
      var timer = [];                         //Array für die verschiedenen Timer
      var automaticLightsArray = [];          //Array zum auswerten ob das Licht automatisch oder manuel eingeschalten wurde
      var logging = true;                     //Logging Ein/Aus
      
      var lightingLimit = 60;                 //Beleuchtungswert in Lux ab wann das Licht eingeschalten wird
      
      var autolightList = [                   // Automatic-Licht Geräteliste
          
                  /*Auslösender Bewegungsmelder*/                         /*Verwendeter Licht Sensor*/                                /*Zu schaltendes Licht*/                /*An Zeit*/
          /*Treppenhaus DG*/
          {'mdetID':'zigbee.0.XXXXXXXXX.occupancy',       'luxdetID':'hm-rpc.1.XXXXXXXXX.1.CURRENT_ILLUMINATION',             'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE',         'time':5},
          /*Treppenhaus EG*/
          {'mdetID':'zigbee.0.XXXXXXXXX.occupancy',       'luxdetID':'hm-rpc.1.XXXXXXXXX.1.CURRENT_ILLUMINATION',             'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE',         'time':5},
          /*Treppenhaus KG*/
          {'mdetID':'hm-rpc.0.XXXXXXXXX.3.MOTION',        'luxdetID':'hm-rpc.0.XXXXXXXXX.3.BRIGHTNESS',                       'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE',         'time':5},
          /*Keller Gang*/
          {'mdetID':'zigbee.0.XXXXXXXXX.occupancy',       'luxdetID':'hm-rpc.0.XXXXXXXXX.3.BRIGHTNESS',                       'lightID':'hm-rpc.0.XXXXXXXXX.1.STATE',         'time':5}
      ];
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum automatischen Einschalten des Lichts                        #
      // #                                                                           #
      // #############################################################################
      function autoLight(gID){
          for(var i = 0; i < Object.keys(autolightList).length; i++) {  
              if(autolightList[i].mdetID == gID) {
                 if(logging) log('Geräteindex wurde an Stelle:' + i + ' gefunden');
                 
                 var searchIndex = automaticLightsArray.indexOf(autolightList[i].lightID);
                 
                 if(searchIndex == '-1' && getState(autolightList[i].lightID).val === false && getState(autolightList[i].luxdetID).val < lightingLimit) {
                      automaticLightsArray.push(autolightList[i].lightID);
                      setState(autolightList[i].lightID, true);
                 }
                 checkAutoOff(i);
              }
          }
      }
      
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum Prüfen und automatischen Auschalten des Lichts              #
      // #                                                                           #
      // #############################################################################
      function checkAutoOff(i){
          var sI = automaticLightsArray.indexOf(autolightList[i].lightID);
          if(sI != '-1'){
             if(logging) log('Geräteindex '+sI+' wurde in Auto Off Liste gefunen');
             var value=i;
             if(timer[i]) clearTimeout(timer[i]);
             timer[i] = setTimeout(function () {
                      log(autolightList[value].lightID);
                        setState(autolightList[value].lightID, false);
                        automaticLightsArray.splice(sI, 1);
             }, (autolightList[value].time * 60000));
         }
      }
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zur Licht-Array bereinigung                                     #
      // #                                                                           #
      // #############################################################################
      function checkArray(gID){
          for(var i = 0; i < Object.keys(autolightList).length; i++) {  
              if(autolightList[i].lightID == gID) {
                 if(logging) log('Geräteindex '+gID+' wurde in Auto Off Array gefunen und gelöscht');
                 var si = automaticLightsArray.indexOf(autolightList[i].lightID);
                 if(si != '-1' && getState(autolightList[i].lightID).val === false) {
                      automaticLightsArray.splice(si, 1);
                 }
              }
          }
      }
      
      
      // Beobachten der enum.functions "Bewegungsmelder"
      $('state(functions=Bewegungsmelder)').on(function(dp) {
          if(dp.state.val === true) {
              autoLight(dp.id);
              if(logging)log('Auslösender Sensor: ' + dp.id + ': ' + dp.state.val);
          }
      });
      
      
      // Beobachten der enum.functions "Beleuchtung"
      $('state(functions=Beleuchtung)').on(function(dp) {
          if(dp.state.val === false) {
              checkArray(dp.id);
          }
      });
      

      Gruß
      Steffen

      1 Reply Last reply Reply Quote 2
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      483
      Online

      31.8k
      Users

      80.0k
      Topics

      1.3m
      Posts

      1
      1
      1278
      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