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. функция спарсила данные допустим час назад потом по 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 работает? Там же была ещё какая-то проблемка. `
Да я уже и сам не пойму :)Да вроде работает все, хотя уже не помню толи в драйвере подправлено толи руками подправил в файле. На гите точно правильно все должно быть)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden