NEWS
Почему скрипты "засыпают"?
-
Уменя наблюдается странная ситуация - скрипты реакции на клавиши включения света "засыпают".
Управление светом реализовано через Мегу. Если долго не был в доме, при нажатиина кнопку видно, что на Меге лампочка мигнула, но свет включается с большой задержкой, от 30 сек до минуты. После этого уже включение/выключение работает нормально, но только для этой клавиши. Первое нажатие на другую клавишу опять отрабатывает с задержкой.
Другие скрипты, работающие по расписанию, работают нормально.
В чем может быть проблема? Как предотвратить засыпание скриптов?
Пример скрипта:
var Button = "megad.7.p0_S-3"; var Light = "megad.7.p7_L-3"; on(Button, function (obj) { if (obj.newState.val === true && getState(Light).val === false) { setState (Light, true); log('Включено'); }else if(obj.newState.val === true && getState(Light).val === true){ setState (Light, false); log('Выключено'); } });
-
@Ho Hum:Уменя наблюдается странная ситуация - скрипты реакции на клавиши включения света "засыпают".
Управление светом реализовано через Мегу. Если долго не был в доме, при нажатиина кнопку видно, что на Меге лампочка мигнула, но свет включается с большой задержкой, от 30 сек до минуты. После этого уже включение/выключение работает нормально, но только для этой клавиши. Первое нажатие на другую клавишу опять отрабатывает с задержкой.
Другие скрипты, работающие по расписанию, работают нормально.
В чем может быть проблема? Как предотвратить засыпание скриптов?
Пример скрипта:
var Button = "megad.7.p0_S-3"; var Light = "megad.7.p7_L-3"; on(Button, function (obj) { if (obj.newState.val === true && getState(Light).val === false) { setState (Light, true); log('Включено'); }else if(obj.newState.val === true && getState(Light).val === true){ setState (Light, false); log('Выключено'); } }); ```` `
Наврятли это проблема скрипта.
-
@Ho Hum:Уменя наблюдается странная ситуация - скрипты реакции на клавиши включения света "засыпают".
Управление светом реализовано через Мегу. Если долго не был в доме, при нажатиина кнопку видно, что на Меге лампочка мигнула, но свет включается с большой задержкой, от 30 сек до минуты. После этого уже включение/выключение работает нормально, но только для этой клавиши. Первое нажатие на другую клавишу опять отрабатывает с задержкой.
Другие скрипты, работающие по расписанию, работают нормально.
В чем может быть проблема? Как предотвратить засыпание скриптов?
Пример скрипта:
var Button = "megad.7.p0_S-3"; var Light = "megad.7.p7_L-3"; on(Button, function (obj) { if (obj.newState.val === true && getState(Light).val === false) { setState (Light, true); log('Включено'); }else if(obj.newState.val === true && getState(Light).val === true){ setState (Light, false); log('Выключено'); } }); ```` `
А что видно в логе при нажатии?
-
Я тоже думаю, что это не проблема скрипта.
В логе после задержки появляется сообщение из скрипта и стандартная запись о том, что была попытка изменить состояние объекта.
Как я понимаю, каждый скрипт - это отдельный процесс. И, как мне кажется, долго неактивные процессы засыпают.
Это делает либо ioBroker, либо операционка…
-
У меня аналогичная ситуация. В качестве железа - MegaD, скрипт - JS.
Что нужно, что бы отследить проблему?
-
@Ho Hum:Я тоже думаю, что это не проблема скрипта.
В логе после задержки появляется сообщение из скрипта и стандартная запись о том, что была попытка изменить состояние объекта.
Как я понимаю, каждый скрипт - это отдельный процесс. И, как мне кажется, долго неактивные процессы засыпают.
Это делает либо ioBroker, либо операционка… `
Ни у кого не засыпают….Ну хотелось бы видеть собственно сам скрипт.
-
"Засыпает" собственно вот этот огрызок:
// Реакция на нажатия выключателей $('megad.*_кнопка').on(function (e) { if (e.newState.val === true){ var port = getIdByName(e.common.name.split('_')[0]); setState(port, !getState(port).val); } });
При этом действия, выполняемые по крону - работают нормально (в этом же скрипте)
-
"Засыпает" собственно вот этот огрызок:
// Реакция на нажатия выключателей $('megad.*_кнопка').on(function (e) { if (e.newState.val === true){ var port = getIdByName(e.common.name.split('_')[0]); setState(port, !getState(port).val); } });
При этом действия, выполняемые по крону - работают нормально (в этом же скрипте) `
Давай тестить, в лог пишет при изменениях?! ````
on({id: 'megad._кнопка', change: 'any'}, function (obj) {
log('megad.кнопка.val = ' + obj.newState.val);
if (obj.newState.val === true || obj.newState.val === 'true'){
var port = getIdByName(obj.common.name.split('')[0]);
log('var port = ' + port);
setState(port, !getState(port).val);
}
}); -
Есть ли принципиальная разница для эксперимента между
$('megad.*_кнопка').on(function (e) {});
и
on({id: 'megad.*_кнопка', change: 'any'}, function (obj) {});
Спрашиваю, потому что со вторым вариантом - подписка на события не произошла…
Несколько изменил свой кусок.. посмотрю что будет происодить.
-
Есть ли принципиальная разница для эксперимента между
$('megad.*_кнопка').on(function (e) {});
и
on({id: 'megad.*_кнопка', change: 'any'}, function (obj) {});
Спрашиваю, потому что со вторым вариантом - подписка на события не произошла…
Несколько изменил свой кусок.. посмотрю что будет происодить. `
А это где? $('megad.*_кнопка'. Это в jquery чтоли? В визе? -
Есть ли принципиальная разница для эксперимента между
$('megad.*_кнопка').on(function (e) {});
и
on({id: 'megad.*_кнопка', change: 'any'}, function (obj) {});
Спрашиваю, потому что со вторым вариантом - подписка на события не произошла…
Несколько изменил свой кусок.. посмотрю что будет происодить. `
$('megad.*_кнопка') ````изначально заточен на то, что бы поддерживать несколько устройств.
on({id: 'megad.*_кнопка', change: 'any'}, function (obj) {});
Может обслуживать только одно устройство и ожидает точное имя.
on({id: /^megad..*_кнопка$/, change: 'any'}, function (obj) {});
Будет уже обрабатывать несколько устройств.
-
Есть ли принципиальная разница для эксперимента между
$('megad.*_кнопка').on(function (e) {});
и
on({id: 'megad.*_кнопка', change: 'any'}, function (obj) {});
Спрашиваю, потому что со вторым вариантом - подписка на события не произошла…
Несколько изменил свой кусок.. посмотрю что будет происодить. `
$('megad.*_кнопка') ````изначально заточен на то, что бы поддерживать несколько устройств.
on({id: 'megad.*_кнопка', change: 'any'}, function (obj) {});
Может обслуживать только одно устройство и ожидает точное имя.
on({id: /^megad..*_кнопка$/, change: 'any'}, function (obj) {});
Будет уже обрабатывать несколько устройств. ` это а виз только работает?
-
это а виз только работает? `
Речь идёт о javascript драйвере. -
это а виз только работает? `
Речь идёт о javascript драйвере.https://github.com/ioBroker/ioBroker.ja ... --selector `
Чо то я сразу не догнал когда с телефона читал, лучше молчать буду) -
> лучше молчать буду)
ненене ))В общем снова проглючило.
Было 2 нажатия.. зарегистрировалось только одно и то с задержкой:
javascript.0 2016-12-15 12:05:15.771 info script.js.common.LightControl: megad.1.p0_Свет:_Кладовка_кнопка=false megad.1 2016-12-15 12:05:15.684 info try to control megad.1.p7_Свет:_Кладовка with true javascript.0 2016-12-15 12:05:15.680 info script.js.common.LightControl: var port = megad.1.p7_Свет:_Кладовка javascript.0 2016-12-15 12:05:15.674 info script.js.common.LightControl: megad.1.p0_Свет:_Кладовка_кнопка=true
Хоть дамп трафика снимай
Вот думаю, не глючит ли мега…. хотя они все из одной партии. 3 нормально работают, а эта вот...
Интересно, у ТС решилась ли проблема?
-
К сожалению, у меня проблема так и не решилась.
Я настраиваю систему в загородном доме, находящемся в процессе практически замороженной отделки, поэтому приезжаю туда не каждую неделю и не надолго…
При каждом приезде лампы сразу не зажигаются. После нескольких нажатий зажигаются и дальше работают до отъезда нормально. Потом все снова повторяется.
При этом по таймеру другие функции работают нормально.