Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern

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

      bekomme es nicht hin

      //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
      //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
      //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
      //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
      const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
      const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
      const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
      const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
      const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
      const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
      const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
      const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
      const idTaster_virtu = 'javascript.0.Bewegungsmelder.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
      const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
      const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
      const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
      const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
      const idTasterWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Taster'/*Bewegung WestSued Taster*/;
      const idTasterWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Taster'/*Bewegung WestNord Taster*/;
      
      var bewegung1 = getState(idBewegung1).val;
      var bewegung2 = getState(idBewegung2).val;
      var licht1 = getState(idLicht1).val;
      var licht2 = getState(idLicht2).val;
      var taster1_1 = getState(idTaster1_1).val;
      var taster1_2 = getState(idTaster1_2).val;
      var taster2_1 = getState(idTaster2_1).val;
      var taster2_2 = getState(idTaster2_2).val;
      var tasterWestSued= getState(idTasterWestSued).val;
      var tasterWestNord= getState(idTasterWestNord).val;
      var helligkeit = getState(idHelligkeit).val;
      var elevation = getState(idElevation).val;
      var timer1 = null;
      var timer2 = null;
      var dauer = 30; //5min in Sekunden
      
      var taster_virtu = getState(idTaster_virtu).val;
      var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
      var elevation_grenze = getState(idGrenzwertElevation).val;
      
      on(idLicht1, function(dp) {
         licht1 = dp.state.val;
      });
      on(idLicht2, function(dp) {
         licht2 = dp.state.val;
      });
      
      //Licht durch Bewegungsmelder
      on([idBewegung1, idBewegung2], function(dp) {
          if (!taster_virtu && dp.state.val) {
              if(!licht1) setState(idLicht1, true);
              if(!licht2) setState(idLicht2, true);
              if (!tasterWestSued) {     //Wandtaster
                  if(timer1) clearTimeout(timer1);
                  timer1 = setTimeout(function() {
                      setState(idLicht1, false);
                      timer1 = null;
                  }, 1000 * dauer);
              }
              if (!tasterWestNord) {     //Wandtaster
                  if(timer2) clearTimeout(timer2);
                  timer2 = setTimeout(function() {
                      setState(idLicht2, false);
                      timer2 = null;
                  }, 1000 * dauer);
              }
          }
      });
      
      //Virtueller Taster an/aus
      on(idTaster_virtu, function(dp) {
          taster_virtu = dp.state.val;
          if(timer1) {
              clearTimeout(timer1);
              timer1 = null;
          }
          if(timer2) {
              clearTimeout(timer2);
              timer2 = null;
          }
          if(!taster_virtu) {
              if(licht1) setState(idLicht1, false);
              if(licht2) setState(idLicht2, false);
          } else {
              var helligkeit = getState(idHelligkeit).val;
              var elevation = getState(idElevation).val;
              if (helligkeit < helligkeit_grenze || elevation <= elevation_grenze) {
                  if(!licht1) setState(idLicht1, true);
                  if(!licht2) setState(idLicht2, true);
              }
          }
      });
      
      //Wandtaster WestSued
      on({id: [idTaster1_1, idTaster1_2]}, function() {
          if (licht1) setState(idTasterWestSued, false);
          else setState(idTasterWestSued, true);
          if(timer1) { // Timer läuft --> Licht bleibt an
              clearTimeout(timer1);
              timer1 = null;
          } 
          else setState(idLicht1, !licht1); // Toggle
      });
      
      //Wandtaster WestNord
      on({id: [idTaster2_1, idTaster2_2]}, function() {
          if (licht2) setState(idTasterWestNord, false);
          else setState(idTasterWestNord, true);
          if(timer2) { // Timer läuft --> Licht bleibt an
              clearTimeout(timer2);
              timer2 = null;
          } 
          else setState(idLicht2, !licht2); // Toggle
      });
      

      irgendwo hab ich nen Denkfehler drin. Wenn Bewegungsmelder ausgelöst hat und ich dann einen Wandtaster drücke, dann soll das Licht anbleiben und auch nicht nach der abgelaufenen Zeit aus dem Bewegungsmelder ausgehen. Das 2. Licht, wo der Taster nicht zugehört, soll entsprechend ausgehen.
      2. Fall: wenn ein Licht über den Wandtaster an ist und der Bewegungsmelder löst aus, dann soll das eine Licht aber nicht ausgehen, wenn der Timer aus de Bewegungsmelder abläuft. macht er aber....

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @mguenther last edited by Asgothian

        ... nix zu sehen - @paul53,s Feld

        M 1 Reply Last reply Reply Quote 0
        • M
          mguenther @Asgothian last edited by

          @Asgothian sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

          @mguenther Dumme Frage: kannst du die Taster betätigen ohne den BM auszulösen ? Wenn nein, dann setzt der BM den timer wieder nachdem du den Taster gedrückt hast.

          wenn das so ist, brauchst du:
          Pro Taster eine Variable “licht_mit_diesem_taster_eingeschaltet”
          Die setzt du auf wahr wenn man mit dem Schalter das Licht an macht, und auf false wenn das Licht aus geht (entweder per Event am Licht oder im Schalter-Event.
          Und im timer, bevor du das Licht ausschaltest fragst du sie ab.. bei true - nix tun.

          A.
          Ich bin gerade unterwegs und kann dir das nicht sauber in js en - ich hoffe der Hinweis reicht aber.

          hab ich ja.

          const idTasterWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Taster'/*Bewegung WestSued Taster*/;
          const idTasterWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Taster'/*Bewegung WestNord Taster*/;
          

          werden entsprechend auf true/false gesetzt. Ich habe aber irgendwo oben nen Denkfehler drin bei dem Vorschlag von Paul

          Asgothian 2 Replies Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @mguenther last edited by Asgothian

            ... nix zu sehen - @paul53,s Feld

            1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @mguenther last edited by Asgothian

              ... nix zu sehen...

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

                Bitte nicht wild rumprobieren !

                M 1 Reply Last reply Reply Quote 0
                • M
                  mguenther last edited by

                  habs - danke an Asgothian

                  //Licht durch Bewegungsmelder
                  on([idBewegung1, idBewegung2], function(dp) {
                      tasterWestNord=getState(idTasterWestNord).val;
                      tasterWestSued=getState(idTasterWestSued).val;
                      if (!taster_virtu && dp.state.val) {
                          if(!licht1) setState(idLicht1, true);
                          if(!licht2) setState(idLicht2, true);
                          if(timer1) clearTimeout(timer1);
                          timer1 = setTimeout(function() {
                              if (!tasterWestSued) setState(idLicht1, false);    //Wandtaster
                              timer1 = null;
                          }, 1000 * dauer);
                          if(timer2) clearTimeout(timer2);
                          timer2 = setTimeout(function() {
                              if (!tasterWestNord) setState(idLicht2, false);   //Wandtaster
                              timer2 = null;
                          }, 1000 * dauer);
                      }
                  });
                  
                  Asgothian 1 Reply Last reply Reply Quote 0
                  • Asgothian
                    Asgothian Developer @mguenther last edited by

                    @mguenther
                    Fein. Sorry für die gelöschten Posts, ich wollte Paul nicht auf ie Füße treten.

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

                      @paul53 sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

                      Bitte nicht wild rumprobieren !

                      Paul, ich habe mir 2 Variablen gesetzt, um die Betätigung des Wandtasters abzufangen.
                      Hatte die beiden nur falsch eingesetzt.

                      Danke euch beiden an der Stelle!

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

                        //Wandtaster WestNord
                            on({id: [idTaster2_1, idTaster2_2]}, function() {
                                if (licht2) tasterWestNord = false;
                                else tasterWestNord = true;
                                if(timer2) { // Timer läuft --> Licht bleibt an
                                    tasterWestNord = true;
                                    clearTimeout(timer2);
                                    timer2 = null;
                                } 
                                else setState(idLicht2, !licht2); // Toggle
                            });
                        
                        1 Reply Last reply Reply Quote 0
                        • M
                          mguenther last edited by mguenther

                          @paul53, habe ich nochmal angepasst

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          943
                          Online

                          31.9k
                          Users

                          80.2k
                          Topics

                          1.3m
                          Posts

                          javascript
                          3
                          27
                          1230
                          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