Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    1.1k

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.6k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    6.2k

[gelöst] 3 BWMs ein Timer

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 937 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

            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

            Registrieren Anmelden
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            194

            Online

            33.0k

            Benutzer

            83.6k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2026
            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