Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Видимость переменных. И еще пара вопросов.

    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

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • X
      XAPuTOH last edited by

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

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

      1 Reply Last reply Reply Quote 0
      • X
        XAPuTOH last edited by

        @instalator:

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

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

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          @XAPuTOH:

          @instalator:

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

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

          1 Reply Last reply Reply Quote 0
          • I
            instalator last edited by

            @XAPuTOH:

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

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

            1 Reply Last reply Reply Quote 0
            • X
              XAPuTOH last edited by

              @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 Reply Last reply Reply Quote 0
              • I
                instalator last edited by

                @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('выключаем котел');
                            }
                    }
                }
                
                1 Reply Last reply Reply Quote 0
                • X
                  XAPuTOH last edited by

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

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

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

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

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

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

                  1 Reply Last reply Reply Quote 0
                  • I
                    instalator last edited by

                    @XAPuTOH:

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

                    1 Reply Last reply Reply Quote 0
                    • H
                      Haba last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • A
                        adelec12 last edited by

                        @XAPuTOH:

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

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

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        814
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        4
                        12
                        2867
                        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