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.0k

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

  • 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.
  • 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

                        738

                        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