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

      @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

                                  564
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  3
                                  20
                                  4144
                                  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