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



  • @amgstone создал сценарий:

    /** 
    * @name Заміна фільтра води 
    * @desc  
    * @version 4 
    */
    const meter = Device("Meter","час заміни фільтра"); 
    
    script({
        start() {
        meter.setParam("aval",meter.getParam("aval")+1);
        if(meter.getParam("aval")===90){
        this.info('telegram', 'OWNER', 'Заміна фільтра води');
        this.info('pushnotification', 'OWNER', 'Заміна фільтра води'); 
        
        }
        } 
    });
    
    

    но в IH не смог создать дату, чтобы визуализировало дату когда надо заменить фильтр, возможно добавите устройство?



  • Готовлюсь к новому году) в проем гаражных ворот смонтировал RGB-ленту на базе WS2818. Хочется реализовать эффект бегущего огня с плавно изменяемой яркостью (вот пример - смотреть на 2:52-3:02). Я конечно понимаю, что iH - это не RGB-контроллер, но все же есть ли какая-то возможность сделать подобный эффект?? Сам сделал "длинный" бегущий огонь, но код очень топорный...

        TronEffect() {
          this.addListener(sw, "ChangeStateSw");
          
          let blue = 'FF00FF';
          let dark = '000000';
          let color = [blue+blue+blue+dark+dark+dark,dark+blue+blue+blue+dark+dark, dark+dark+blue+blue+blue+dark, dark+dark+dark+blue+blue+blue, blue+dark+dark+dark+blue+blue, blue+blue+dark+dark+dark+blue];
          
          if(++this.i > color.length-1) this.i = 0;
          this.cmd = color[this.i];
          
          this.SendDataToWS2818(this.plugin, this.channel, this.cmd, this.chip);
          
          this.startTimer("T1", this.period, "TronEffect");
        },
    

    Причем это просто бегущий огонь из 6 "пикселей". Как сделать уменьшающийся по яркости хвост огня и увеличить его скорость - это большой вопрос!!



  • @Alex_Jet Добрый день, судя по коду, огонь у вас бегает в переделах 6-ти пикселей ? какая длина ленты у вас ? есть фризы ?



  • @dev, огонь смещается по 6 пикселям. Но поскольку megad повторяет всю эту посылку N-количество раз (ключ "chip" - тут описание), то выглядит это вот так:
    видео. Лента состоит из двух логических запараллеленых кусков длиной 39 чипов)). Ну а вообще длина - 2,4+3+2,4 м. Что такое фризы?



  • Пользователь @intrapro написал в Сценарии - новая версия API:

    @homa, пока такой возможности нет 😞

    Подскажите, появилась возможность запуска сценария из сценария ?
    И есть ли возможность после перезагрузки системы возобновлять работу активных сценариев ?



  • Пользователь @fanagor написал в Сценарии - новая версия API:

    И есть ли возможность после перезагрузки системы возобновлять работу активных сценариев ?

    А так не получается - функция boot()?
    @intrahouse, @dev, я бы всякие такие возможности (startOnChange, check, boot и прочее) добавил бы на страницу "Система команд".



  • Пользователь @Alex_Jet написал в Сценарии - новая версия API:

    А так не получается - функция boot()?

    Если сценарий инициирует перезагрузку системы, думаю как сделать, чтобы после перезагрузки он продолжил свое выполнение дальше.
    boot() инициирует новый запуск, вопрос как возобновить исполнение с нужной точки.



  • Пользователь @fanagor написал в Сценарии - новая версия API:

    boot() инициирует новый запуск, вопрос как возобновить исполнение с нужной точки.

    Может быть запоминать состояние в переменной сценария или вообще в глобальной переменной?



  • Пользователь @Alex_Jet написал в Сценарии - новая версия API:

    Может быть запоминать состояние в переменной сценария или вообще в глобальной переменной?

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



  • Коллеги, старую версию сценариев уже забыл...как в сценарии проверить включен ли RGB-светильник? По isChanged в отладчике вижу вот это:

    isChanged(RGBLAMP4_01,aval)=true Changed: {"RGBLAMP4_01":{"aval":[255,255,255],"dval":1,"stval":1}}
    


  • Добрый день.
    this.isChanged(device1) проверяет свойство Error устройства device1 ?
    В сценарии есть команда
    if(this.isChanged(TERMOREG_1)) {
    //
    }

    Сценарий запускается по изменению, но при этом результат проверки условия false.
    02.12 16:10:27.687 Check(TERMOREG_1) => true
    02.12 16:10:27.688 Started
    02.12 16:10:27.689 isChanged(TERMOREG_1,aval)=false Changed: {"TERMOREG_1":{"err":"Device timeout error!"}}
    02.12 16:10:27.689 isChanged(LAMP_32,dval)=false Changed: {"TERMOREG_1":{"err":"Device timeout error!"}}
    02.12 16:10:27.689 isChanged(TERMOREG_3_1,aval)=false Changed: {"TERMOREG_1":{"err":"Device timeout error!"}}
    02.12 16:10:27.689 Stopped

    Тип устройства: аналоговый датчик.



  • @fanagor, добрый день.

    Метод this.isChanged позволяет узнать, какое событие стало причиной запуска сценария:
    this.isChanged(device, 'setpoint') - изменили уставку
    this.isChanged(device, 'auto') - изменился флаг auto
    this.isChanged(device, 'value') - изменилось основное значение

    this.isChanged(device) сокращенная форма для this.isChanged(device, 'value'), то есть =true, если сценарий запущен при изменении основного свойства устройства (aval для аналогового, dval для дискретного устройства)

    isChanged(TERMOREG_1,aval)=false Changed: {"TERMOREG_1":{"err":"Device timeout error!"}} означает:
    Сценарий запустился при изменении основного значения TERMOREG_1?
    Нет, изменился флаг ошибки "err", так как сработал таймаут
    Истинным в данном случае будет
    this.isChanged(TERMOREG_1, 'error') или this.isChanged(TERMOREG_1, 'err')


Log in to reply