Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] clearTimeout für Lichtsteuerung funktioniert nicht.

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    702

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

[gelöst] clearTimeout für Lichtsteuerung funktioniert nicht.

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 3 Kommentatoren 1.2k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • PeoplesP Offline
    PeoplesP Offline
    Peoples
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich habe mir ein kurzes Bewegungsmelder-Lichtscript gebastelt welches eigentlich nach Bewegungserkennung bspw. 3 Minuten das Licht eingeschaltet lassen soll. Wenn innerhalb dieser 3 Minuten wieder eine Bewegung erkannt wird sollt der noch verbleibende Timeout für das ausschalten gelöscht und ein neuer mit 3 Minuten gesetzt werden.

    So die Theorie in der Praxis funktioniert das nur leider überhaupt nicht :lol:

    Vielleicht sieht ja jemand vor euch den Fehler der mir nicht auffällt.

    
    var timer = [];
    function LichtAutomatik(GeraeteID,Zeit) {
        if(getState(GeraeteID).val === false){
            log(GeraeteID);
            setState(GeraeteID,true);
            if(timer.GeraeteID) clearTimeout(timer.GeraeteID);
    
            timer.GeraeteID = setTimeout(function () {
                        setState(GeraeteID,false);
                        log('Aus geschalten');
                    }, Zeit * 60000);
        }            
    }
    
    on({id:"zigbee.0.00158d0002b6093f.occupancy"/*Occupancy*/, change: "any"}, function (dp) {
        if(dp.state.val === true && getState("hm-rpc.1.xxxxxxx.1.CURRENT_ILLUMINATION"/*Lichtsensor.Aussen.West*/).val < 60) {
            LichtAutomatik("hm-rpc.0.xxxxxxxx.1.STATE",3);
        log('bewegung erkannt');
        }
    });
    
    on({id:"zigbee.0.00158d0002c65109.occupancy"/*Occupancy*/, change: "any"}, function (dp) {
        if(dp.state.val === true && getState('hm-rpc.0.xxxxxxxxxx.3.BRIGHTNESS').val < 60) {
            LichtAutomatik("hm-rpc.0.xxxxxxxx.1.STATE",3);
            log('bewegung erkannt');
        }
    });
    

    Ich beantworte keine Fragen zu Themen via PN

    1 Antwort Letzte Antwort
    0
    • thovidT Offline
      thovidT Offline
      thovid
      schrieb am zuletzt editiert von
      #2

      Beim ersten draufschauen würde ich sagen, der Aufruf an clearTimeout ist innerhalb des if Blockesif(getState(GeraeteID).val === false){und wird daher für die Verlängerung nicht ausgeführt, da da das Licht ja schon an ist. Weiter würde ich kein array sondern ein object für das Speichern der timer nehmen, also````
      var timer = {};

      
      Grüße
      
      Thomas
      1 Antwort Letzte Antwort
      0
      • PeoplesP Offline
        PeoplesP Offline
        Peoples
        schrieb am zuletzt editiert von
        #3

        @thovid:

        Beim ersten draufschauen würde ich sagen, der Aufruf an clearTimeout ist innerhalb des if Blockesif(getState(GeraeteID).val === false){und wird daher für die Verlängerung nicht ausgeführt, da da das Licht ja schon an ist. Weiter würde ich kein array sondern ein object für das Speichern der timer nehmen, also````
        var timer = {};

        Grüße
        
        Thomas `  
        

        Du bist mein Held! :lol:, jetzt wo du es sagst hast du natürlich 100%ig recht.

        Warum würdest du denn ein object verwenden? Da ich nur amateurprogrammierer bin, lass ich mich da immer gerne belehren.

        Edit

        So ich habe es nun geändert und es funktioniert an und für sich, aber das Licht wird nach Bewegungserkennung auch ausgeschalten wenn es von Hand eingeschalten war. Dazu habe ich ein neues Array erstellt, in welchem die Geräteid eingeragen wird wenn das Licht durch den Bewegungsmelder eingeschalten wurde.

        Im Anschluss Frage ich eben dieses Array nach dem vorhanden sein der GeräteID ab, aber beim ersten Durchlauf wird der Eintrag nicht gefunden, erst nach dem Reload funktioniert es. Das Problem hatte ich schonmal, aber die Lösung fällt mir nicht mehr ein.

        Hier mal das geänderte Script:

        var timer = [];
        var GeraeteListe = [];
        
        function LichtAutomatik(GeraeteID,Zeit) {
        
            if(getState(GeraeteID).val === false) {
                setState(GeraeteID,true);
                GeraeteListe.push(GeraeteID);
            }
            log(GeraeteListe.indexOf(GeraeteID));
        
            if(GeraeteListe.indexOf(GeraeteID)) {
                log('gerät ist eingetragen');
                if(timer.GeraeteID) clearTimeout(timer.GeraeteID);
        
                timer.GeraeteID = setTimeout(function () {
                    setState(GeraeteID,false);
                    log('----------------------- Vor dem Löschen -----------------------');
                    log('Index:'+GeraeteListe.indexOf(GeraeteID));
                    GeraeteListe.splice(GeraeteListe.indexOf(GeraeteID),1);
                    log('----------------------- Nach dem Löschen -----------------------');
                    log('Aus geschalten');
                }, 10000);//Zeit * 60000);
            }
            else{
                log('gerät ist nicht eingetragen');
            }
        }
        
        

        Ich beantworte keine Fragen zu Themen via PN

        1 Antwort Letzte Antwort
        0
        • PeoplesP Offline
          PeoplesP Offline
          Peoples
          schrieb am zuletzt editiert von
          #4

          Habe es gelöst bekommen, indem ich einen Teil der Funktion in eine zweite ausgelagert habe.

          var timer = [];
          var GeraeteListe = [];
          
          function LichtCountdown(GeraeteID,Zeit){
              timer.GeraeteID = setTimeout(function () {
                  setState(GeraeteID,false);
                 GeraeteListe.splice(GeraeteListe.indexOf(GeraeteID),1);
              }, Zeit * 60000);
          }
          
          function LichtAutomatik(GeraeteID,Zeit) {
              if(getState(GeraeteID).val === false) {
                  setState(GeraeteID,true);
                  GeraeteListe.push(GeraeteID);
                  LichtCountdown(GeraeteID,Zeit);
              }
              if(GeraeteListe.indexOf(GeraeteID)) {
                  LichtCountdown(GeraeteID,Zeit);
              }
          }
          

          Vielleicht kann es ja jemand brauchen

          Ich beantworte keine Fragen zu Themen via PN

          1 Antwort Letzte Antwort
          1
          • J Offline
            J Offline
            JojoS
            schrieb am zuletzt editiert von
            #5

            Danke für den Code,
            ein altes Thema, aber genau das was ich bei meinem spärlichen JS Kenntnissen gebrauchen kann. Ich werde es übernehmen und etwas einenglischen :)
            Ist nach praktischem Gebrauch noch etwas verändert/verbessert worden? Ich wünsche mir da so eine Sammlung solch nützlicher Scripte, gibt es da etwas?

            PeoplesP 1 Antwort Letzte Antwort
            0
            • J JojoS

              Danke für den Code,
              ein altes Thema, aber genau das was ich bei meinem spärlichen JS Kenntnissen gebrauchen kann. Ich werde es übernehmen und etwas einenglischen :)
              Ist nach praktischem Gebrauch noch etwas verändert/verbessert worden? Ich wünsche mir da so eine Sammlung solch nützlicher Scripte, gibt es da etwas?

              PeoplesP Offline
              PeoplesP Offline
              Peoples
              schrieb am zuletzt editiert von
              #6

              @jojos
              Ja wurde noch erweitert, kann ich einstellen wenn du es brauchst

              Ich beantworte keine Fragen zu Themen via PN

              J 1 Antwort Letzte Antwort
              0
              • PeoplesP Peoples

                @jojos
                Ja wurde noch erweitert, kann ich einstellen wenn du es brauchst

                J Offline
                J Offline
                JojoS
                schrieb am zuletzt editiert von
                #7

                @peoples gerne,auch wenn es schon tut was es soll.

                PeoplesP 1 Antwort Letzte Antwort
                0
                • J JojoS

                  @peoples gerne,auch wenn es schon tut was es soll.

                  PeoplesP Offline
                  PeoplesP Offline
                  Peoples
                  schrieb am zuletzt editiert von
                  #8

                  @jojos

                  // *******************************************************************************************************
                  //
                  // Automatiklicht-Script
                  // Autor: Peoples
                  //
                  //
                  // Funktionen:  
                  //
                  // V1.0.0   01.04.23 Initialversion der Version 2
                  //
                  //
                  // Wichtig:
                  // - Enum-Function für Bewegungsmelder muss existieren (Bewegungsmelder)
                  // - Enum-Function für die Lichtquellen muss existieren (Beleuchtung)
                  // 
                  // *******************************************************************************************************
                  
                  // -----------------------------------------------------------------------------
                  // allgemeine Variablen
                  // -----------------------------------------------------------------------------
                  var timer = [];                         //Array für die verschiedenen Timer
                  var automaticLightsArray = [];          //Array zum auswerten ob das Licht automatisch oder manuel eingeschalten wurde
                  
                  var lightingLimitDefault = 55;          //Beleuchtungswert in Lux ab wann das Licht eingeschalten wird
                  
                  var loglevel = 0;                       // Loglevel 0 =  kein Logging / 1 -3 Logging wird genauer 
                  var Systemlog = true;                   // Systemmeldungen anlegen ja/nein
                  
                  
                  var instanz = '0_userdata.0'; instanz = instanz +'.';
                  var pfad0 = 'Lighting'; pfad0 = pfad0 +'.';
                  var pfad1 = 'AutoLightTimers'; pfad1 = pfad0 + pfad1 +'.';
                  var pfad2 = 'config'; pfad2 = pfad0 + pfad2 +'.';
                  
                  var autolightList = [                   // Automatic-Licht Geräteliste
                      
                             /*Name*/                         /*Auslösender Melder*/                                      /*Verwendeter Licht Sensor*/                /*Zu schaltendes Licht*/                               /* An State */       /*Aus State */     /*An Zeit*/     /* Mind. Helligk. */
                      {'name':'TreppenhausDG',        'mdetID':'hm-rpc.2.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.2.XXXX.1.ILLUMINATION',        'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':10},
                      {'name':'TreppenhausEG',        'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                      {'name':'TreppenhausKG',        'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':32},
                      {'name':'FlurELW',              'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':10},
                      {'name':'KellerGang1',          'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':12},
                      {'name':'KellerGang2',          'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':15},
                      {'name':'TerrassenTreppe',      'mdetID':'hm-rpc.0.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':instanz + pfad0 + 'terraceStairsLightGroup',      'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                      {'name':'Bewegungsm-Gartentor', 'mdetID':'hm-rpc.0.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'shelly.0.SHSW-XXXX.Relay1.Switch',               'wishValueON':true, 'wishValueOFF':false,   'time':3, 'lightingLimit':lightingLimitDefault},
                      {'name':'Haustuere1',           'mdetID':'hm-rpc.0.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'sonoff.0.Licht-Haustuere.POWER',                 'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                      {'name':'Haustuere2',           'mdetID':'hm-rpc.0.XXXX.1.STATE',                     'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'sonoff.0.Licht-Haustuere.POWER',                 'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                      {'name':'AussenkuecheTuere',    'mdetID':'hm-rpc.2.XXXX.1.STATE',                     'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'shelly.0.SHSW-XXXX.Relay0.Switch',               'wishValueON':true, 'wishValueOFF':false,   'time':3, 'lightingLimit':lightingLimitDefault},
                      {'name':'GaesteWCEG',           'mdetID':'hm-rpc.2.XXXX.1.PRESENCE_DETECTION_STATE',  'luxdetID':'hm-rpc.2.XXXX.1.ILLUMINATION',        'lightID':'shelly.0.SHSW-XXXXRelay0.Switch',                'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':2},
                      {'name':'Kueche',               'mdetID':'hm-rpc.2.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.2.XXXX.1.ILLUMINATION',        'lightID':instanz + pfad0 + 'Kitchenette',                  'wishValueON':true, 'wishValueOFF':false,   'time':2, 'lightingLimit':5},
                      {'name':'Gartentor',            'mdetID':'hm-rpc.2.XXXX.1.STATE',                     'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'shelly.0.SHSW-XXXX.Relay1.Switch',               'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault}
                  ];
                  
                  
                  // -----------------------------------------------------------------------------
                  // Objekte
                  // ---------.-------------------------------------------------------------------.
                  // Objekt: Lichtautomatik für Automatische Abläufe
                  
                  var KitchenetteOffValue = 0;
                  
                  
                  createState(instanz + pfad0 + 'terraceStairsLightPermOn',  {def:false, type:'boolean', name:'Treppenlicht dauerhaft ein',});
                  createState(instanz + pfad0 + 'terraceStairsLightGroup',  {def:false, type:'boolean', name:'Treppenlicht Gruppe',})
                  
                  createState(instanz + pfad0 + 'Kitchenette',  {def:false, type:'boolean', name:'Lichtlevel Kuechenzeile',})
                  
                  // #############################################################################
                  // #                                                                           #
                  // #  Funktion Geräte Stati erstellen                                          #
                  // #                                                                           #
                  // #############################################################################
                  
                  
                  async function createDeviceStates(){
                      try {
                          for(var i = 0; i < autolightList.length; i++) { 
                              await createStateAsync(instanz + pfad1 + 'timer_' + autolightList[i].name , {name: 'Timer_'+ autolightList[i].name, type:'number', def:'0', read:true, write:true});
                              await createStateAsync(instanz + pfad2 + 'blockMD_' + autolightList[i].name , {name: 'Bewegungserkennung deaktiviert', type:'state', def:false, read:true, write:true});
                          }
                      } catch (error) {
                          log(`Unexpected error - ${error}`, 'error');
                      }
                  }
                  
                  // #############################################################################
                  // #                                                                           #
                  // #  Funktion zum automatischen Einschalten des Lichts                        #
                  // #                                                                           #
                  // #############################################################################
                  function searchAutoLightList(mdID){
                      if(getState('alias.0.System_Konfiguration.Beleuchtungsautomatik.ACTUAL'/*Actual*/).val === true){
                          for(var i = 0; i < Object.keys(autolightList).length; i++) {  
                              if(autolightList[i].mdetID == mdID) {
                                  if(loglevel > 1) log('Geräteindex wurde an Stelle:' + i + ' gefunden');
                                  if(getState(instanz + pfad2 + 'blockMD_' + autolightList[i].name).val === false) {
                                      setAutoLightTimer(i);
                                  } else {
                                      if(loglevel > 1) log('Bei dem Beleuchtungsgerät:' + autolightList[i].name + ' wurde die Bewegungserkennung deaktiviert');
                                  }
                              } else {
                                  if(loglevel > 1)('Gerät wurde nicht gefunden!')
                              }
                          }
                      } else {
                          if(loglevel > 1)('Beleuchtungsautomatik ausgeschalten!')
                      }
                  }
                  
                  // #############################################################################
                  // #                                                                           #
                  // #  Funktion zum Prüfen und automatischen Auschalten des Lichts              #
                  // #                                                                           #
                  // #############################################################################
                  function setAutoLightTimer(i){
                      if(getState(autolightList[i].luxdetID).val < autolightList[i].lightingLimit) {
                          setState(autolightList[i].lightID, autolightList[i].wishValueON);
                          if(getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val != autolightList[i].time * 60){
                              if(getState(autolightList[i].lightID).val != autolightList[i].wishValueON){
                                  setState(instanz + pfad1 + 'timer_' + autolightList[i].name, autolightList[i].time * 60);
                              } else {
                                  clearInterval(timer[autolightList[i].name]);
                                  setState(instanz + pfad1 + 'timer_' + autolightList[i].name, autolightList[i].time * 60);
                              }
                              timer[autolightList[i].name] = setInterval(function () {
                                  if(getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val > 0){
                                      setState(instanz + pfad1 + 'timer_' + autolightList[i].name, getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val - 1);
                                  } else {
                                  setState(autolightList[i].lightID, autolightList[i].wishValueOFF);
                                  clearInterval(timer[autolightList[i].name]);
                                  }
                              }, 1000);
                          }
                      }
                  }
                  
                  // #############################################################################
                  // #                                                                           #
                  // #  Funktion zum zurücksetzen des Timers bei manuelem ausschalten des Lichts #
                  // #                                                                           #
                  // #############################################################################
                  function setTimerToZero(liID){
                      for(var i = 0; i < Object.keys(autolightList).length; i++) {  
                          if(autolightList[i].lightID === liID) {
                                  if(getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val > 0){
                                      clearInterval(timer[autolightList[i].name]);
                                      setState(instanz + pfad1 + 'timer_' + autolightList[i].name, 0);
                                      if(loglevel > 1) log('Timer von:'+liID+' wurde wegen manuellem Ausschalten auf 0 gesetzt');
                                  }
                          }
                      }
                  }
                  
                  
                  
                  
                  // #############################################################################
                  // #                                                                           #
                  // #  Script start                                                             #
                  // #                                                                           #
                  // #############################################################################
                  
                  async function scriptStart(){
                      try{
                          createDeviceStates();
                          
                          for(var i = 0; i < Object.keys(autolightList).length; i++) {
                              await setStateAsync(autolightList[i].lightID, autolightList[i].wishValueOFF);
                              await setStateAsync(instanz + pfad1 + 'timer_' + autolightList[i].name,0);
                          }
                  
                          log ('------------------------------------------- Script Bewegungsmelder neu gestartet -------------------------------------------');
                      } catch (error) {
                          log(`Unexpected error - ${error}`, 'error');
                      }
                  }
                  
                  scriptStart();
                  
                  
                  // Beobachten der enum.functions "Bewegungsmelder"
                  $('state(functions=Bewegungsmelder)').on(function(dp) {
                      if(dp.state.val === true) {
                          if(loglevel > 1 )log('Auslösender Sensor: ' + dp.id + ': ' + dp.state.val);
                          searchAutoLightList(dp.id);
                      }
                  });
                  
                  // Beobachten der enum.functions "Beleuchtung"
                  $('state(functions=Beleuchtung)').on(function(dp) {
                      if(dp.state.val === false) {
                          setTimerToZero(dp.id);
                      }
                  });
                  
                  
                  
                  

                  Bitteschön

                  Ich beantworte keine Fragen zu Themen via PN

                  J 1 Antwort Letzte Antwort
                  0
                  • PeoplesP Peoples

                    @jojos

                    // *******************************************************************************************************
                    //
                    // Automatiklicht-Script
                    // Autor: Peoples
                    //
                    //
                    // Funktionen:  
                    //
                    // V1.0.0   01.04.23 Initialversion der Version 2
                    //
                    //
                    // Wichtig:
                    // - Enum-Function für Bewegungsmelder muss existieren (Bewegungsmelder)
                    // - Enum-Function für die Lichtquellen muss existieren (Beleuchtung)
                    // 
                    // *******************************************************************************************************
                    
                    // -----------------------------------------------------------------------------
                    // allgemeine Variablen
                    // -----------------------------------------------------------------------------
                    var timer = [];                         //Array für die verschiedenen Timer
                    var automaticLightsArray = [];          //Array zum auswerten ob das Licht automatisch oder manuel eingeschalten wurde
                    
                    var lightingLimitDefault = 55;          //Beleuchtungswert in Lux ab wann das Licht eingeschalten wird
                    
                    var loglevel = 0;                       // Loglevel 0 =  kein Logging / 1 -3 Logging wird genauer 
                    var Systemlog = true;                   // Systemmeldungen anlegen ja/nein
                    
                    
                    var instanz = '0_userdata.0'; instanz = instanz +'.';
                    var pfad0 = 'Lighting'; pfad0 = pfad0 +'.';
                    var pfad1 = 'AutoLightTimers'; pfad1 = pfad0 + pfad1 +'.';
                    var pfad2 = 'config'; pfad2 = pfad0 + pfad2 +'.';
                    
                    var autolightList = [                   // Automatic-Licht Geräteliste
                        
                               /*Name*/                         /*Auslösender Melder*/                                      /*Verwendeter Licht Sensor*/                /*Zu schaltendes Licht*/                               /* An State */       /*Aus State */     /*An Zeit*/     /* Mind. Helligk. */
                        {'name':'TreppenhausDG',        'mdetID':'hm-rpc.2.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.2.XXXX.1.ILLUMINATION',        'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':10},
                        {'name':'TreppenhausEG',        'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                        {'name':'TreppenhausKG',        'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':32},
                        {'name':'FlurELW',              'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':10},
                        {'name':'KellerGang1',          'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':12},
                        {'name':'KellerGang2',          'mdetID':'hm-rpc.0.XXXX.3.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.3.BRIGHTNESS',          'lightID':'hm-rpc.0.XXXX.1.STATE',                          'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':15},
                        {'name':'TerrassenTreppe',      'mdetID':'hm-rpc.0.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':instanz + pfad0 + 'terraceStairsLightGroup',      'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                        {'name':'Bewegungsm-Gartentor', 'mdetID':'hm-rpc.0.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'shelly.0.SHSW-XXXX.Relay1.Switch',               'wishValueON':true, 'wishValueOFF':false,   'time':3, 'lightingLimit':lightingLimitDefault},
                        {'name':'Haustuere1',           'mdetID':'hm-rpc.0.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'sonoff.0.Licht-Haustuere.POWER',                 'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                        {'name':'Haustuere2',           'mdetID':'hm-rpc.0.XXXX.1.STATE',                     'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'sonoff.0.Licht-Haustuere.POWER',                 'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault},
                        {'name':'AussenkuecheTuere',    'mdetID':'hm-rpc.2.XXXX.1.STATE',                     'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'shelly.0.SHSW-XXXX.Relay0.Switch',               'wishValueON':true, 'wishValueOFF':false,   'time':3, 'lightingLimit':lightingLimitDefault},
                        {'name':'GaesteWCEG',           'mdetID':'hm-rpc.2.XXXX.1.PRESENCE_DETECTION_STATE',  'luxdetID':'hm-rpc.2.XXXX.1.ILLUMINATION',        'lightID':'shelly.0.SHSW-XXXXRelay0.Switch',                'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':2},
                        {'name':'Kueche',               'mdetID':'hm-rpc.2.XXXX.1.MOTION',                    'luxdetID':'hm-rpc.2.XXXX.1.ILLUMINATION',        'lightID':instanz + pfad0 + 'Kitchenette',                  'wishValueON':true, 'wishValueOFF':false,   'time':2, 'lightingLimit':5},
                        {'name':'Gartentor',            'mdetID':'hm-rpc.2.XXXX.1.STATE',                     'luxdetID':'hm-rpc.0.XXXX.1.LUX',                 'lightID':'shelly.0.SHSW-XXXX.Relay1.Switch',               'wishValueON':true, 'wishValueOFF':false,   'time':5, 'lightingLimit':lightingLimitDefault}
                    ];
                    
                    
                    // -----------------------------------------------------------------------------
                    // Objekte
                    // ---------.-------------------------------------------------------------------.
                    // Objekt: Lichtautomatik für Automatische Abläufe
                    
                    var KitchenetteOffValue = 0;
                    
                    
                    createState(instanz + pfad0 + 'terraceStairsLightPermOn',  {def:false, type:'boolean', name:'Treppenlicht dauerhaft ein',});
                    createState(instanz + pfad0 + 'terraceStairsLightGroup',  {def:false, type:'boolean', name:'Treppenlicht Gruppe',})
                    
                    createState(instanz + pfad0 + 'Kitchenette',  {def:false, type:'boolean', name:'Lichtlevel Kuechenzeile',})
                    
                    // #############################################################################
                    // #                                                                           #
                    // #  Funktion Geräte Stati erstellen                                          #
                    // #                                                                           #
                    // #############################################################################
                    
                    
                    async function createDeviceStates(){
                        try {
                            for(var i = 0; i < autolightList.length; i++) { 
                                await createStateAsync(instanz + pfad1 + 'timer_' + autolightList[i].name , {name: 'Timer_'+ autolightList[i].name, type:'number', def:'0', read:true, write:true});
                                await createStateAsync(instanz + pfad2 + 'blockMD_' + autolightList[i].name , {name: 'Bewegungserkennung deaktiviert', type:'state', def:false, read:true, write:true});
                            }
                        } catch (error) {
                            log(`Unexpected error - ${error}`, 'error');
                        }
                    }
                    
                    // #############################################################################
                    // #                                                                           #
                    // #  Funktion zum automatischen Einschalten des Lichts                        #
                    // #                                                                           #
                    // #############################################################################
                    function searchAutoLightList(mdID){
                        if(getState('alias.0.System_Konfiguration.Beleuchtungsautomatik.ACTUAL'/*Actual*/).val === true){
                            for(var i = 0; i < Object.keys(autolightList).length; i++) {  
                                if(autolightList[i].mdetID == mdID) {
                                    if(loglevel > 1) log('Geräteindex wurde an Stelle:' + i + ' gefunden');
                                    if(getState(instanz + pfad2 + 'blockMD_' + autolightList[i].name).val === false) {
                                        setAutoLightTimer(i);
                                    } else {
                                        if(loglevel > 1) log('Bei dem Beleuchtungsgerät:' + autolightList[i].name + ' wurde die Bewegungserkennung deaktiviert');
                                    }
                                } else {
                                    if(loglevel > 1)('Gerät wurde nicht gefunden!')
                                }
                            }
                        } else {
                            if(loglevel > 1)('Beleuchtungsautomatik ausgeschalten!')
                        }
                    }
                    
                    // #############################################################################
                    // #                                                                           #
                    // #  Funktion zum Prüfen und automatischen Auschalten des Lichts              #
                    // #                                                                           #
                    // #############################################################################
                    function setAutoLightTimer(i){
                        if(getState(autolightList[i].luxdetID).val < autolightList[i].lightingLimit) {
                            setState(autolightList[i].lightID, autolightList[i].wishValueON);
                            if(getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val != autolightList[i].time * 60){
                                if(getState(autolightList[i].lightID).val != autolightList[i].wishValueON){
                                    setState(instanz + pfad1 + 'timer_' + autolightList[i].name, autolightList[i].time * 60);
                                } else {
                                    clearInterval(timer[autolightList[i].name]);
                                    setState(instanz + pfad1 + 'timer_' + autolightList[i].name, autolightList[i].time * 60);
                                }
                                timer[autolightList[i].name] = setInterval(function () {
                                    if(getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val > 0){
                                        setState(instanz + pfad1 + 'timer_' + autolightList[i].name, getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val - 1);
                                    } else {
                                    setState(autolightList[i].lightID, autolightList[i].wishValueOFF);
                                    clearInterval(timer[autolightList[i].name]);
                                    }
                                }, 1000);
                            }
                        }
                    }
                    
                    // #############################################################################
                    // #                                                                           #
                    // #  Funktion zum zurücksetzen des Timers bei manuelem ausschalten des Lichts #
                    // #                                                                           #
                    // #############################################################################
                    function setTimerToZero(liID){
                        for(var i = 0; i < Object.keys(autolightList).length; i++) {  
                            if(autolightList[i].lightID === liID) {
                                    if(getState(instanz + pfad1 + 'timer_' + autolightList[i].name).val > 0){
                                        clearInterval(timer[autolightList[i].name]);
                                        setState(instanz + pfad1 + 'timer_' + autolightList[i].name, 0);
                                        if(loglevel > 1) log('Timer von:'+liID+' wurde wegen manuellem Ausschalten auf 0 gesetzt');
                                    }
                            }
                        }
                    }
                    
                    
                    
                    
                    // #############################################################################
                    // #                                                                           #
                    // #  Script start                                                             #
                    // #                                                                           #
                    // #############################################################################
                    
                    async function scriptStart(){
                        try{
                            createDeviceStates();
                            
                            for(var i = 0; i < Object.keys(autolightList).length; i++) {
                                await setStateAsync(autolightList[i].lightID, autolightList[i].wishValueOFF);
                                await setStateAsync(instanz + pfad1 + 'timer_' + autolightList[i].name,0);
                            }
                    
                            log ('------------------------------------------- Script Bewegungsmelder neu gestartet -------------------------------------------');
                        } catch (error) {
                            log(`Unexpected error - ${error}`, 'error');
                        }
                    }
                    
                    scriptStart();
                    
                    
                    // Beobachten der enum.functions "Bewegungsmelder"
                    $('state(functions=Bewegungsmelder)').on(function(dp) {
                        if(dp.state.val === true) {
                            if(loglevel > 1 )log('Auslösender Sensor: ' + dp.id + ': ' + dp.state.val);
                            searchAutoLightList(dp.id);
                        }
                    });
                    
                    // Beobachten der enum.functions "Beleuchtung"
                    $('state(functions=Beleuchtung)').on(function(dp) {
                        if(dp.state.val === false) {
                            setTimerToZero(dp.id);
                        }
                    });
                    
                    
                    
                    

                    Bitteschön

                    J Offline
                    J Offline
                    JojoS
                    schrieb am zuletzt editiert von
                    #9

                    @peoples Danke, das über Tabellen zu lösen finde ich auch gut. Ich habe aber nur zwei Lampen die mit dieser Automatik gesteuert werden, andere über KNX und da hat der BWM viele Einstellmöglichkeiten.
                    Sinnvoll wäre noch eine Sperre um die Automatik zu deaktivieren. Die KNX Melder haben auch eine Einstellung für Kurzzeit und längerer Anwesenheit. Bei Durchgangsräumen braucht man zB nur 30 s Licht wenn man da in 10 s durchgelaufen ist. Nur als Anregung für die eierlegende Wollmilchsau :)

                    PeoplesP 1 Antwort Letzte Antwort
                    0
                    • J JojoS

                      @peoples Danke, das über Tabellen zu lösen finde ich auch gut. Ich habe aber nur zwei Lampen die mit dieser Automatik gesteuert werden, andere über KNX und da hat der BWM viele Einstellmöglichkeiten.
                      Sinnvoll wäre noch eine Sperre um die Automatik zu deaktivieren. Die KNX Melder haben auch eine Einstellung für Kurzzeit und längerer Anwesenheit. Bei Durchgangsräumen braucht man zB nur 30 s Licht wenn man da in 10 s durchgelaufen ist. Nur als Anregung für die eierlegende Wollmilchsau :)

                      PeoplesP Offline
                      PeoplesP Offline
                      Peoples
                      schrieb am zuletzt editiert von
                      #10

                      @jojos
                      wenn du das Licht per Hand einschaltest reagiert der Timeout nicht und du kannst ja auch für jedes Licht die Zeit einzeln vorgeben. Oder wie meinst du das?

                      Ich beantworte keine Fragen zu Themen via PN

                      J 1 Antwort Letzte Antwort
                      0
                      • PeoplesP Peoples

                        @jojos
                        wenn du das Licht per Hand einschaltest reagiert der Timeout nicht und du kannst ja auch für jedes Licht die Zeit einzeln vorgeben. Oder wie meinst du das?

                        J Offline
                        J Offline
                        JojoS
                        schrieb am zuletzt editiert von
                        #11

                        @peoples bevor ich das Licht von Hand einschalten kann hat der BWM schon reagiert, funktioniert das dann auch?

                        Das andere Feature ist eine variable Zeit die davon abhängt ob einmal in 10..x s auslöse oder mehrmals. Eben wenn man nur durch den Raum durchläuft oder kurz rein-raus.

                        PeoplesP 1 Antwort Letzte Antwort
                        0
                        • J JojoS

                          @peoples bevor ich das Licht von Hand einschalten kann hat der BWM schon reagiert, funktioniert das dann auch?

                          Das andere Feature ist eine variable Zeit die davon abhängt ob einmal in 10..x s auslöse oder mehrmals. Eben wenn man nur durch den Raum durchläuft oder kurz rein-raus.

                          PeoplesP Offline
                          PeoplesP Offline
                          Peoples
                          schrieb am zuletzt editiert von
                          #12

                          @jojos
                          Wenn du drin rum läufst wird stetig neu getriggert und es bleibt an

                          Ich beantworte keine Fragen zu Themen via PN

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          769

                          Online

                          32.6k

                          Benutzer

                          82.0k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe