NEWS
Аналог функции delay()
-
имеется код, как сделать паузы между отправкой команд чтобы они успевали отработать.
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?
-
имеется код, как сделать паузы между отправкой команд чтобы они успевали отработать.
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);
-
Только такой.
-
Есть некая большая процедура
!
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}); !
и у каждой последующей, делаю интервал больше. Но почему-то все выполняются одновременно. -
Через функцию или крон.
-
ну вот я через функцию сделал, второй спойлер, но видно неправильно, не задерживает. А через крон не получится, там минимум минута, а мне надо с задержки в 2-3 секунды, чтоб датчики друг другу не мешали.
-
Есть некая большая процедура
!
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);
Видишь разницу?