NEWS
Трех-кратное выполнение кода скрипта
-
Добрый день.
Есть код:
! ````
on({id: "megad.3.p9_G0_Boiler_Control2"/G0_Boiler_Control2 - Размыкатель ТТ котла/, change: 'any'}, function (obj) {
if (getState("megad.3.p9_G0_Boiler_Control2").val === false) { // если котел запущен
setState("den.0.Отопление.ТТ_Котел.Время_до_запуска",0);
time_start_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
sendTo("telegram.0", "send", {
text: 'ТТ Котел запущен в '+ time_start
})
}
else { // иначе если котел остановлен
setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
time_stop_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова",time_stop);
log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
sendTo("telegram.0", "send", {
text: 'ТТ Котел остановлен в '+ time_stop
})
}
});Он рабочий, НО не понимаю почему драйвер Telegram присылает по три сообщения о включении или выключении котла. В остальных скриптах, сообщения приходят по одному, без повторения. А здесь… При этом не важно изменяется статус переменной megad.3.p9_G0_Boiler_Control2 (вручную нажатием кнопки в VIS или из скрипта по условию). Подскажите в какую сторону посмотреть?
-
А так? Два срабатывания я могу объяснить. А вот три
on({id: "megad.3.p9_G0_Boiler_Control2"/*G0_Boiler_Control2 - Размыкатель ТТ котла*/, change: 'any', ack: false}, function (obj) { if (obj.state.val === false) { // если котел запущен setState("den.0.Отопление.ТТ_Котел.Время_до_запуска",0); time_start_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts); var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2); setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start); log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val); sendTo("telegram.0", "send", { text: 'ТТ Котел запущен в '+ time_start }) } else { // иначе если котел остановлен setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0); time_stop_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts); var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2); setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова",time_stop); log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val); sendTo("telegram.0", "send", { text: 'ТТ Котел остановлен в '+ time_stop }) } });
-
Добрый день.
Есть код:
! ````
on({id: "megad.3.p9_G0_Boiler_Control2"/G0_Boiler_Control2 - Размыкатель ТТ котла/, change: 'any'}, function (obj) {
if (getState("megad.3.p9_G0_Boiler_Control2").val === false) { // если котел запущен
setState("den.0.Отопление.ТТ_Котел.Время_до_запуска",0);
time_start_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
sendTo("telegram.0", "send", {
text: 'ТТ Котел запущен в '+ time_start
})
}
else { // иначе если котел остановлен
setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
time_stop_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова",time_stop);
log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
sendTo("telegram.0", "send", {
text: 'ТТ Котел остановлен в '+ time_stop
})
}
});Он рабочий, НО не понимаю почему драйвер Telegram присылает по три сообщения о включении или выключении котла. В остальных скриптах, сообщения приходят по одному, без повторения. А здесь… При этом не важно изменяется статус переменной megad.3.p9_G0_Boiler_Control2 (вручную нажатием кнопки в VIS или из скрипта по условию). Подскажите в какую сторону посмотреть? `
На будущее оформляйте код на форуме в тег CODE и под спойлер.
Вот так что выдает в логе?
! ````
on({id: "megad.3.p9_G0_Boiler_Control2"/G0_Boiler_Control2 - Размыкатель ТТ котла/, change: 'any'}, function (obj) {
log ('megad.3.p9_G0_Boiler_Control2 = ' + obj.state.val);
if (obj.state.val === false) { // если котел запущен
setState("den.0.Отопление.ТТ_Котел.Время_до_запуска", 0);
var time_start_stamp = new Date(obj.state.ts);
var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
sendTo("telegram.0", "send", {
text: 'ТТ Котел запущен в '+ time_start
});
}
else { // иначе если котел остановлен
setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
var time_stop_stamp = new Date(obj.state.ts);
var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова", time_stop);
log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
sendTo("telegram.0", "send", {
text: 'ТТ Котел остановлен в '+ time_stop
});
}
}); -
А так? Два срабатывания я могу объяснить. А вот три
on({id: "megad.3.p9_G0_Boiler_Control2"/*G0_Boiler_Control2 - Размыкатель ТТ котла*/, change: 'any', ack: false}, function (obj) { ```` `
Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).
To Instalator, в части написания сообщений с кодом, учту.
-
Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).
To Instalator, в части написания сообщений с кодом, учту. ` аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема
-
Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).
To Instalator, в части написания сообщений с кодом, учту.
аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема
Подтверждение в смысле дополнительное условие, т.е. подтверждение того что подписка срабатывает только тогда когда ее изменение переходят в значение которое указано после "ack"?
А второй вопрос, как правильнее должен быть устроен код? Мой или ваш, в котором проверяется не сама переменная внутри подписки, а статус ответа, который отдает подписка?
-
Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).
To Instalator, в части написания сообщений с кодом, учту.
аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема
Подтверждение в смысле дополнительное условие, т.е. подтверждение того что подписка срабатывает только тогда когда ее изменение переходят в значение которое указано после "ack"?
А второй вопрос, как правильнее должен быть устроен код? Мой или ваш, в котором проверяется не сама переменная внутри подписки, а статус ответа, который отдает подписка? ` когда ты меняешь объект руками то аск будет фолс, а если в этот объект прилетит статус из драйвера то аск будет тру.
Мой. По подписке ты уже получаешь все данные в объекте obj. И не нужно получать их другими функциями например getState
-
аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема `
Подтверждение в смысле дополнительное условие, т.е. подтверждение того что подписка срабатывает только тогда когда ее изменение переходят в значение которое указано после "ack"?
А второй вопрос, как правильнее должен быть устроен код? Мой или ваш, в котором проверяется не сама переменная внутри подписки, а статус ответа, который отдает подписка? ` когда ты меняешь объект руками то аск будет фолс, а если в этот объект прилетит статус из драйвера то аск будет тру.
Мой. По подписке ты уже получаешь все данные в объекте obj. И не нужно получать их другими функциями например getState `
Теперь все понял. Спасибо.
Кстати сейчас с вариантом Bluefox, сообщение приходят по одному разу. И в случае ручного включения, и в случае изменения по условию из другого скрипта.