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



  • @Anatol:

    Есть тригер : датчик температуры, значения до десятой, н.р 5.3 град. Сейчас тригер срабатывает при каждом изменении на 0.1 град. Как сделать чтобы он срабатывал по целым числам, т.е при изменении на один градус ? Можно загрубить значение при выводе с датчика, но это нежелательно.

    Если делаете через JS, то напрашивается деление с остатком. Делите показание на единицу, если остаток равен нулю, то продолжаете выполнять сценарий



  • @Anatol:

    Есть тригер : датчик температуры, значения до десятой, н.р 5.3 град. Сейчас тригер срабатывает при каждом изменении на 0.1 град. Как сделать чтобы он срабатывал по целым числам, т.е при изменении на один градус ? Можно загрубить значение при выводе с датчика, но это нежелательно.

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

    То есть скрипт будет срабатывать при изменении значения на датчике. Но в основной функции мы это значение округляем до целого, сравниваем с запомненным +-1 и выполняем свою функцию (doFunction), ну или делаем какие-то действия. Что-то типа этого:

    const dt = Device("STEMP4_01");
    
    startOnChange(temp);
    
    script({
      temp_storage: 0;
    
      start() {
        let temp = Math.round(dt.value);
    
        if(temp < temp_storage - 1 || temp > temp_storage + 1) {
          this.temp_storage = temp;
          this.doFunction();
        }
        else this.exit();
      }
    });
    
    
    


  • temp_storage: 0; здесь выдает ошибку Unexpected token



  • @Anatol:

    temp_storage: 0; здесь выдает ошибку Unexpected token

    Замените ; на ,



  • Коллеги! Подскажите как сделать мультисценарий: Датчик движения - Snapshot с камеры с ID?

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



  • @Alex_Jet:

    Замените ; на ,

    Спасибо, получилось, в JS я не силен



  • Подскажите, в сценарии есть

    const dt = new Date();

    startOnChange([STEMP0_1], (dt.getHours() < STEMP0_1.getParam("hstop") || dt.getHours() > STEMP0_1.getParam("hstart"))

    script({….

    Если делать пробный запуск, то все работает, а так выдает ошибку dt is not defined ??



  • @Anatol:

    Подскажите, в сценарии есть

    const dt = new Date();

    startOnChange([STEMP0_1], (dt.getHours() < STEMP0_1.getParam("hstop") || dt.getHours() > STEMP0_1.getParam("hstart"))

    script({….

    Если делать пробный запуск, то все работает, а так выдает ошибку dt is not defined ??

    Нужно new Date() включить внутрь выражения. Так должно работать:

    startOnChange([STEMP0_1], ((new Date()).getHours() < STEMP0_1.getParam("hstop") || (new Date()).getHours() > STEMP0_1.getParam("hstart")));
    
    

    Причина в том, что область вне script - это декларативная область. Команды там размещать не надо, они выполняться не будут.

    При запуске сценария по триггеру, если есть входное условное выражение (второй аргумент в startOnChange), оно вычисляется. Если выражение истинно - начинается выполнение функции start.

    При пробном запуске startOnChange игнорируется, сразу запускается функция start, поэтому срабатывает



  • Поясните, пожалуйста, как послать команду плагину. Просьба привести пример.



  • @gis:

    Поясните, пожалуйста, как послать команду плагину. Просьба привести пример.

    Команды плагину можно послать из сценария (блок-схемы) или с кнопки.

    Плагин должен принимать от сервера сообщения с типом 'command'. Не все плагины поддерживают такую возможность.

    Набор команд и их формат также определяется плагином. Часто это служебные команды.

    Например, плагин xiaomi выполняет только команды 'scan' и 'remove'

    Для MegaD можно посылать любые запросы, которые принимает контроллер: см раздел "Отправка команды плагину из сценария"

    https://ih-systems.com/ru/product/plugin-megad/

    Например, выдать импульс:

    this.pluginCommand({unit:'megad1', command:'/%pwd%/?cmd=7:1;p10;7:0'});
    
    

    При использовании блок-схемы (или команды с кнопки) сначала из списка выбирается плагин, затем в поле Команда нужно прописать строку command без кавычек:

    /%pwd%/?cmd=7:1;p10;7:0
    
    


  • Добрый день. Обновился до версии 4.6.1. Перестали работать сценарии включения освещения по датчикам движения. В таблице сценариев lamp считается триггером, smotion не видит. 😞



  • Проблему уже заметили. Через час будет обновление.



  • @intrahouse:

    Проблему уже заметили. Через час будет обновление.

    Понял. Пока откатился на 4.6.0 - работает 🙂



  • Исправили. Можно обновить - 4.6.2



  • @intrahouse:

    Исправили. Можно обновить - 4.6.2

    Работает!



  • Коллеги! Подскажите когда примерно ждать реализации двух моментов:

    1. Возможность временного отключения задачи по расписанию

    2. Передача дополнительных параметров в сценарий при настройке задачи по расписанию.



  • Вопрос к разработчикам: почему не появилось в интерфейсе на закладке "Параметры" для устройства VOLL_ALL дополнительное свойство "Пониженная громкость"? Устройство VOLL_ALL работает через плагин http без обратной связи.

    * @name Оповещение о входной двери 
    * @desc Оповещение об открытой входной двери 
    * @version 4  
    */
    
    const SGERK_M1_P0 = Device("SGERK_M1_P0");
    const VOLL = Device("VOLL_ALL", "Общая громкость", [
    {"name":"VOLDOWN", "note":"Пониженная громкость",  "type":"number", "val":5},
      ]); 
    
    startOnChange([SGERK_M1_P0]);
    script({
      start() { 
         require("http").get(`http://192.168.0.43/mp3play?cmd=6&data=${VOLL.getParam("VOLDOWN")}`);
         this.startTimer("T1",1,"onTimerT1");
      },
      onTimerT1() { 
        require("http").get(`http://192.168.0.43/mp3playqueue?data=100,0,300,0,301,1002,300,0,301` );
      }
    })
    
    

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



  • @gis:

    Вопрос к разработчикам: почему не появилось в интерфейсе на закладке "Параметры" для устройства VOLL_ALL дополнительное свойство "Пониженная громкость"? Устройство VOLL_ALL работает через плагин http без обратной связи.

    > * @name Оповещение о входной двери 
    > * @desc Оповещение об открытой входной двери 
    > * @version 4  
    > */
    > 
    > const SGERK_M1_P0 = Device("SGERK_M1_P0");
    > const VOLL = Device("VOLL_ALL", "Общая громкость", [
    > {"name":"VOLDOWN", "note":"Пониженная громкость",  "type":"number", "val":5},
    >   ]); 
    > 
    > startOnChange([SGERK_M1_P0]);
    > script({
    >   start() { 
    >      require("http").get(`http://192.168.0.43/mp3play?cmd=6&data=${VOLL.getParam("VOLDOWN")}`);
    >      this.startTimer("T1",1,"onTimerT1");
    >   },
    >   onTimerT1() { 
    >     require("http").get(`http://192.168.0.43/mp3playqueue?data=100,0,300,0,301,1002,300,0,301` );
    >   }
    > })
    > 
    

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

    Где-то в этом месте рассказывали:

    1. https://frm.intrahouse.ru/viewtopic.php?f=18&t=5375&hilit=свойства&start=150#p9381

    2. https://frm.intrahouse.ru/viewtopic.php?f=18&t=5375&p=9478&hilit=свойства#p9478



  • @Alex_Jet:

    Коллеги! Подскажите когда примерно ждать реализации двух моментов:

    1. Возможность временного отключения задачи по расписанию

    2. Передача дополнительных параметров в сценарий при настройке задачи по расписанию.

    Задачи небольшие, постараемся сделать в течение мая.



  • @gis:

    Вопрос к разработчикам: почему не появилось в интерфейсе на закладке "Параметры" для устройства VOLL_ALL дополнительное свойство "Пониженная громкость"? Устройство VOLL_ALL работает через плагин http без обратной связи.

    > const VOLL = Device("VOLL_ALL", "Общая громкость", [
    > {"name":"VOLDOWN", "note":"Пониженная громкость",  "type":"number", "val":5},
    >   ]); 
    > 
    > 
    

    Добрый день.

    В конце массива запятая не нужна. Движок не смог распарсить JSON, поэтому дополнительное свойство не появилось.

    [{"name":"VOLDOWN", "note":"Пониженная громкость", "type":"number", "val":5} [color=#FF0000]<size size="150">,</size>]);

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

    @gis:

    Просьба пояснить механизм назначения дополните свойств, сценарием. Можно ли назначать эти свойства с использованием графического редактора сценариев?

    Если в каком-то сценарии объявить доп. свойство устройству, это свойство можно использовать в любых сценариях, в том числе в блок-схемах, используя Операции-> "блок DP" (свойства устройства) для сравнения или команду "Присваивание значения".

    Объявить новое свойство через блок-схему нельзя.

    @gis:

    Также интересует типы дополнительных свойств (можно ли вводить время, дату)? Просьба привести примеры.

    Пока реализовано только три типа для ввода: number, cb (checkbox) и time. Любой другой тип, включая string, выводится в Параметрах как readOnly string.

    checkbox - это галочка, значения true/false, можно 0/1

     {"name":"myFalg", "note":"Использовать  ...", "type":"cb", "val":0}
    
    

    time используется для ввода временных интервалов. Значение будет в секундах, просто для ввода используется специальный компонент, позволяющий ввести Час-Мин-Сек.

     {"name":"waitTime", "note":"Время таймера ожидания", "type":"time", "val":10}
    
    

    Дату, время как временную точку пока интерактивно вводить нельзя.

    Но в сценарии для хранения timestamp Вы можете использовать тип number.

    В этом случае параметр редактировать вручную вряд ли кто-то будет, поэтому его лучше скрыть ( "hide":1)

     {"name":"lastTime", "note":"Время последней фиксации ..", "type":"number", "val":0, "hide":1 }
    
    

    В коде сценария:

      if (!myActor.getParam("lastTime")) {
      	myActor.getParam("lastTime") = Date.now();
      } else  if (Date.now() - myActor.getParam("lastTime") > 10000)  {
         .....
      }
    
    
    

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