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. Bewegungsmelder & Zeitsteuerung

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Bewegungsmelder & Zeitsteuerung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 5 Kommentatoren 2.6k 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.
  • arteckA Offline
    arteckA Offline
    arteck
    Developer Most Active
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Seehofweg
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          Seehofweg
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tempestas
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                Seehofweg
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  pix
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • AlCalzoneA Offline
                    AlCalzoneA Offline
                    AlCalzone
                    Developer
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      Seehofweg
                      schrieb am zuletzt editiert von
                      #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 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

                      704

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      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