Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Doppelte Ausführung von Skriptcode.

    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

    Doppelte Ausführung von Skriptcode.

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

      Hi,

      ich habe den folgenden Skriptcode. Im Allgemeinen habe ich einen Schalter, mit dem ich durch Drücken der EIN Taste eine Lampe für xx Sekunden leuchten lassen möchte. Wenn man die Taste öfter drückt, werden wieder XX Sekunden auf den Zähler addiert. Der Zahler wird dann wieder heruntergezählt, bis das Licht ausgeschaltet wird. Im Endeffekt ähnlich wie bei einem Treppenlicht nur mit dieser additiven Funktion.

      Was ich jetzt in der Log Ausgabe sehe, ist, dass die Log Ausgabe pro abgelaufenen Timer (hier alle 5 Sekunden) zweimal ausgeführt wird.

      Hat jemand eine Idee?

      
      createState('Aussenbeleuchtung_Eingang_CountDown', 0); 
      createState('Aussenbeleuchtung_Eingang_CountDown_State', false); 
      
      // Auslösung mit Homematic Hardware-Taster
      on({
          id: "hm-rpc.1.XXXXXX.1.STATE"/*Taster XXXXX.PRESS_SHORT*/,
          val: true
          }, function(obj) 
              {
      
                  log("Hier");
                  var current_countdown = getState('Aussenbeleuchtung_Eingang_CountDown').val || 30;
      
                  if( current_countdown != 30)
                   {   current_countdown += 30;}
      
                  setState('Aussenbeleuchtung_Eingang_CountDown', current_countdown); 
      
                  if(!getState("Aussenbeleuchtung_Eingang_CountDown_State").val)
                  {    count();}
              }
      );
      
      function count() {
          setTimeout(function () {
              var countdown = getState('Aussenbeleuchtung_Eingang_CountDown').val;
              setState("Aussenbeleuchtung_Eingang_CountDown_State",true);
      
              log("Countdown ist: "+ countdown);
      
              if (countdown >= 1) {
                  setState('Aussenbeleuchtung_Eingang_CountDown', countdown - 1);
                  count();
              }
              else
                setState("hm-rpc.1.XXXXXX.1.STATE",false);
                setState("Aussenbeleuchtung_Eingang_CountDown_State",false);
          }, 5000);
      }
      
      
      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        Du prüfst in "on" nicht auf den "ack" Flag … also damit hast Du theoretisch einmal nen call mit "ack=false" und sobald vom Gerät bestätigt mit "ack=true" ... Kann das der Grund sein?

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

          Will man retriggern, sollte der Timer vorher gelöscht werden:

          ...
          var timer = null;
          
          function count() {
              if(timer) clearTimeout(timer);
              timer = setTimeout(function () {
                  ...
          
          1 Reply Last reply Reply Quote 0
          • M
            MistyReblaus last edited by

            Hallo ihr beiden,

            ja, es war beides korrekt. Sowohl den TImer muss ich zurücksetzten damit es sauber ist, als auch auf das ack flag schauen. Da ich erst mit der Programmierung anfange, bin ich froh über jedes Beispiel und Frage, die ich hier beitragen kann, auch wenn Sie noch so einfach erscheint 😉

            Grüße, Jens

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

            Support us

            ioBroker
            Community Adapters
            Donate

            490
            Online

            31.7k
            Users

            79.8k
            Topics

            1.3m
            Posts

            3
            4
            996
            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