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

      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

                          754
                          Online

                          31.9k
                          Users

                          80.1k
                          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