NEWS
Однократное выполение js скрипта
-
var startsis = getState("javascript.1.Otpravka_pokazanij"); var request = require('request'); if (startsis){ sendRequest(function (body) { }); }
В sendRequest - setState ('javascript.1.Otpravka_pokazanij','false');
По идее код должен отрабатывать один раз, но он выполняется с определенной переодичностью. Как сделать чтобы код отрабатывал один раз только когда ставим переменную в true?
-
По идее код должен отрабатывать один раз, но он выполняется с определенной переодичностью. `
Именно этот код, кстати, не должен отрабатываться с переодичностью.Переодичность случайно не 30 сек?
Скорей всего он падает на строчке sendRequest, т.к. не знает такой функции. И перезапускается.
Правильно будет так:
var request = require('request'); // подтягиваем доп модуль. Описание здесь:https://github.com/request/request // Подписываемся на изменения (если нет изменения, то не сработает. Например 2 раза подряд true) on("javascript.1.Otpravka_pokazanij", function (obj)({ // Если новое значение true. Описание объекта здесь https://github.com/ioBroker/ioBroker.javascript#on---subscribe-on-changes-or-updates-of-some-state if (obj.newState.val) { request('http://ip', function (error, response, body) { // если нет ошибки if (!error && response.statusCode == 200) { // показать результат log(body); } else { // показать ошибку log(error, "error"); } }); } });
-
sendRequest(function (body) {
}); это функция.
При таком коде если в функции sendRequest я получаю другую страницу и возвращаю body, то body из sendRequest будет доступно только внутри этой записи sendRequest(function (body) {
}); или оно будет доступно уже везде?
Объянил как мог)
on("javascript.1.Otpravka_pokazanij", function (obj){ if (obj.newState.val) { request('https://www.sistemagorod.ru/lk/', function (error, response, body) { // если нет ошибки if (!error && response.statusCode == 200) { // показать результат sendRequest(function (body) { }); } else { // показать ошибку log(error, "error"); } }); } });
-
Я не могу понять как выводится лог… javscript выставил в дебаг. в логе поставил javascript и то пусто все, то часть выдаст после обновления все пропадает. как вообще обкатать js скрипт можно? может есть какие программы где можно было бы выполнить пошаговый дебаг, в самом брокере я немогу понять как можно проверить скрипты
-
Я не могу понять как выводится лог… javscript выставил в дебаг. в логе поставил javascript и то пусто все, то часть выдаст после обновления все пропадает. как вообще обкатать js скрипт можно? может есть какие программы где можно было бы выполнить пошаговый дебаг, в самом брокере я немогу понять как можно проверить скрипты `
попробуй через консоль выполнить -
Я не могу понять как выводится лог… javscript выставил в дебаг. в логе поставил javascript и то пусто все, то часть выдаст после обновления все пропадает. как вообще обкатать js скрипт можно? может есть какие программы где можно было бы выполнить пошаговый дебаг, в самом брокере я немогу понять как можно проверить скрипты
попробуй через консоль выполнить
Какую консоль? -
как внутри функции, которая спарсила с сайта данные, сделать цикл ожидающий изменения переменной из брокера?
Чтобы после изменения переменной в брокере выполнилась другая функция в которой спарсенные данные уже обработались.
-
В яваскрипте нет циклов ожидания. Тебе надо ждать при помощи "on".
@all: Кто нибудь разбирается ещё в JS. Можете объяснить?
-
В яваскрипте нет циклов ожидания. Тебе надо ждать при помощи "on".
@all: Кто нибудь разбирается ещё в JS. Можете объяснить? `
пробовал on. функция спарсила данные допустим час назад потом по on. данные уже в дургую функцию не отдаются.
2983_img_7685.jpg -
var request = require('request'); var parseResult; var parseTime; request('http://www.google.com', function (error, response, body) { // внутри функции, которая спарсила с сайта данные if (!error && response.statusCode == 200) { parseResult = myParseFunction(); parseTime = (new Date()).getTime(); } }); // "цикл" ожидающий изменения переменной из брокера on('waitForVariable', function (obj) { // Если прошло меньше секунды if (parseTime && (new Date()).getTime() - parseTime < 1000) { // выполнилась другая функция в которой спарсенные данные уже обработались drugajaFunction(parseResult); } });
Либо я не понял, что ты хочешь.
-
var request = require('request'); var parseResult; var parseTime; request('http://www.google.com', function (error, response, body) { // внутри функции, которая спарсила с сайта данные if (!error && response.statusCode == 200) { parseResult = myParseFunction(); parseTime = (new Date()).getTime(); } }); // "цикл" ожидающий изменения переменной из брокера on('waitForVariable', function (obj) { // Если прошло меньше секунды if (parseTime && (new Date()).getTime() - parseTime < 1000) { // выполнилась другая функция в которой спарсенные данные уже обработались drugajaFunction(parseResult); } });
Либо я не понял, что ты хочешь. `
Решил сделать так.
Каждый месяц парсим данные и пишем в базу, отправляем на телефон данные которые спарсили (+ссылка ОТПРАВИТЬ), жмем в сообщении отправить и данные уже из базы отправляются в систему город.
Примерчиков нужно больше по js. А так необычно на js что либо писать после С.
Все таки нужно прикрутить чтонибудь еще для написания скриптов. Чтобы например легче было написать что то типо Если сработал датчик уходим в цикл, если сработал второй выполняем что либо, если за определенный промежуток времени не сработал второй выходим из цикла. и т.п. и т.д.
-
Почему не срабатывает следующий код?
on({time: "* *13 */23 * *"}, function () {
log('не работает');
});
Должно срабатывать в 13 00 каждое 23 число месяца
-
Почему не срабатывает следующий код?
on({time: "* *13 */23 * *"}, function () {
log('не работает');
});
Должно срабатывать в 13 00 каждое 23 число месяца `
Я сам постоянно забываю cron формат. Пользуюсьhttp://cron.nmonitoring.com/cron-generator.html
или
http://www.corntab.com/pages/crontab-gui
"0 13 23 * *"
-
Как вообще описать тупую логику на js?
Можно ли отписаться от изменений переменных?
on('javascript.0.Signalizaciya', function (obj) { if (obj.newState.val === 1 || obj.newState.val === "1"){ on('mqtt.0.myhome.Bedroom.Motion', function (obj) { if (obj.newState.val === 1 || obj.newState.val === "1"){ sendTo("pushover", { message: 'ВНИМАНИЕ!!! Замечено движение в спальне', title: 'Сигнализация', url: '', url_title: '', }); } }); on('mqtt.0.myhome.Guestroom.Motion', function (obj) { if (obj.newState.val === 1 || obj.newState.val === "1"){ sendTo("pushover", { message: 'ВНИМАНИЕ!!! Замечено движение в зале', title: 'Сигнализация', url: '', url_title: '', }); } }); } });
-
Как вообще описать тупую логику на js?
Можно ли отписаться от изменений переменных? `
Нет, нельзя. Но можно проигнорировать изменения.var signalizaciyaON = false; createState('Signalizaciya', false, function () { signalizaciyaON = getState('Signalizaciya').val; }); // Подписываемся на изменения on('Signalizaciya', function (obj) { signalizaciyaON = obj.newState.val; }); on('mqtt.0.myhome.Bedroom.Motion', function (obj) { if (signalizaciyaON && (obj.newState.val === 1 || obj.newState.val === "1")){ sendTo("pushover", { message: 'ВНИМАНИЕ!!! Замечено движение в спальне', title: 'Сигнализация', url: '', url_title: '', }); } }); on('mqtt.0.myhome.Guestroom.Motion', function (obj) { if (signalizaciyaON && (obj.newState.val === 1 || obj.newState.val === "1")){ sendTo("pushover", { message: 'ВНИМАНИЕ!!! Замечено движение в зале', title: 'Сигнализация', url: '', url_title: '', }); } });
-
На счет флагов….
on('mqtt.0.myhome.Mother.DomofonRing', function (obj) { if (obj.newState.val === '1' || obj.newState.val === 1){ var TVon = getState('mqtt.0.myhome.RS232.LGTV_PWR').val; var TVsource = getState('mqtt.0.myhome.RS232.LGTV_Source').val; var flag_domofon = getState('javascript.0.flag_domofon').val; if (flag_domofon === '0'){ sendTo("pushover", { message: 'Звонок домофона', title: 'Домофон', url: 'http://192.168.1.190:8087/set/mqtt.0.myhome.Mother.DomofonOpen?value=1&prettyPrint', url_title: 'ОТКРЫТЬ ДВЕРЬ!', }); setState('javascript.0.flag_domofon', '1'); if (TVon === '1' || TVon === 1){ setState('mqtt.0.myhome.RS232.LGTV_Source', 'av2'); setTimeout(function() { setState('mqtt.0.myhome.RS232.LGTV_Source', TVsource.toLowerCase()); }, 7000); } } } else { } setTimeout(function() { setState('javascript.0.flag_domofon', '0'); }, 10000); });
var flag_domofon = getState('javascript.0.flag_domofon').val;
Создаем переменную в базе в качестве флага, много где приходится применять и переменные со временем разрастаются, может сделать возможность создавать невидимые в общем списке переменные флагов? или написать какую нибудь функцию для таких ситуаций (хотя скорее нужны глобальные переменные).
Может конечно есть и проще вариант написать такой код, главное чтобы был читаемый, иначе через год уже не разберешь что к чему)
-
Этот код делает тоже самое, что твой, только не создает глобальных переменных.
var flag_domofon = false; on('mqtt.0.myhome.Mother.DomofonRing', function (obj) { if (obj.newState.val === '1' || obj.newState.val === 1) { var TVon = getState('mqtt.0.myhome.RS232.LGTV_PWR').val; var TVsource = getState('mqtt.0.myhome.RS232.LGTV_Source').val; if (!flag_domofon){ sendTo("pushover", { message: 'Звонок домофона', title: 'Домофон', url: 'http://192.168.1.190:8087/set/mqtt.0.myhome.Mother.DomofonOpen?value=1&prettyPrint', url_title: 'ОТКРЫТЬ ДВЕРЬ!', }); flag_domofon = true; if (TVon === '1' || TVon === 1) { setState('mqtt.0.myhome.RS232.LGTV_Source', 'av2'); setTimeout(function() { setState('mqtt.0.myhome.RS232.LGTV_Source', TVsource.toLowerCase()); }, 7000); } setTimeout(function() { flag_domofon = false; }, 10000); } } });
-
Этот код делает тоже самое, что твой, только не создает глобальных переменных.
var flag_domofon = false; on('mqtt.0.myhome.Mother.DomofonRing', function (obj) { if (obj.newState.val === '1' || obj.newState.val === 1) { var TVon = getState('mqtt.0.myhome.RS232.LGTV_PWR').val; var TVsource = getState('mqtt.0.myhome.RS232.LGTV_Source').val; if (!flag_domofon){ sendTo("pushover", { message: 'Звонок домофона', title: 'Домофон', url: 'http://192.168.1.190:8087/set/mqtt.0.myhome.Mother.DomofonOpen?value=1&prettyPrint', url_title: 'ОТКРЫТЬ ДВЕРЬ!', }); flag_domofon = true; if (TVon === '1' || TVon === 1) { setState('mqtt.0.myhome.RS232.LGTV_Source', 'av2'); setTimeout(function() { setState('mqtt.0.myhome.RS232.LGTV_Source', TVsource.toLowerCase()); }, 7000); } setTimeout(function() { flag_domofon = false; }, 10000); } } }); ```` `
а скрипты разве не перезапускаются постоянно через определенное время?
-
Нет.. Даже не пойму, как ты вышел на такие домыслы.
Кстати onkyo работает? Там же была ещё какая-то проблемка.
-
Нет.. Даже не пойму, как ты вышел на такие домыслы.
Кстати onkyo работает? Там же была ещё какая-то проблемка. `
Да я уже и сам не поймуДа вроде работает все, хотя уже не помню толи в драйвере подправлено толи руками подправил в файле. На гите точно правильно все должно быть)