Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Verständnis frage : Timeouts innerhalb Funktionen

    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

    [Gelöst] Verständnis frage : Timeouts innerhalb Funktionen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Dutchman
      Dutchman Developer Most Active Administrators last edited by

      Hi,

      Kurz ne frage an die Profis.

      Ich hatte ein script mit trigger und if-then Kontrolle nach einem bestimmten stats, wen ja eine function welche mit einem time-out nach 30 Minuten das system anschaltet.

      Diesen timeout habe ich in die function hinterlegt, das clear time-out in der If-Then abfrage.

      Bei true : starte function, innerhalb der Funktion ein time-out und dan schalten.

      Bei False : stoppe de timer

      Stimmt es das der time-out welcher in de function gesetzt wird nicht ausgeschaltet wird wen ich den clear time-out ausserhalb der function wieder bei der IF-Then abfrage triggere ?

      Es ist mir aufgefallen das obwohl die if-abfrage FALSE war die Schaltung trotzdem erfolgte.

      ~Dutch

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        Kannst du mal deinen Code zeigen?

        Ein Timer sollte sich immer innerhalb eines Skripts löschen lassen. Vorausgesetzt er hat einen eindeutigen Namen.

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

          Du solltest eine variable im global scope definieren in welche du später dann das Timeout schreibst - so ist die Timeoutvariable im gesamten Skript verfügbar.

          var timeout1;
          
          function nameFunction() {
              timeout1 = setTimeout( ...... );
          }
          
          on(......) {
              if (.....) {
                  nameFunction();
              } else {
                  clearTimeout(timeout1);
              }
          }
          
          

          Gruß

          1 Reply Last reply Reply Quote 0
          • Dutchman
            Dutchman Developer Most Active Administrators last edited by

            Hmm der Fehler sitzt wohl an der Tastatur ich werde mein script nochmal gründlich überschauen.

            Da dies ziemlich Gross ist haben ich zum Testen der timer und time reset mal ein einfacheres erstellt mit 2 scenarien:

            • timer_1 wird gestartet innerhalb einer function und reset über eine 2te function

            • Timer_2 wird gestartet innerhalb einer Function und reset innerhalb der IF abfrage

            Beide timer und deren resets funktionieren wie erwartet, da hab ich mich bei dem anderen script wohl in der login verhauen.

            Danke euch !

            Mein Code wer es testen/nachspielen möchte :

            var timeout_2, timeout_1;
            
            /**
             * TimeOut_Test_2 mit reset außerhalb der function
             */
            function TimeOut_Test_2() {
              timeout_2 = setTimeout(function () {
                console.log('TimeOut_Test_2  activiert nach 10 sekunden');
              }, 10000);
            }
            
            /**
             * TimeOut_Test_1 Timer innerhalb einer function
             */
            function TimeOut_Test_1() {
              timeout_1 = setTimeout(function () {
                console.log('TimeOut_Test_1 activiert nach 10 sekunden');
              }, 10000);
            }
            
            /**
             * TimeOut_Test_1 reset innerhalb einer function
             */
            function TimeOut_Test_1_Clear() {
              (function () {if (timeout_1) {clearTimeout(timeout_1); timeout_1 = null;}})();
              console.log('TimeOut_Test_1_deactiviert ');
            }
            
            on({id: "javascript.1.Test_Switch"/*Test_Switch*/, change: "ne"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              if (getState("javascript.1.Test_Switch").val == true) {
                console.log('Timeout aktiviert starte nach 10 sekunden');
                TimeOut_Test_1();
                TimeOut_Test_2();
              } else {
                (function () {if (timeout_2) {clearTimeout(timeout_2); timeout_2 = null;}})();
                console.log('Timeout deactivieren');
                TimeOut_Test_1_Clear();
              }
            });
            
            

            Log Ausgabe :

            javascript.1	2018-04-25 13:26:08.036	info	script.js.common.palletkachel.Test_Script_Timer: TimeOut_Test_1_deactiviert
            javascript.1	2018-04-25 13:26:08.035	info	script.js.common.palletkachel.Test_Script_Timer: Timeout deactivieren
            javascript.1	2018-04-25 13:26:04.385	info	script.js.common.palletkachel.Test_Script_Timer: Timeout aktiviert starte nach 10 sekunden
            
            
            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            898
            Online

            31.8k
            Users

            79.9k
            Topics

            1.3m
            Posts

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