Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Аналог функции delay()

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Аналог функции delay()

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

      имеется код, как сделать паузы между отправкой команд чтобы они успевали отработать.

      on('javascript.0.TV', function (obj) {
      if (obj.newState.val){
              setState('javascript.0.TV', 'false');
              setState('mqtt.0.myhome.RS232.LGTV_PWR', '1');
              setState('mqtt.0.myhome.RS232.LGTV_Source', 'tv');
              setState('onkyo.0.power', 'true');
              setState('onkyo.0.volume', '45');
              setState('onkyo.0.input', 'cd');
          }
      
      //        setState('counter', 1 + getState('counter'), true/*ack*/);
      //        setState('adapter.0.device.channel.actor', true);
      });
      

      Может как то можно после setState получить ack?

      1 Reply Last reply Reply Quote 0
      • I
        instalator last edited by

        @instalator:

        имеется код, как сделать паузы между отправкой команд чтобы они успевали отработать.

        on('javascript.0.TV', function (obj) {
        if (obj.newState.val){
                setState('javascript.0.TV', 'false');
                setState('mqtt.0.myhome.RS232.LGTV_PWR', '1');
                setState('mqtt.0.myhome.RS232.LGTV_Source', 'tv');
                setState('onkyo.0.power', 'true');
                setState('onkyo.0.volume', '45');
                setState('onkyo.0.input', 'cd');
            }
        
        //        setState('counter', 1 + getState('counter'), true/*ack*/);
        //        setState('adapter.0.device.channel.actor', true);
        });
        

        Может как то можно после setState получить ack? `

        Или только такой вариант и никак иначе?

                setTimeout(function() { setState('onkyo.0.power', 'true'); }, 500);
                setTimeout(function() { setState('onkyo.0.volume', '45'); }, 2000);
                setTimeout(function() { setState('onkyo.0.input', 'cd'); }, 3000);
        
        1 Reply Last reply Reply Quote 0
        • Bluefox
          Bluefox last edited by

          Только такой.

          1 Reply Last reply Reply Quote 0
          • S
            spectrekr last edited by

            Есть некая большая процедура

            ! child = exec ('cat /sys/bus/w1/devices/28-0000067caf58/w1_slave', function (error, stdout, stderr){ tmp = stdout.substring(stdout.indexOf('t=')+2)/1000; if (tmp > 0){ setState('hallway.temp_flooring', tmp); }else{ setState('hallway.temp_flooring', 'null'); } log(getState('hallway.temp_flooring').val); if (error !== null) { log(error); } }); !
            Как ее правильно завернуть в таймаут, чтоб она выполнялась с задержкой. Таких процедур несколько, делаю

            ! setTimeout(function() { child = exec ('cat /sys/bus/w1/devices/28-0000067caf58/w1_slave', function (error, stdout, stderr){ tmp = stdout.substring(stdout.indexOf('t=')+2)/1000; if (tmp > 0){ setState('hallway.temp_flooring', tmp); }else{ setState('hallway.temp_flooring', 'null'); } log(getState('hallway.temp_flooring').val); if (error !== null) { log(error); } });10000}); !
            и у каждой последующей, делаю интервал больше. Но почему-то все выполняются одновременно.

            1 Reply Last reply Reply Quote 0
            • V
              vtec last edited by

              Через функцию или крон.

              1 Reply Last reply Reply Quote 0
              • S
                spectrekr last edited by

                ну вот я через функцию сделал, второй спойлер, но видно неправильно, не задерживает. А через крон не получится, там минимум минута, а мне надо с задержки в 2-3 секунды, чтоб датчики друг другу не мешали.

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

                  @spectrekr:

                  Есть некая большая процедура

                  ! child = exec ('cat /sys/bus/w1/devices/28-0000067caf58/w1_slave', function (error, stdout, stderr){ tmp = stdout.substring(stdout.indexOf('t=')+2)/1000; if (tmp > 0){ setState('hallway.temp_flooring', tmp); }else{ setState('hallway.temp_flooring', 'null'); } log(getState('hallway.temp_flooring').val); if (error !== null) { log(error); } }); !
                  Как ее правильно завернуть в таймаут, чтоб она выполнялась с задержкой. Таких процедур несколько, делаю

                  ! setTimeout(function() { child = exec ('cat /sys/bus/w1/devices/28-0000067caf58/w1_slave', function (error, stdout, stderr){ tmp = stdout.substring(stdout.indexOf('t=')+2)/1000; if (tmp > 0){ setState('hallway.temp_flooring', tmp); }else{ setState('hallway.temp_flooring', 'null'); } log(getState('hallway.temp_flooring').val); if (error !== null) { log(error); } });10000}); !
                  и у каждой последующей, делаю интервал больше. Но почему-то все выполняются одновременно. `
                  Ты неправильно прописал время:

                  setTimeout(function() {
                  child = exec ('cat /sys/bus/w1/devices/28-0000067caf58/w1_slave',
                      function (error, stdout, stderr){
                          tmp = stdout.substring(stdout.indexOf('t=')+2)/1000;
                          if (tmp > 0){
                              setState('hallway.temp_flooring', tmp);
                          }else{
                              setState('hallway.temp_flooring', 'null');
                          }
                          log(getState('hallway.temp_flooring').val);
                          if (error !== null) {
                              log(error);
                          }
                      });
                  },10000);
                  
                  

                  Видишь разницу?

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  892
                  Online

                  31.7k
                  Users

                  79.6k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  2162
                  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