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] 3 BWMs ein Timer

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst] 3 BWMs ein Timer

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 880 Aufrufe
  • Ä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.
  • C Offline
    C Offline
    Creator
    schrieb am zuletzt editiert von
    #1

    Ich habe 3 BWMs auf drei Etagen Eg, OG, DG

    Alle zusammen sollen eine Licht quelle Schalten ( Indirektes Licht im Treppenhaus )

    /**
     * Einschalten der Indirekten Beleuchtung im Treppenhaus
     * Regeln:
     * - Brenndauer 15min
     * - Melder werden überstimmt durch Hauptlicht in der jeweiligen Etage *  
     **/
    
     var interval = 15;
    
     var motionDetector_DG = "hm-rpc.1.NEQ0509829.6.SENSOR"/*BWM_FLUR_DG:6.SENSOR*/,
         motionDetector_OG = "hm-rpc.1.NEQ0509829.3.SENSOR"/*BWM_Indirektes_Licht_Flur_OG:3.SENSOR*/,
         motionDetector_EG = "hm-rpc.1.NEQ0509829.1.SENSOR"/*BWM_Hauptlicht_Flur_EG:1.SENSOR*/;
    
     var light_DG = "hm-rpc.1.MEQ0279026.13.STATE"/*Flur_DG_Licht:13.STATE*/,
         light_OG = "hm-rpc.1.NEQ0891202.19.STATE"/*Flur_OG_Licht:19.STATE*/,
         light_EG = "hm-rpc.1.NEQ0891532.15.STATE"/*Flur_EG_Licht:15.STATE*/;
    
     var indirectLight = "hm-rpc.1.NEQ0891532.16.STATE"/*EG_OG_DG_Indirekts_Licht:16.STATE*/;
    
     var counter = 900; // Counter in Sekunden angeben 
    
     var timer = false;
    
     // liefert Minuten in ms zurück
      function getMS(){
         var ms = interval * 60 * 1000;
         return ms;
     }
    
    function sleep (time) {
        // Wenn schon ein Timer existiert diesen löschen!
        if(timer !== false){
            timer = false;    
        }
        // bei jedem Aufruf einen neuen erstellen. Zeit resetten
        timer = new Promise((resolve) => setTimeout(resolve, time));
        return timer;
    }
    
    function triggerIndirectLight(){
        if(!getState(indirectLight).val){
            setState(indirectLight, true);
            log('Licht an');
        }
        sleep(getMS()).then(() => {
            setState(indirectLight, false);
            log('Licht aus');
        });
    }
    
    // DG
    on({id: motionDetector_DG}, function (obj) {
        if (!obj.state.val) {
            // NUr wenn das Hauptlicht aus ist, darf das Licht eingeschaltet werden.
            if(!getState(light_DG).val){
                log('BWM Flur DG reagiert!');
                triggerIndirectLight();
            }
        }
    });
    
    // OG
    on({id: motionDetector_OG}, function (obj) {
        if (!obj.state.val) {
            // NUr wenn das Hauptlicht aus ist, darf das Licht eingeschaltet werden.
            if(!getState(light_OG).val){
                log('BWM Flur OG reagiert!');
                triggerIndirectLight();
            }
        }
    });
    
    // EG
    on({id: motionDetector_EG}, function (obj) {
        if (!obj.state.val) {
            // NUr wenn das Hauptlicht aus ist, darf das Licht eingeschaltet werden.
            if(!getState(light_EG).val){
                log('BWM Flur EG reagiert!');
                triggerIndirectLight();
            }
        }
    });
    
    

    Mein Problem ist, dass die einzelnen Melder sich nicht den selben Timer zu teilen scheinen.

    Im Grunde möchte ich nur, dass jede Bewegung der 3 Melder den Timer zurücksetzt.

    An welcher stelle habe ich Pech beim denken? :oops:

    1 Antwort Letzte Antwort
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von
      #2

      Könnte sein, dass deine Promise-Logik nicht ganz stimmt. Was du probieren kannst (halb JS, halb Pseudocode):

      var timer = null;
      
      bei Trigger:
          lichtAn();
          // Timer löschen, damit Licht an bleibt
          if (timer) clearTimeout(timer);
          // Timer neu setzen ab jetzt
          timer = setTimeout(dauerLichtAn, function() {
              timer = null; // Timer abgelaufen, jetzt löschen
              lichtAus(); // und Licht ausschalten
          });
      
      

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Antwort Letzte Antwort
      0
      • C Offline
        C Offline
        Creator
        schrieb am zuletzt editiert von
        #3

        Danke für die Hilfe.

        Ich habe es jetzt hinbekommen.

        /**
         * Einschalten der Indirekten Beleuchtung im Treppenhaus
         * Regeln:
         * - Brenndauer 5min
         * - Melder werden überstimmt durch Hauptlicht in der jeweiligen Etage *  
         **/
        
         var interval = 5;
        
         var motionDetector_DG = "hm-rpc.1.NEQ0509829.6.SENSOR"/*BWM_FLUR_DG:6.SENSOR*/,
             motionDetector_OG = "hm-rpc.1.NEQ0509829.3.SENSOR"/*BWM_Indirektes_Licht_Flur_OG:3.SENSOR*/,
             motionDetector_EG = "hm-rpc.1.NEQ0509829.1.SENSOR"/*BWM_Hauptlicht_Flur_EG:1.SENSOR*/;
        
         var light_DG = "hm-rpc.1.MEQ0279026.13.STATE"/*Flur_DG_Licht:13.STATE*/,
             light_OG = "hm-rpc.1.NEQ0891202.19.STATE"/*Flur_OG_Licht:19.STATE*/,
             light_EG = "hm-rpc.1.NEQ0891532.15.STATE"/*Flur_EG_Licht:15.STATE*/;
        
         var indirectLight = "hm-rpc.1.NEQ0891532.16.STATE"/*EG_OG_DG_Indirekts_Licht:16.STATE*/;
        
         var timer = null;
        
         // liefert minuten in ms zurück
          function getMS(){
             var ms = interval * 60 * 1000;
             return ms;
         }
        
        function triggerIndirectLight(){
            if(!getState(indirectLight).val){
                setState(indirectLight, true);
                log('Indirektes Licht an');
            }
        
            // Timer löschen, damit Licht an bleibt
            if (timer){
                clearTimeout(timer);
                log('Reset Timer');
            } 
        
            // Timer neu setzen ab jetzt
            timer = setTimeout(function() {
                timer = null; // Timer abgelaufen, jetzt löschen
                setState(indirectLight, false);
                log('Indirektes Licht aus');
            }, getMS());
        }
        
        // DG
        on({id: motionDetector_DG}, function (obj) {
            if (!obj.state.val) {
                // NUr wenn das Hauptlicht aus ist, darf das Licht eingeschaltet werden.
                if(!getState(light_DG).val){
                    log('BWM Flur DG reagiert!');
                    triggerIndirectLight();
                }
            }
        });
        
        // OG
        on({id: motionDetector_OG}, function (obj) {
            if (!obj.state.val) {
                // NUr wenn das Hauptlicht aus ist, darf das Licht eingeschaltet werden.
                if(!getState(light_OG).val){
                    log('BWM Flur OG reagiert!');
                    triggerIndirectLight();
                }
            }
        });
        
        // EG
        on({id: motionDetector_EG}, function (obj) {
            if (!obj.state.val) {
                // NUr wenn das Hauptlicht aus ist, darf das Licht eingeschaltet werden.
                if(!getState(light_EG).val){
                    log('BWM Flur EG reagiert!');
                    triggerIndirectLight();
                }
            }
        });
        
        

        Etwas gemein war, das setTimeout() die Parameter genau umgekehrt erwartet.

        1 Antwort Letzte Antwort
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von
          #4

          @Creator:

          Etwas gemein war, das setTimeout() die Parameter genau umgekehrt erwartet. `
          Ooops, ich verwechsel das immer. Zum Glück gibt's Auto-Vervollständigung in Entwicklungsumgebungen :D

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Antwort Letzte Antwort
          0
          • frankjokeF Offline
            frankjokeF Offline
            frankjoke
            schrieb am zuletzt editiert von
            #5

            Das wäre was für die StateMachine :)

            http://forum.iobroker.net/viewtopic.php?f=21&t=5556

            Frank,

            NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
            Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

            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

            639

            Online

            32.6k

            Benutzer

            82.1k

            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