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.
    • 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

                              852
                              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