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



  • @Erik:

    @intrapro:

    Можно значительно короче - один и тот же таймер и один resetTimer - за один раз сработает только один вариант

    Там каждый "nextХ" работает с конкретным актуатором, а каждый "resetX" отсылает к конкретному "nextX".

    Чтобы их оставить по одному, необходжтмо "нексту" строковой переменной имя нужного актуатора передавать.

    Это как сделать?

    Имя строкой не передается. Возможно, добавим этот функционал

    Но думаю вам это и не надо. Вы к разным актуаторам только в next обращаетесь. Нужно запомнить на входе значение ActRz.

    Хотя можно и не запоминать. Просто проверятьActRz в next

    Вариант с запоминанием:

    startOnChange(ActDsp);
    
    script({
       newvalue:0,
       regim:0,
    
        start() {
          if (ActRz.value < 4) {
                   this.newvalue = ActDsp.value;
                   this.regim = ActRz.value;
                   this.startTimer('T1', 2, 'next');
                   this.addListener(ActDsp, 'resetTimer');
          }  
        },
    
       next() {
       	  this.log('SET '+this.newvalue+' regim='+ this.regim);
              if (this.regim == 0)  ActComf.setValue(this.newvalue);
              if (this.regim == 1)  ActEco.setValue(this.newvalue);
              if (this.regim == 2)  ActOff.setValue(this.newvalue);
    
              this.exit();
       },
    
      resetTimer() {
            if (this.newvalue != ActDsp.value) {      
             	 this.newvalue = ActDsp.value;
             	 this.log('new value '+this.newvalue)
             	 this.stopTimer('T1');
            	 this.startTimer('T1', 2, 'next');
            }
      }
    });
    
    


  • @intrapro:

    Вариант с запоминанием:

    Да, красиво!

    Спасибо.



  • Доброго времени суток Всем !

    Помогите разобраться с информированием telegramm.

    Создал простейшую блок-схему включения отопителя по условию достижения определённой температуры DHT22_t с последующей отправкой сообщения в telegramm. Все отрабатывает как нужно, но но сообщения в бот валятся при каждом опросе датчика DHT22_t.

    Что я делаю не так ?
    1_3.png
    1_2.png
    1_1.png



  • перед "Action" нужна проверка состояния.

    Если и так все как надо присвоено - ничего не делать.

    Если нет - тогда присвоить и отправить в телеграмм.

    Иначе он каждый раз присваивает и отправляет.



  • @intrapro:

    @homa:

    Добрый день!

    Есть простейшее расписание - включить на закате две лампочки, но включается только одна. Причем включается та, которая будет первой в списке)) Пересоздать задачу не помогает, но в журнале отображается запись "Команда on Расписание"

    Спасибо. Проверим, пофиксим

    Добрый день!

    В журнале для каждой лампочки отображается "Команда on Расписание"?

    А состояние - "Включено" - только для одной?

    С какими каналами связаны светильники? С MegaD?



  • @MAMOHT:

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

    @Erik:

    перед "Action" нужна проверка состояния.

    Если и так все как надо присвоено - ничего не делать.

    Если нет - тогда присвоить и отправить в телеграмм.

    Все верно.

    Надо добавить условие AND:
    scen101.jpg
    Если показания датчика меньше уставки и радиатор выключен, включить радиатор и отправить сообщение.

    Кроме этого я бы добавил проверку "Авто":
    scen102.jpg
    Это даст возможность отключить управление радиатором в автоматическом режиме из пользовательского интерфейса. Достаточно будет просто убрать там галку "Авто". Это первое.

    И второе. Иногда хочется включить/выключить радиатор на некоторое время, и чтобы он не срабатывал по датчику. Это можно будет делать благодаря проверки Авто
    scen103.jpg
    То есть при нажатии на иконку радиатора, автоматический режим отключится, появятся часики на иконке радиатора.

    Можно установить время восстановления автоматического режима для радиатора 2 часа после включения.

    Приходите домой, замерзли, нажимаете на иконку радиатора и он будет греть два часа не отключаясь. А потом (через 2 часа) сам перейдет в автоматический режим. Это для примера 😉



  • @sergeyygr:

    А все таки, есть ли способ запуска звукового файла из сценария? 😉

    Есть. В версии 4.4.18 добавлена команда this.execOS(команда ОС) https://ih-systems.com/ru/command_list/

    Можно попробовать



  • @intrahouse:

    Есть. В версии 4.4.18 добавлена команда this.execOS(команда ОС) https://ih-systems.com/ru/command_list/

    Можно попробовать

    про нее написано
    <quote>> Выполнение команд операционной системы

    А операционной системы сервера? Или клиента?

    Где выполняться будет?



  • @Erik:

    Где выполняться будет?

    На сервере.



  • @intrahouse:

    @MAMOHT:

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

    @Erik:

    перед "Action" нужна проверка состояния.

    Если и так все как надо присвоено - ничего не делать.

    Если нет - тогда присвоить и отправить в телеграмм.

    Все верно.

    Надо добавить условие AND:

    Спасибо за подробный ответ!



  • @intrapro:

    Можно, конечно

    Нужно установить слушателя событий this.addListener(device, 'funname')

    Если я устанавливаю слушателя, то сценарий по сути всегда остается в работе?

    У меня происходит так - после редактирования вызываю сценарий и первый раз все ОК. А следующий раз может вызваться, а может нет.

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

    Как правильно сделать?



  • @Alex_Jet:

    @intrapro:

    Можно, конечно

    Нужно установить слушателя событий this.addListener(device, 'funname')

    Если я устанавливаю слушателя, то сценарий по сути всегда остается в работе?

    У меня происходит так - после редактирования вызываю сценарий и первый раз все ОК. А следующий раз может вызваться, а может нет.

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

    Как правильно сделать?

    Да, нужно выполнить выход this.exit();

    При завершении сценария все его слушатели и таймеры удаляются



  • Спасибо за полезное обновление! Подскажите как из сценария узнать данные "столбцы Значение и Время в таблице устройств для просмотра текущего значения устройства"?



  • @Alex_Jet:

    Спасибо за полезное обновление! Подскажите как из сценария узнать данные "столбцы Значение и Время в таблице устройств для просмотра текущего значения устройства"?

    Там выводятся value и lastts



  • @intrapro:

    Там выводятся value и lastts

    Жаль. Я думал, что реализовали то что обсуждалось здесь: https://frm.intrahouse.ru/viewtopic.php?f=18&t=5446&start=120#p8867

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

    Еще вопрос - как из сценария вызвать другой сценарий? Например, сценарием обрабатываем голосовые команды и по команде "включи свет" нужно в нескольких помещниях включить свет. Или команда "вечерний свет" - выключаем все и включаем нужное.



  • @Alex_Jet:

    @intrapro:

    Там выводятся value и lastts

    Жаль. Я думал, что реализовали то что обсуждалось здесь: https://frm.intrahouse.ru/viewtopic.php?f=18&t=5446&start=120#p8867

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

    реализовали выполнение (запуск) программы на сервере.

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



  • @Erik:

    реализовали выполнение (запуск) программы на сервере.

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

    Я знаю это, но не хотелось бы использовать exec как потенциально опасную команду. iH сам общается с БД, поэтому можно сделать свойство сценария, которая методами iH вытаскивала бы информацию.



  • Зато это прямо "сейчас можно реализовать".



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



  • Ключевое слово особняк 😄


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