Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Однократное выполение js скрипта

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Однократное выполение js скрипта

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      instalator last edited by

      Я не могу понять как выводится лог… javscript выставил в дебаг. в логе поставил javascript и то пусто все, то часть выдаст после обновления все пропадает. как вообще обкатать js скрипт можно? может есть какие программы где можно было бы выполнить пошаговый дебаг, в самом брокере я немогу понять как можно проверить скрипты

      1 Reply Last reply Reply Quote 0
      • E
        electric69 last edited by

        @instalator:

        Я не могу понять как выводится лог… javscript выставил в дебаг. в логе поставил javascript и то пусто все, то часть выдаст после обновления все пропадает. как вообще обкатать js скрипт можно? может есть какие программы где можно было бы выполнить пошаговый дебаг, в самом брокере я немогу понять как можно проверить скрипты `
        попробуй через консоль выполнить

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          @electric69:

          @instalator:

          Я не могу понять как выводится лог… javscript выставил в дебаг. в логе поставил javascript и то пусто все, то часть выдаст после обновления все пропадает. как вообще обкатать js скрипт можно? может есть какие программы где можно было бы выполнить пошаговый дебаг, в самом брокере я немогу понять как можно проверить скрипты попробуй через консоль выполнить
          Какую консоль?

          1 Reply Last reply Reply Quote 0
          • I
            instalator last edited by

            как внутри функции, которая спарсила с сайта данные, сделать цикл ожидающий изменения переменной из брокера?

            Чтобы после изменения переменной в брокере выполнилась другая функция в которой спарсенные данные уже обработались.

            1 Reply Last reply Reply Quote 0
            • Bluefox
              Bluefox last edited by

              В яваскрипте нет циклов ожидания. Тебе надо ждать при помощи "on".

              @all: Кто нибудь разбирается ещё в JS. Можете объяснить?

              1 Reply Last reply Reply Quote 0
              • I
                instalator last edited by

                @Bluefox:

                В яваскрипте нет циклов ожидания. Тебе надо ждать при помощи "on".

                @all: Кто нибудь разбирается ещё в JS. Можете объяснить? `
                пробовал on. функция спарсила данные допустим час назад потом по on. данные уже в дургую функцию не отдаются.
                2983_img_7685.jpg

                1 Reply Last reply Reply Quote 0
                • Bluefox
                  Bluefox last edited by

                  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);
                      }
                  });
                  

                  Либо я не понял, что ты хочешь. 😉

                  1 Reply Last reply Reply Quote 0
                  • I
                    instalator last edited by

                    @Bluefox:

                    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 что либо писать после С.

                    Все таки нужно прикрутить чтонибудь еще для написания скриптов. Чтобы например легче было написать что то типо Если сработал датчик уходим в цикл, если сработал второй выполняем что либо, если за определенный промежуток времени не сработал второй выходим из цикла. и т.п. и т.д.

                    1 Reply Last reply Reply Quote 0
                    • I
                      instalator last edited by

                      Почему не срабатывает следующий код?

                      on({time: "* *13 */23 * *"}, function () {

                      log('не работает');

                      });

                      Должно срабатывать в 13 00 каждое 23 число месяца

                      1 Reply Last reply Reply Quote 0
                      • Bluefox
                        Bluefox last edited by

                        @instalator:

                        Почему не срабатывает следующий код?

                        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 * *"

                        1 Reply Last reply Reply Quote 0
                        • I
                          instalator last edited by

                          Как вообще описать тупую логику на 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: '', 
                                          });
                                       }
                                  });  
                              }
                          });
                          
                          1 Reply Last reply Reply Quote 0
                          • Bluefox
                            Bluefox last edited by

                            @instalator:

                            Как вообще описать тупую логику на 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: '', 
                            		});
                            	 }
                            });  
                            
                            1 Reply Last reply Reply Quote 0
                            • I
                              instalator last edited by

                              На счет флагов….

                              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;

                              Создаем переменную в базе в качестве флага, много где приходится применять и переменные со временем разрастаются, может сделать возможность создавать невидимые в общем списке переменные флагов? или написать какую нибудь функцию для таких ситуаций (хотя скорее нужны глобальные переменные).

                              Может конечно есть и проще вариант написать такой код, главное чтобы был читаемый, иначе через год уже не разберешь что к чему)

                              1 Reply Last reply Reply Quote 0
                              • Bluefox
                                Bluefox last edited by

                                Этот код делает тоже самое, что твой, только не создает глобальных переменных.

                                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);
                                		}
                                	}
                                });
                                
                                1 Reply Last reply Reply Quote 0
                                • I
                                  instalator last edited by

                                  @Bluefox:

                                  Этот код делает тоже самое, что твой, только не создает глобальных переменных.

                                  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);
                                  		}
                                  	}
                                  });
                                  ```` `  
                                  

                                  а скрипты разве не перезапускаются постоянно через определенное время?

                                  1 Reply Last reply Reply Quote 0
                                  • Bluefox
                                    Bluefox last edited by

                                    Нет.. Даже не пойму, как ты вышел на такие домыслы.

                                    Кстати onkyo работает? Там же была ещё какая-то проблемка.

                                    1 Reply Last reply Reply Quote 0
                                    • I
                                      instalator last edited by

                                      @Bluefox:

                                      Нет.. Даже не пойму, как ты вышел на такие домыслы.

                                      Кстати onkyo работает? Там же была ещё какая-то проблемка. `
                                      Да я уже и сам не пойму 🙂

                                      Да вроде работает все, хотя уже не помню толи в драйвере подправлено толи руками подправил в файле. На гите точно правильно все должно быть)

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      446
                                      Online

                                      31.9k
                                      Users

                                      80.1k
                                      Topics

                                      1.3m
                                      Posts

                                      3
                                      20
                                      4147
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo