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. Видимость переменных. И еще пара вопросов.

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.6k

Видимость переменных. И еще пара вопросов.

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
12 Beiträge 4 Kommentatoren 3.1k 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.
  • I Offline
    I Offline
    instalator
    schrieb am zuletzt editiert von
    #2

    > Выясняется что внутри exec переменная i видна. Но если её изменить то изменения будут только внутри exec. снаружи она останется без изменений она видна и там и там, в не exec выводится быстрее просто
    ` > 1. В общем столкнулся с неожиданным.

    Пишу скрипт:

    Код:

    var i = 1;

    exec('какая нибудь команда', function(err,stdout,stderr){

    log(i);

    i = stdout;

    })

    log (i);

    Выясняется что внутри exec переменная i видна. Но если её изменить то изменения будут только внутри exec. снаружи она останется без изменений.

    Это правильно? Вроде в чистом js все должно меняться если я отдельно внутри exec не объявил переменную с аналогичным именем.

    2. Логика работы со скриптами

    Написал я некий скрипт.

    Есть он у меня в дереве скриптов. и есть у него состояние - запущен или остановлен.

    Вопрос - что это состояние означает? ` кнопка означает выполнять скрипт или нет. Если отключено то код в скрипте не будет работать

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

    http://blog.instalator.ru/

    1 Antwort Letzte Antwort
    0
    • X Offline
      X Offline
      XAPuTOH
      schrieb am zuletzt editiert von
      #3

      Т.е. exec выполняется асинхронно. Соответственно нельзя строить скрипт таким образом как я сперва задумал, а нужно строить на колбэках.

      Сперва exec. внутри него основной скрипт. а если exec несколько. то каждый последующий нужно запускать в колбэке предидущего?

      1 Antwort Letzte Antwort
      0
      • X Offline
        X Offline
        XAPuTOH
        schrieb am zuletzt editiert von
        #4

        @instalator:

        кнопка означает выполнять скрипт или нет. Если отключено то код в скрипте не будет работать `

        Т.е. я должен сделать скрипт запущенным. Соответственно он один раз в момент запуска отработает. А потом из другого скрипта я смогу его запускать?

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

          @XAPuTOH:

          @instalator:

          кнопка означает выполнять скрипт или нет. Если отключено то код в скрипте не будет работать `

          Т.е. я должен сделать скрипт запущенным. Соответственно он один раз в момент запуска отработает. А потом из другого скрипта я смогу его запускать? ` зачем его запускать если он уже запущен? Опиши алгоритм что хочешь сделать, буду дома отпишуст

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

          http://blog.instalator.ru/

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

            @XAPuTOH:

            Т.е. exec выполняется асинхронно. Соответственно нельзя строить скрипт таким образом как я сперва задумал, а нужно строить на колбэках.

            Сперва exec. внутри него основной скрипт. а если exec несколько. то каждый последующий нужно запускать в колбэке предидущего? `
            Не только exec, все асинхронно. Мысли в правильную сторону, через колбеки

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

            http://blog.instalator.ru/

            1 Antwort Letzte Antwort
            0
            • X Offline
              X Offline
              XAPuTOH
              schrieb am zuletzt editiert von
              #7

              @XAPuTOH:

              Хотя может я не правильно понял идиологию?

              У меня есть некий набор действий который нужно выполнить в двух случаях:

              1. По расписанию

              2. По запросу пользователя.

              Я предположил что можно написать скрипт "Набор действий" выполнения этих действий. далее пишу ещё два скрипта:

              1. По расписанию раз в 20 минут выполнять "Набор действий"

              2. В случае нажатия на кнопку выполнить "Набор действий"

              Вроде как запуск скрипта возможен - runScript/startScript

              Я использовал startScript. и он почемуто не сработал т.е. сперва я неправильно вводил название скрипта и были ошибки. но когда ввел правильно ничего не произошло.

              Как такую задачу выполнять?

              Есть вариант подписать скрипт на какуюнибудь переменную а других скриптах менять её. Но как то нелогично мне это. `

              Ну вот. Т.е. хочется использовать скрипт как функцию. Т.е. это заданный набор действий который нужно производить при возникновении разных условий(запрос пользователя/расписание и т.п.). Скрипт этот анализирует несколько состояний и делает вывод о том какие набор действий ему произвести.

              Конкретно мой случай:

              Есть датчик температуры, есть текущее время и есть режим работы отопления.

              Скрипт в зависимости от этих данных управляет котлом.

              Режимы работы отопление:

              1. Выключено. тут все понятно

              2. Включено. Тут просто включается котел и жарит на все пироги.

              3. Поддержка минимальной температуры. Тут вводится зависимость от температуры и времени. Система отопления на основе теплого пола. соответственно инертна. Настройки такие. с 7 утра до 23 вечера включать котел если температура упала ниже 5 градусов. с 23 до 7 утра включать если температура меньше 10. Сейчас этот режим. как правило за день температура падает на 2-3 градуса и становится равной 8. в 23 котел включается и прогревает помещение до 10 градусов и отключается. Т.е. работает ночью по ночному дешевому тарифу. Задача чтоб дом не замерз пока в нем никого нету

              4. Поддержка нормальной температуры. Тоже что и пункт 3 только уставки 15 днем и 25 ночью соответственно. При желании приехать в дом - заранее включаю этот режим и дом к приезду должен прогреться.

              Все это описано в скрипте. Режим работы - объект enum с соответствующими состояниями

              Сейчас скрипт работает по расписанию. каждые 15 минут проверяет состояния и делает выводы включить или отключить котел. Можно было бы повесить на изменение температуры. но как то котел не включился из за того что скрипт почемуто пропустил запуск по расписанию. И у меня возникла мысль что лучше он переодически будет проверять состояние системы и делать выводы. чем пропустит какоето событе и не выполнит их.

              Так как у меня пока сложности с доступом к админке из инета я настроил управление режимами через телеграм. посылаю команду на изменение режима. Т.е. решил я в выхи приехать в теплый дом - посылаю команду включить нормальный режим отопления.

              И хочу видет реакцию на эту команду сразу а не через 15 минут после команды. соответственно помимо выполнения по расписанию нужно еще и по событию запускать этот скрипт.

              Как то так. :)

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

                @XAPuTOH:

                @XAPuTOH:

                Хотя может я не правильно понял идиологию?

                У меня есть некий набор действий который нужно выполнить в двух случаях:

                1. По расписанию

                2. По запросу пользователя.

                Я предположил что можно написать скрипт "Набор действий" выполнения этих действий. далее пишу ещё два скрипта:

                1. По расписанию раз в 20 минут выполнять "Набор действий"

                2. В случае нажатия на кнопку выполнить "Набор действий"

                Вроде как запуск скрипта возможен - runScript/startScript

                Я использовал startScript. и он почемуто не сработал т.е. сперва я неправильно вводил название скрипта и были ошибки. но когда ввел правильно ничего не произошло.

                Как такую задачу выполнять?

                Есть вариант подписать скрипт на какуюнибудь переменную а других скриптах менять её. Но как то нелогично мне это. `

                Ну вот. Т.е. хочется использовать скрипт как функцию. Т.е. это заданный набор действий который нужно производить при возникновении разных условий(запрос пользователя/расписание и т.п.). Скрипт этот анализирует несколько состояний и делает вывод о том какие набор действий ему произвести.

                Конкретно мой случай:

                Есть датчик температуры, есть текущее время и есть режим работы отопления.

                Скрипт в зависимости от этих данных управляет котлом.

                Режимы работы отопление:

                1. Выключено. тут все понятно

                2. Включено. Тут просто включается котел и жарит на все пироги.

                3. Поддержка минимальной температуры. Тут вводится зависимость от температуры и времени. Система отопления на основе теплого пола. соответственно инертна. Настройки такие. с 7 утра до 23 вечера включать котел если температура упала ниже 5 градусов. с 23 до 7 утра включать если температура меньше 10. Сейчас этот режим. как правило за день температура падает на 2-3 градуса и становится равной 8. в 23 котел включается и прогревает помещение до 10 градусов и отключается. Т.е. работает ночью по ночному дешевому тарифу. Задача чтоб дом не замерз пока в нем никого нету

                4. Поддержка нормальной температуры. Тоже что и пункт 3 только уставки 15 днем и 25 ночью соответственно. При желании приехать в дом - заранее включаю этот режим и дом к приезду должен прогреться.

                Все это описано в скрипте. Режим работы - объект enum с соответствующими состояниями

                Сейчас скрипт работает по расписанию. каждые 15 минут проверяет состояния и делает выводы включить или отключить котел. Можно было бы повесить на изменение температуры. но как то котел не включился из за того что скрипт почемуто пропустил запуск по расписанию. И у меня возникла мысль что лучше он переодически будет проверять состояние системы и делать выводы. чем пропустит какоето событе и не выполнит их.

                Так как у меня пока сложности с доступом к админке из инета я настроил управление режимами через телеграм. посылаю команду на изменение режима. Т.е. решил я в выхи приехать в теплый дом - посылаю команду включить нормальный режим отопления.

                И хочу видет реакцию на эту команду сразу а не через 15 минут после команды. соответственно помимо выполнения по расписанию нужно еще и по событию запускать этот скрипт.

                Как то так. :) `
                Я бы сделал что то подобное, это не рабочий вариант это как один из вариантов

                createState('Climat.mode', '');
                
                on({id: 'температура', change: 'ne'}, function (obj) {
                    Otoplenie();
                });
                on({id: 'Climat.mode', change: 'any'}, function (obj) {
                    if (obj.newState.val){
                       Otoplenie();
                    }
                });
                
                function Otoplenie(){
                    var RealTemp = parseFloat(getState('RealTemp').val).toFixed(2);
                    var SetTemp = parseFloat(getState('SetTemp').val).toFixed(2);
                    var Mode = getState('Climat.mode').val;
                
                    var newDate = (new Date()).getTime();
                    var date = new Date();
                    var day = date.getDay(); // 0-воскр. 6-суббота
                    var hour = date.getHours();
                    var min = (date.getMinutes()<10?'0':'') + date.getMinutes();
                
                    if(Mode === 'OFF'){
                       log('отопление отключено');
                    } else if (Mode === 'ON'){
                            log('включаем котел');
                    } else if (Mode === 'NORM'){
                            if (hour >= 8 && hour <= 18){
                                SetTemp = 15;
                            } else {
                                SetTemp = 25;
                            }
                            if (RealTemp > SetTemp){
                                log('выключаем котел');
                            }
                            if (RealTemp < SetTemp){
                                log('включаем котел');
                            }
                      } else if (Mode === 'AUTO'){
                            if (hour > 7 && hour < 23 && RealTemp < 5){
                                log('включаем котел');
                            } else if (hour > 23 && hour < 7 && RealTemp < 10){
                                log('включаем котел');
                            } else {
                                log('выключаем котел');
                            }
                    }
                }
                

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

                http://blog.instalator.ru/

                1 Antwort Letzte Antwort
                0
                • X Offline
                  X Offline
                  XAPuTOH
                  schrieb am zuletzt editiert von
                  #9

                  Вот что значит отсутствие опыта!

                  Не думал что в одном скрипте можно несколько подписок сделать!

                  А функция у меня примерно такая же. ))

                  Все таки идеология следующая - скрипты используются для выполнения набора действий по подписке?

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

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

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

                    @XAPuTOH:

                    Все таки идеология следующая - скрипты используются для выполнения набора действий по подписке? `
                    Не только, можно сделать по крону

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

                    http://blog.instalator.ru/

                    1 Antwort Letzte Antwort
                    0
                    • H Offline
                      H Offline
                      Haba
                      schrieb am zuletzt editiert von
                      #11

                      У меня пока так реализована обратная связь через телеграм
                      1160_______1.jpg

                      1 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        adelec12
                        schrieb am zuletzt editiert von
                        #12

                        @XAPuTOH:

                        Т.е. exec выполняется асинхронно. Соответственно нельзя строить скрипт таким образом как я сперва задумал, а нужно строить на колбэках.

                        Сперва exec. внутри него основной скрипт. а если exec несколько http://www.comparateur-dependance-senior.com. то каждый последующий нужно запускать в колбэке предидущего? `
                        Довольно сложно это понятие, но для лучшего понимания требуется небольшое упражнение.

                        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

                        734

                        Online

                        32.5k

                        Benutzer

                        81.6k

                        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