Сценарии - новая версия API



  • @intrapro:

    @Alex_Jet:

    Коллеги! Пытаюсь решить простую задачу. Из сценария делаю heater.setAuto('false'), однако режим авто у актюатора таким образом не выключается:

    SetAutoFalse.jpg

    При этом если выключить АВТО вручную из меню актюатора, а потом включить с помощью сценария heater.setAuto('true'), то он включается. Прошу проверить возможность выключения АВТО из сценариев и подправить документацию в этом месте - https://ih-systems.com/ru/command_list/#1.3.3

    Проверим, но в данном случае причина в том, что для true/false кавычки не нужны.

    В JS определены примитивные значения true и false:

    heater.setAuto(true)/ heater.setAuto(false) , в принципе можно и так: heater.setAuto(1)/heater.setAuto(0)

    Если же брать в кавычки - получается непустая строка, и значение 'false' вычисляется как true 😉

    Да, вы правы! Но с False/True нормально не работает - при пробном запуске говорит что-то типа "True is not defined"



  • @Alex_Jet:

    Да, вы правы! Но с False/True нормально не работает - при пробном запуске говорит что-то типа "True is not defined"

    Действительно, ошибочка у нас в документации 😞



  • zigbee кнопка,обнаружилась проблема : переключатель выдает токой JSON value = ' {"battery":100,"voltage":3035,"linkquality":65,"click":"single"}'

    меня интересует больше всего значение click, ставлю формулу расчета : JSON.parse(value).click и получаю значение single, дальше под это пишу скрипт и всё фурычит.

    Но есть проблема : раз в час устройстро когда его не трогают выдает JSON : {"battery":100,"voltage":3035,"linkquality":65}, без параметра click (это ответ на нажатие кнопки ), и моя формула выдает неопределенность undefined и всё подвисает.

    Как сделать чтобы если click нету , то пусть его значение будет none, но у нас формула в одной строке… Что то типа !data.click ? 'none' : data.click должно быть , но не работает .



  • @Anatol:

    zigbee кнопка,обнаружилась проблема : переключатель выдает токой JSON value = ' {"battery":100,"voltage":3035,"linkquality":65,"click":"single"}'

    меня интересует больше всего значение click, ставлю формулу расчета : JSON.parse(value).click и получаю значение single, дальше под это пишу скрипт и всё фурычит.

    Но есть проблема : раз в час устройстро когда его не трогают выдает JSON : {"battery":100,"voltage":3035,"linkquality":65}, без параметра click (это ответ на нажатие кнопки ), и моя формула выдает неопределенность undefined и всё подвисает.

    Как сделать чтобы если click нету , то пусть его значение будет none, но у нас формула в одной строке… Что то типа !data.click ? 'none' : data.click должно быть , но не работает .

    Добрый день!

    Вы можете использовать тернарный оператор в формуле расчета, например, так:

    (value && value.indexOf("click")>0) ? JSON.parse(value).click : 'none'
    
    


  • Спасибо, получилось.



  • Коллеги! Есть какая-то бага в pm - если переходишь в раздел "Сценарии" -> "Рабочие сценарии", выбираешь нужный и пытаешься открыть нижнее окно отладчика, то ничего не происходит! Более того, больше ничего не работает (нельзя перейти в "Сценарии", например) в этой вкладке. Решается переходом в другие разделы и возвратом в "Сценарии"…нижнее окно в "Рабочие сценарии" можно открыть только путем танцем с бубном (после перехода в раздел "Сценарии" зайти в "Сценарии", открыть нижнее окно и потом перейти в "Рабочие сценарии").



  • @Alex_Jet:

    Коллеги! Есть какая-то бага в pm - если переходишь в раздел "Сценарии" -> "Рабочие сценарии", выбираешь нужный и пытаешься открыть нижнее окно отладчика, то ничего не происходит! Более того, больше ничего не работает (нельзя перейти в "Сценарии", например) в этой вкладке. Решается переходом в другие разделы и возвратом в "Сценарии"…нижнее окно в "Рабочие сценарии" можно открыть только путем танцем с бубном (после перехода в раздел "Сценарии" зайти в "Сценарии", открыть нижнее окно и потом перейти в "Рабочие сценарии").

    Да, действительно, баг там есть 😞 Просто пока руки не дошли 🙂



  • Не все из блоков в сценарий попадает.

    Сделал простой сценарий для изменения сдвига температуры отключения радиаторов в зависимости от температуры на улице (если на улице ниже -10, радиаторы греют до достижения нужной Т в комнате, т.е. сдвиг 0, если от -10 до +10, до сдвиг 2, т.е. радиаторы выключаются на 2 градуса раньше, остальное теплый пол догревает, если Т выше +10, сдвиг 5, т.е. в последних двух случаях радиаторы подключатся при переключении режимов, когда комнату нагреть нужно до комфортной Т, или при агрессивном проветривании :lol: ).

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

    и в зависимости от температурного диапазона присваивать смещениям одно из 3-х фиксированных значений.

    Перед присвоением проверяю текущее значение, присвоение должно происходить если текущее не равно нужному (не равно это "!=" ???).

    Все хорошо, но проверка текущего значения смещения в скрипт не попадает.

    Скрипт по этой схеме прописывается такой

    /** 
    * @name SdvigRO  
    * @desc  
    * @version 4 
    */
    
    const ACTORA1 = Device("ACTORA1");
    const ACTORA76 = Device("ACTORA76");
    const ACTORA77 = Device("ACTORA77");
    
    startOnChange([ACTORA1]);
    
    script({
      start() { 
        if (10 <= ACTORA1.value) {
        }
         this.sub1();
         this.sub2();
        if ((ACTORA1.value > -10) && (ACTORA1.value < 10)) {
        }
         this.sub3();
         this.sub4();
        if (-10 >= ACTORA1.value) {
        }
         this.sub5();
         this.sub6();
      },
      sub1() { 
        if (10 <= ACTORA1.value) {
          ACTORA76.setParam("value",5);
        }
      },
      sub2() { 
        if (10 <= ACTORA1.value) {
          ACTORA77.setParam("value",5);
        }
      },
      sub3() { 
        if ((ACTORA1.value > -10) && (ACTORA1.value < 10)) {
          ACTORA76.setParam("value",2);
        }
      },
      sub4() { 
        if ((ACTORA1.value > -10) && (ACTORA1.value < 10)) {
          ACTORA77.setParam("value",2);
        }
      },
      sub5() { 
        if (-10 >= ACTORA1.value) {
          ACTORA76.setParam("value",0);
        }
      },
      sub6() { 
        if (-10 >= ACTORA1.value) {
          ACTORA77.setParam("value",0);
        }
      }
    })
    
    
    


  • И расписание утром не сработало.

    Вечером скрипты запустились.

    Утром - или не запустились, или не отобразилось, что были запущены.

    Скрипты одинаковые, в вечернем значение увеличивается на 1, в утреннем уменьшается на 1.

    /** 
    * @name Уменьшить.Т.Днем 
    * @desc  
    * @version 4  
    */
    
    const ActRz = Device("ActorA", "Режим отопления");
    const ActComf = Device("ActorA", "Уставка Комфорт");
    
    script({
        start() {
          if (ActRz.value === 0) {
            let newvalue = ActComf.value-1;
            ActComf.setValue(newvalue);
            return;
          }  
        }
    });
    
    


  • @Erik:

    И расписание утром не сработало.

    Вечером скрипты запустились.

    Утром - или не запустились, или не отобразилось, что были запущены.

    Скрипты одинаковые, в вечернем значение увеличивается на 1, в утреннем уменьшается на 1.

    > /** 
    > * @name Уменьшить.Т.Днем 
    > * @desc  
    > * @version 4  
    > */
    > 
    > const ActRz = Device("ActorA", "Режим отопления");
    > const ActComf = Device("ActorA", "Уставка Комфорт");
    > 
    > script({
    >     start() {
    >       if (ActRz.value === 0) {
    >         let newvalue = ActComf.value-1;
    >         ActComf.setValue(newvalue);
    >         return;
    >       }  
    >     }
    > });
    > 
    

    В 12 часов посмотрел, скрипты значатся выполненными в 8:00. Они выполнились позже, или выполнились вовремя, а информация о выполнении отобразилась позже?



  • @Erik:

    Все хорошо, но проверка текущего значения смещения в скрипт не попадает.

    Проверим, спасибо за баг-репорт



  • @Erik:

    И расписание утром не сработало.

    В 12 часов посмотрел, скрипты значатся выполненными в 8:00. Они выполнились позже, или выполнились вовремя, а информация о выполнении отобразилась позже?

    Если бы выполнились позже, то и время выполнения было бы позже. Время фиксируется в момент запуска сценария

    Экраны в PM динамически не обновляются. Может причина в том, что вкладка была открыта до 8:00 ?



  • @intrapro:

    @Erik:

    И расписание утром не сработало.

    В 12 часов посмотрел, скрипты значатся выполненными в 8:00. Они выполнились позже, или выполнились вовремя, а информация о выполнении отобразилась позже?

    Если бы выполнились позже, то и время выполнения было бы позже. Время фиксируется в момент запуска сценария

    Экраны в PM динамически не обновляются. Может причина в том, что вкладка была открыта до 8:00 ?

    Там есть кнопка "обновить", я ее нажимал.

    Может опять шутки с временным поясом.

    Добавил в скрипты уведомление на почту.

    Посмотрю, во сколько будут отправлены письма.



  • @intrapro:

    @Erik:

    Все хорошо, но проверка текущего значения смещения в скрипт не попадает.

    Проверим, спасибо за баг-репорт

    Поменял блок схему на такую

    Все в скрипте прописалось

    /** 
    * @name SdvigRO  
    * @desc  
    * @version 4 
    */
    
    const ACTORA1 = Device("ACTORA1");
    const ACTORA76 = Device("ACTORA76");
    const ACTORA77 = Device("ACTORA77");
    
    startOnChange([ACTORA1]);
    
    script({
      start() { 
        if (10 <= ACTORA1.value) {
        }
         this.sub1();
         this.sub2();
        if ((ACTORA1.value > -10) && (ACTORA1.value < 10)) {
        }
         this.sub3();
         this.sub4();
        if (-10 >= ACTORA1.value) {
        }
         this.sub5();
         this.sub6();
      },
      sub1() { 
        if (10 <= ACTORA1.value || 5) {
          ACTORA76.setParam("value",5);
        }
      },
      sub2() { 
        if (10 <= ACTORA1.value || 5) {
          ACTORA77.setParam("value",5);
        }
      },
      sub3() { 
        if ((ACTORA1.value > -10) && (ACTORA1.value < 10) || 2) {
          ACTORA76.setParam("value",2);
        }
      },
      sub4() { 
        if ((ACTORA1.value > -10) && (ACTORA1.value < 10) || 2) {
          ACTORA77.setParam("value",2);
        }
      },
      sub5() { 
        if (-10 >= ACTORA1.value || 0) {
          ACTORA76.setParam("value",0);
        }
      },
      sub6() { 
        if (-10 >= ACTORA1.value || 0) {
          ACTORA77.setParam("value",0);
        }
      }
    })
    
    


  • @intrapro:

    @Erik:

    Все хорошо, но проверка текущего значения смещения в скрипт не попадает.

    Проверим, спасибо за баг-репорт

    Попробовал заменить функцию "И" на "Если А=В" (она сравнивает результат двух других "если").

    Просто ошибка в скрипте в результате.



  • @Erik:

    Может опять шутки с временным поясом.

    Добавил в скрипты уведомление на почту.

    Посмотрю, во сколько будут отправлены письма.

    Письмо отправляется в 11-00.

    Это установка часового пояса на сервере.

    Виджет "часы" с сервера время берет, или с компьютера, на котором отображается?



  • @Erik:

    @Erik:

    Может опять шутки с временным поясом.

    Добавил в скрипты уведомление на почту.

    Посмотрю, во сколько будут отправлены письма.

    Письмо отправляется в 11-00.

    Это установка часового пояса на сервере.

    Виджет "часы" с сервера время берет, или с компьютера, на котором отображается?

    Виджет "часы" время берет с компьютера



  • @Erik:

    @Erik:

    Может опять шутки с временным поясом.

    Добавил в скрипты уведомление на почту.

    Посмотрю, во сколько будут отправлены письма.

    Письмо отправляется в 11-00.

    Это установка часового пояса на сервере.

    Виджет "часы" с сервера время берет, или с компьютера, на котором отображается?

    Я в тупике.

    Часовой пояс на сервере сменил - все равно скрипт выполнятся по UTC, а не по Москве.

    РАсписание запуска пересоздал. Результат тот же - запускаются по UTC.

    могу, конечно, просто сместить настройку на 3 часа.



  • @Erik:

    могу, конечно, просто сместить настройку на 3 часа.

    Это конечно не вариант 🙂

    Перезапустите сервер IntraHouse. Часовой пояс берется движком Node при старте.

    Чтобы убедиться, что время правильное, можно посмотреть текущее время в любом из журналов, в отладчике любого сценария, плагина…



  • После перезагрузки в отладчике плагина время стало московским.

    Спасибо.


Авторизуйтесь, чтобы ответить