Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Однократное выполение js скрипта

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    990

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

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

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
20 Beiträge 3 Kommentatoren 4.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    schrieb am zuletzt editiert von
    #2

    @instalator:

    По идее код должен отрабатывать один раз, но он выполняется с определенной переодичностью. `
    Именно этот код, кстати, не должен отрабатываться с переодичностью.

    Переодичность случайно не 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");
                        }
               }); 
        }
    });
    
    
    1 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #3

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

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • I Offline
        I Offline
        instalator
        schrieb am zuletzt editiert von
        #4

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

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Antwort Letzte Antwort
        0
        • E Offline
          E Offline
          electric69
          schrieb am zuletzt editiert von
          #5

          @instalator:

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

          1 Antwort Letzte Antwort
          0
          • I Offline
            I Offline
            instalator
            schrieb am zuletzt editiert von
            #6

            @electric69:

            @instalator:

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

            Высокий уровень Децибел вреден для здоровья!

            http://blog.instalator.ru/

            1 Antwort Letzte Antwort
            0
            • I Offline
              I Offline
              instalator
              schrieb am zuletzt editiert von
              #7

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

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

              Высокий уровень Децибел вреден для здоровья!

              http://blog.instalator.ru/

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #8

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

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

                1 Antwort Letzte Antwort
                0
                • I Offline
                  I Offline
                  instalator
                  schrieb am zuletzt editiert von
                  #9

                  @Bluefox:

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

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

                  Высокий уровень Децибел вреден для здоровья!

                  http://blog.instalator.ru/

                  1 Antwort Letzte Antwort
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #10
                    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 Antwort Letzte Antwort
                    0
                    • I Offline
                      I Offline
                      instalator
                      schrieb am zuletzt editiert von
                      #11

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

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

                      Высокий уровень Децибел вреден для здоровья!

                      http://blog.instalator.ru/

                      1 Antwort Letzte Antwort
                      0
                      • I Offline
                        I Offline
                        instalator
                        schrieb am zuletzt editiert von
                        #12

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

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

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

                        });

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

                        Высокий уровень Децибел вреден для здоровья!

                        http://blog.instalator.ru/

                        1 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #13

                          @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 Antwort Letzte Antwort
                          0
                          • I Offline
                            I Offline
                            instalator
                            schrieb am zuletzt editiert von
                            #14

                            Как вообще описать тупую логику на 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: '', 
                                            });
                                         }
                                    });  
                                }
                            });
                            

                            Высокий уровень Децибел вреден для здоровья!

                            http://blog.instalator.ru/

                            1 Antwort Letzte Antwort
                            0
                            • BluefoxB Offline
                              BluefoxB Offline
                              Bluefox
                              schrieb am zuletzt editiert von
                              #15

                              @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 Antwort Letzte Antwort
                              0
                              • I Offline
                                I Offline
                                instalator
                                schrieb am zuletzt editiert von
                                #16

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

                                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;

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

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

                                Высокий уровень Децибел вреден для здоровья!

                                http://blog.instalator.ru/

                                1 Antwort Letzte Antwort
                                0
                                • BluefoxB Offline
                                  BluefoxB Offline
                                  Bluefox
                                  schrieb am zuletzt editiert von
                                  #17

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

                                  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 Antwort Letzte Antwort
                                  0
                                  • I Offline
                                    I Offline
                                    instalator
                                    schrieb am zuletzt editiert von
                                    #18

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

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

                                    Высокий уровень Децибел вреден для здоровья!

                                    http://blog.instalator.ru/

                                    1 Antwort Letzte Antwort
                                    0
                                    • BluefoxB Offline
                                      BluefoxB Offline
                                      Bluefox
                                      schrieb am zuletzt editiert von
                                      #19

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

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

                                      1 Antwort Letzte Antwort
                                      0
                                      • I Offline
                                        I Offline
                                        instalator
                                        schrieb am zuletzt editiert von
                                        #20

                                        @Bluefox:

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

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

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

                                        Высокий уровень Децибел вреден для здоровья!

                                        http://blog.instalator.ru/

                                        1 Antwort Letzte Antwort
                                        0
                                        Antworten
                                        • In einem neuen Thema antworten
                                        Anmelden zum Antworten
                                        • Älteste zuerst
                                        • Neuste zuerst
                                        • Meiste Stimmen


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        305

                                        Online

                                        32.6k

                                        Benutzer

                                        82.3k

                                        Themen

                                        1.3m

                                        Beiträge
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Anmelden

                                        • Du hast noch kein Konto? Registrieren

                                        • Anmelden oder registrieren, um zu suchen
                                        • Erster Beitrag
                                          Letzter Beitrag
                                        0
                                        • Home
                                        • Aktuell
                                        • Tags
                                        • Ungelesen 0
                                        • Kategorien
                                        • Unreplied
                                        • Beliebt
                                        • GitHub
                                        • Docu
                                        • Hilfe