Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. PIR und LED Licht: Wo ist mein Fehler

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    PIR und LED Licht: Wo ist mein Fehler

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jhuebner1 last edited by

      Hallo,

      ich will eine Badbeleuchtung haben über einen Zigbee LED Streifen, der angeht, wenn Bewegung festgestellt wird.
      habe dazu einen IKEA PIR Sensor im Einsatz.
      (den Anwesenheitssensor will ich nicht, der geht ja auch durch Wände und hinter dem Bad liegt die Küche und der Flur, deswegen nur PIR).

      Ich will, das das Licht auch nur bei gewissem LUX Wert angeht.
      Der eigene IKEA Sensor hat zwar auch LUX, der spinnt aber manchmal, deswegen habe ich noch eine andere Quelle in das Script aufgenommen.

      ich habe auch noch eine andere Lampe, die genutzt wird zum Duschen, deswegen der Abgleich mit Lampe 2.

      Es klappt jetzt auch alles soweit ganz gut.

      Aaaaber:
      Irgendwie klappt das nicht. Also es klappt schon, das Erstauslösen funktioniert gut.
      Aber wenn man zB Zähne putzt und länger als die Zeit braucht, dann geht es nicht mehr an.
      Oder man hampelt rum, manchmal klappt es, manchmal nicht.

      Jetzt die Frage:
      Liegt das an meinem Script?
      Oder kommt das vom IKEA Sensor, das er ein gewisses Zeitintervall hat und deswegen nur alle zB 20 Sekunden checkt?
      Und mein script überlapt sich dann dann ggf und deswegen keine erneute Aktivierung?

      on({ id: [].concat(['deconz.0.Sensors.12.presence']), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        if ((getState('deconz.0.Sensors.12.presence').val == true) && (getState('javascript.0.Anwesenheitserkennung.Bad').val == false) && (compareTime('06:00', '07:00', 'between') || compareTime('21:30', '22:45', 'between')) && ((getState('deconz.0.Sensors.13.lux').val <= 30) || (getState('deconz.0.Sensors.3.lux').val <= 30))) {
          setState('deconz.0.Lights.13.level' /* Ledvance Lichtstreifen Bad level */, 100);
          setState('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, true);
          setStateDelayed('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, false, 180000, false);
        } else if ((getState('deconz.0.Sensors.12.presence').val == true) && (getState('javascript.0.Anwesenheitserkennung.Bad').val == false) && (compareTime('06:00', '07:00', 'not between') || compareTime('21:30', '22:45', 'not between')) && ((getState('deconz.0.Sensors.13.lux').val <= 30) || (getState('deconz.0.Sensors.3.lux').val <= 30))) {
          setState('deconz.0.Lights.13.level' /* Ledvance Lichtstreifen Bad level */, 100);
          setState('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, true);
          setStateDelayed('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, false, 45000, false);
        }
      });
      

      Das ganze als Blockly:
      Screenshot 2024-10-07 100610.png

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @jhuebner1 last edited by paul53

        @jhuebner1 sagte: Liegt das an meinem Script?

        Ja, das Licht wird nach der Verzögerungszeit von 3 min bzw. 45 s zwangsweise ausgeschaltet, da die Timer bei erneuter Bewegungserkennung nicht gestoppt werden.
        Vorschlag:

        Blockly_temp.JPG

        Was hat es mit dem DP "javascript.0.Anwesenheitserkennung.Bad" auf sich?

        J 1 Reply Last reply Reply Quote 0
        • J
          jhuebner1 @paul53 last edited by

          @paul53
          Danke, schau ich mir an und versuche es nachzubauen.

          Das javascript.0.Anwesenheitserkennung.Bad ist genau mein "Duschszenario".
          Ich weiß, hat mit Anwesenheit nix zu tun, aber so hab ich angefangen und lass das alles im gleichen verzeichnis liegen.....

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @jhuebner1 last edited by paul53

            @jhuebner1 sagte: javascript.0.Anwesenheitserkennung.Bad ist genau mein "Duschszenario".

            Ich habe es in der Version mit nur einem Timeout als "Duschlicht" bezeichnet:

            Blockly_temp.JPG

            J 1 Reply Last reply Reply Quote 0
            • J
              jhuebner1 @paul53 last edited by

              @paul53
              Irgendwas hat da bei mir nicht geklappt.
              Mal ging es, mal ging es nicht....

              Ich hab das jetzt mal durch ChatGPD gejagd und das kam dabei rum:

              var timeout, timeout2;
              
              function clearPreviousTimeouts() {
                if (timeout) { clearTimeout(timeout); timeout = null; }
                if (timeout2) { clearTimeout(timeout2); timeout2 = null; }
              }
              
              on({ id: [].concat(['deconz.0.Sensors.12.presence']), change: 'ne' }, (obj) => {
                let value = obj.state.val;
                let oldValue = obj.oldState.val;
                
                // Prüfen, ob der Sensor auf Anwesenheit schaltet und Lichtsteuerungsbedingungen erfüllt sind
                if (value && !getState('javascript.0.Anwesenheitserkennung.Bad').val && 
                    (getState('deconz.0.Sensors.13.lux').val <= 20 || getState('deconz.0.Sensors.3.lux').val <= 30)) {
                    
                  // Wenn innerhalb der Zeitbereiche
                  if (compareTime('06:00', '07:00', 'between') || compareTime('21:30', '22:45', 'between')) {
                    clearPreviousTimeouts();
                    
                    setState('deconz.0.Lights.13.level', 100); // Setze Lichtlevel auf 100%
                    setState('deconz.0.Lights.13.on', true);   // Schalte das Licht ein
                    
                    // Timeout nach 3 Minuten
                    timeout = setTimeout(() => {
                      timeout = null;
                      setState('deconz.0.Lights.13.on', false);  // Schalte das Licht aus
                    }, 180000);
                    
                  } else {
                    clearPreviousTimeouts();
                    
                    setState('deconz.0.Lights.13.level', 100);
                    setState('deconz.0.Lights.13.on', true);
                    
                    // Timeout nach 1 Minute
                    timeout2 = setTimeout(() => {
                      timeout2 = null;
                      setState('deconz.0.Lights.13.on', false);  // Schalte das Licht aus
                    }, 60000);
                  }
                }
              });
              
              
              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              1.2k
              Online

              31.7k
              Users

              79.7k
              Topics

              1.3m
              Posts

              blockly javascript
              2
              5
              211
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo