Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Bewegungsmelder & Zeitsteuerung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    756

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

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

Bewegungsmelder & Zeitsteuerung

Scheduled Pinned Locked Moved Skripten / Logik
11 Posts 5 Posters 2.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Seehofweg
    wrote on last edited by
    #1

    Hallo zusammen,

    ich versuche mich schon länger an einem Script, welches meine Bewegungsmelder mit Hue verbindet, dies aber zeitgesteuert. Das ist mein bisheriger Stand…

    var stunde = datum.getHours();
    log ('stunde');
    
    //Tagsüber 6-22 Uhr
    if (stunde > 6 && stunde < 22);
    on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp) {
       if(dp.state.val) log('Bewegung im Bad EG erkannt');
       setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp.state.val);
    });
    
    //Nachts
    else if (stunde > 22  && stunde < 6);
    on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp1) {
       if(dp1.state.val) log('Bewegung im Bad EG erkannt');
       setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp1.state.val);
       setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).level', 50);
    });
    
    

    Wenn ich unten nur "else" verwende, kommt eine Fehlermeldung. Obwohl ich dies, meines Erachtens, so wie in den Tutorials umgesetzt habe. :(

    Weiß jemand, woran das liegt? Funktioniert das überhaupt, dass ich den Status des Bewegungsmelder auf die Hue übertrage und dann noch die Level-Variable setze?

    Dank euch um Voraus und viele Grüße

    Tobi

    1 Reply Last reply
    0
    • arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      wrote on last edited by
      #2

      auf die klammersetzung kommt es an und semikol

      ; schliesst immer eine Zeile ab kommt aber nicht am ende des If

      if (was weiss ich ) {
      
      } else {
      
      }
      
      
      //Tagsüber 6-22 Uhr
      if (stunde > 6 && stunde < 22) {
        on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp) {
           if(dp.state.val) log('Bewegung im Bad EG erkannt');
           setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp.state.val);
        });
      }
      
      // Nachts
      if (stunde > 22  && stunde < 6) {
        on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp1) {
           if(dp1.state.val) log('Bewegung im Bad EG erkannt');
           setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp1.state.val);
           setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).level', 50);
        });
      }
      

      wobei ich würde garnicht hier mit else arbeiten..Fragst eh die Uhrzeit nochmal ab

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      1 Reply Last reply
      0
      • AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        wrote on last edited by
        #3

        Wenn ich das richtig verstehe, willst du bei Auslösen des Bewegungsmelders in Abhängigkeit der Uhrzeit verschiedene Aktionen ausführen.

        Dann sollte die Struktur des Skripts das auch wiedergeben:

        Auslöser => Uhrzeit prüfen => Aktionen ausführen
        

        Etwa so (ungetestet):

        on('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function (dp) {
        
            var stunde = (new Date()).getHours();
        
            // es wird immer geschaltet, entweder an oder aus, je nach Bewegung
            setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', dp.state.val);
        
            if (dp.state.val) { // Bewegungsmelder hat was gesehen
                log('Bewegung im Bad EG erkannt');
                // Abhängig von Uhrzeit die Helligkeit anpassen
                if (stunde > 6 && stunde < 22) {
                    // tagsüber hell
                    setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).level', 100);
                } else {
                    // nachts dunkler
                    setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).level', 50);
                }
            } else {  // länger keine Bewegung
                log('Keine Bewegung mehr im Bad EG');
            }
        
        });
        

        P.S.: Deine If-ElseIf-Bedingung hatte eine Lücke, von 6:00 bis 6:59 und 22:00 bis 22:59 würde es gar nichts tun. Entweder if-else oder if-elseif mit < und >=

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

        1 Reply Last reply
        0
        • S Offline
          S Offline
          Seehofweg
          wrote on last edited by
          #4

          Super…vielen vielen Dank!!! Irgendwie war dieses Thema für mich der Script-Durchbruch, bei dem sich der Knoten gelöst hat. :D Die Steuerung läuft und ich habe zusätzlich noch eine Überprüfung der Helligkeit eingebaut. Und jetzt ist meine Frau sogar zufrieden mit der Automatisierung.

          Danke!

          1 Reply Last reply
          0
          • S Offline
            S Offline
            Seehofweg
            wrote on last edited by
            #5

            Ich muss das Thema nochmal aufmachen. Ich hatte seit Nutzung der Skripte immer mal wieder das Problem, dass sich die Bewegungsmelder nicht zurückgesetzt haben bzw. teilweise auch die korrekte Statusänderung zwar in iobroker erfasst (Objekte), aber im Programm nicht sauber ausgewertet wurde.

            Deshalb würde ich gerne das Zurücksetzen bzw. die Zeitsteuerung im Skript machen. Das ist mein aktueller Stand:

            on ('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function () {
            
            //Definitionen
                var zeit1 = 4; //6 Uhr, da +2 Stunden
                var zeit2 = 18; //20 Uhr, da +2 Stunden
                var illu_ziel = 150;
            
            //Zeit auslesen
                var stunde = (new Date()).getHours();
                log('Zeit: ' + stunde);
            
            //Helligkeit auslesen
                var illu = getState('javascript.0.helligkeiten.illu_eg_bad').val;
                log('Helligkeit: ' + illu);
            
            //Lampen schalten
                if (illu >= illu_ziel) { 
                        log('Bewegung erkannt, aber zu hell, keine Aktion'); 
            
                } else {
            
                    setState ('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', true);
            
                            if (stunde > zeit1 && stunde < zeit2) {
                                // tagsüber hell und weiß
                                setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).level', 100);
                                setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).ct', 350);
                                log('Tag');
                            } else  {
                                // nachts dunkler und warmweiß
                                setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).level', 40);
                                setState('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).ct', 500);
                                log('Nacht');
                            }
                }
            
            //Lampen werden nach 120s wieder ausgeschalten
            setTimeout(function(){ setState ('hue.1.Bridge_-_EG_2.a.Badezimmer_(Decke).on', false) }, 120000);
            
            });
            

            Hier habe ich zwei Fragen und hoffe, jemand kann mir helfen…

            1. weshalb wird die Zeit mit -2 Stunden ausgegeben?

            2. wenn das Licht bereits an ist, gehen die Lampen nicht erneut an. Da die Helligkeit ja in diesem Moment noch ausreichend ist. Ich wollte eine Abfrage einbauen, dass wenn eine Bewegung erkannt wird, geprüft wird, ob die Lichter bereits an sind und wenn ja, der Timer wieder zurückgesetzt wird. Aber ich bekomme das nicht hin.

            1 Reply Last reply
            0
            • AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              wrote on last edited by
              #6

              @Seehofweg:

              1. weshalb wird die Zeit mit -2 Stunden ausgegeben? `
              Läuft dein Skript auf einem Raspberry Pi? Wenn ja, ist die richtige Zeitzone eingestellt?

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

              1 Reply Last reply
              0
              • T Offline
                T Offline
                tempestas
                wrote on last edited by
                #7

                Hallo Seehofweg,

                schau mal hier zum Thema clearTimeout;

                https://www.w3schools.com/jsref/met_win … imeout.asp

                das müsste es sein, was du für Frage 2 brauchst.

                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  Seehofweg
                  wrote on last edited by
                  #8

                  Servus,

                  ich bräuchte wohl genau das Gegenteil…ich würde das Timeout bei einer erneuten Bewegung gerne auf den ursprünglichen Anfangswert zurück setzen. :)

                  Ahhh...die Zeit wird auf der Raspberry ausgelesen. Werd ich gleich mal checken. Dank!

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pix
                    wrote on last edited by
                    #9

                    Hallo,

                    habs mal so gebaut:

                    ! ````
                    //Lampen werden nach 120s wieder ausgeschalten
                    var idStatusHue = 'hue.1.Bridge_-EG_2.a.Badezimmer(Decke).on';
                    var timer = null; // Timer leer
                    ! //Definitionen
                    var zeit1 = 4; //6 Uhr, da +2 Stunden
                    var zeit2 = 18; //20 Uhr, da +2 Stunden
                    var illu_ziel = 150;
                    ! on ('hm-rpc.1.000C17099A04A9.1.PRESENCE_DETECTION_STATE', function () {
                    ! //Zeit auslesen
                    var stunde = (new Date()).getHours();
                    log('Zeit: ' + stunde);

                    //Helligkeit auslesen
                    var illu = getState('javascript.0.helligkeiten.illu_eg_bad').val;
                    log('Helligkeit: ' + illu);

                    //Lampen schalten
                    if (illu >= illu_ziel) {
                    log('Bewegung erkannt, aber zu hell, keine Aktion');

                    } else if (illu < illu_ziel || getState(idStatusHue).val === true ) { // Helligkeit niedriger als Grenzwert oder Lampe bereits an
                    
                        setState (idStatusHue, true);
                    

                    ! if (stunde > zeit1 && stunde < zeit2) {
                    // tagsüber hell und weiß
                    setState('hue.1.Bridge_-EG_2.a.Badezimmer(Decke).level', 100);
                    setState('hue.1.Bridge_-EG_2.a.Badezimmer(Decke).ct', 350);
                    log('Tag');
                    } else {
                    // nachts dunkler und warmweiß
                    setState('hue.1.Bridge_-EG_2.a.Badezimmer(Decke).level', 40);
                    setState('hue.1.Bridge_-EG_2.a.Badezimmer(Decke).ct', 500);
                    log('Nacht');
                    }
                    }

                    //Lampen werden nach 120s wieder ausgeschaltet
                    if (timer) clearTimeout(timer); // wenn aktuell Timer läuft (weil letzte Bewegung vor weniger als 120s, dann Timer löschen
                    timer = setTimeout(function() { // sofort neuen Timer starten
                    timer = null; // zuerst nach Ablauf Timer wieder auf null
                    if (getState(idStatusHue).val) setState (idStatusHue, false); // nach Ablauf Licht aus, wenn vorher an
                    }, 1000 * 120); // 120s

                    });

                    Wenn Bewegung und Helligkeit ist größer als Grenzwert, dann keine Aktion (außer Timer).
                    
                    Wenn Bewegung und Helligkeit ist niedriger als Grenzwert oder Wenn Bewegung und Lampe schon an, dann nochmal Licht an (mit neuen Farbwerten).
                    
                    Timer wird nach Ablauf gelöscht und bei Bewegung neu gestartet.
                    
                    Gruß
                    
                    Pix

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Reply Last reply
                    0
                    • AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      wrote on last edited by
                      #10

                      @Seehofweg:

                      ich würde das Timeout bei einer erneuten Bewegung gerne auf den ursprünglichen Anfangswert zurück setzen. `
                      Schematisch geht das so:

                      var timer;
                      // ursprünglicher Timeout
                      timer = setTimeout(...)
                      
                      
                      // "Reset" des Timers:
                      if (timer != null) clearTimeout(timer);
                      timer = setTimeout(...)
                      
                      

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

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        Seehofweg
                        wrote on last edited by
                        #11

                        Hey…ich danke euch! Und natürlich ganz besonders pix! :D Das Skript funktioniert super. Da ich mir gesagt habe, dass ich kein Skript einbaue, welches ich nicht verstehe, bin ich inzwischen auch damit durch. Ja, schön gelöst.

                        Euch noch einen schönen Abend!

                        1 Reply Last reply
                        0

                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                        With your input, this post could be even better 💗

                        Register Login
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        555

                        Online

                        32.8k

                        Users

                        82.7k

                        Topics

                        1.3m

                        Posts
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Home
                        • Recent
                        • Tags
                        • Unread 0
                        • Categories
                        • Unreplied
                        • Popular
                        • GitHub
                        • Docu
                        • Hilfe