Сценарии в intraHouse Cherry



  • @Alexulik:

    const script = {

    start() {

    const temp = 25;

    this.assign(dt, "defval", temp);

    Видимо так?

    Да, все верно, можно так.

    Этот сценарий можно привязать к кнопке либо запускать по расписанию.

    Если хочется более универсального решения, можно добавить виртуальное устройство Режим (как было в Berry):

    1. Добавить устройство с типом Переключатель, назовем его MODE

    2. Этому устройству в нижней табличке Состояния сделать: 0 - День 1 - Ночь 2 - Эконом и соотв. картинки

    3. Теперь это устройство можно вытащить на интерфейс. Шаблон представления - Переключатель состояния.

    Плюс по сравнению с кнопками - отображение текущего состояния.
    modeSwitch.png

    Его же можно вытащить в виде иконки как индикатор ( то что было в Berry)

    4. Сделать сценарий, для которого MODE является триггером и в нем уже менять уставки.

    Например, сделаем сценарий, который будет переключать уставки датчику. А сами уставки доступны через интерфейс пользователя.
    changeOnMode.png

     /** 
    * @name При изменении режима - изменить уставку 
    * @desc  
    * @version  
    */
    const mode = DeviceT("ActorE", "Переключатель режима");
     const dt = Device("SensorA", "Датчик температуры", [
      {"name":"dayTemp", "note": "Целевая днем, С", "type":"number", "val":23},
      {"name":"nightTemp", "note": "Целевая ночью, С", "type":"number", "val":21},
      {"name":"ecoTemp", "note": "Целевая в режиме эконом, С", "type":"number", "val":19}
    ]); 
    
     const script = {
     	start() {
     	  if (mode.dval == 0)  this.assign(dt, "defval", dt.dayTemp); 
     	  if (mode.dval == 1)  this.assign(dt, "defval", dt.nightTemp); 
     	  if (mode.dval == 2)  this.assign(dt, "defval", dt.ecoTemp); 
           }
     }
    
    
    

    Сделать для нужных датчиков привязку - Запуск для сценария

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

    И масса других вариантов …

    Естественно, MODE можно переключать сценарием по расписанию



  • @intrapro:

    Да, все верно, можно так.

    Наконец-то опубликовали частичное решение моего давнишнего вопроса 🙂 А если датчиков температуры 100500? Как у меня - 7 зон на первом этаже и 7 зон на втором этаже!

    Я пытался сделать 3 мультисценария (День/Ночь/Эконом) в которые добавлял нужные датчики температуры. А в самом сценарии прописывал const temp = 24/25/23, которую ассигновал соответствующим датчикам температуры. Однако поскольку могу управлять всеми 14-тью зонами, то хотелось бы в каждой зоне индивидуально настраивать температуру. Например, в котельной/гардеробной пусть будет всегда 23, а в прачечной - всегда 25. Кому-то из детей захочется сделать 24,5 в своей комнате или 25,5. В общем чтобы была возможность управления зонами.

    PS: ответьте, пожалуйста, по вопросам в предыдущем моем сообщении.



  • @Alex_Jet:

    Наконец-то опубликовали частичное решение моего давнишнего вопроса

    А почему частичное? Вроде задача решается - один мультсценарий, к которому привязываете датчики, которые должны по режимам переключаться - 14 штук :), а уставки - у каждого свои

    Да, вы правы, мало у нас опубликовано т н кейсов, где расписано решение конкретной задачи

    Дело в том, что сейчас идет переработка API сценариев.

    Действия устройства будет выполнять само устройство - lamp.on(), vent.toggle(), temp.setSetpoint()

    Через this будут только функции скрипта (таймеры и т д) и ядра (информирование, запись в журнал..)

    Одновременно будут работать и старые сценарии.

    Но в одном сценарии старый и новый синтаксис, естественно, смешивать нельзя. Как только запустим новый вариант - будем публиковать решения.

    @Alex_Jet:

    А как убрать из журнала "отладочные" сообщения telegram??? Типа "telegram send: xxx". Ну или сделать как в Berry для GSM-шлюза было:

    "SMS +799999 Сообщение отправлено: текст сообщения"

    В новом API сценариев сохранением в журнал можно будет управлять. Либо сделаем как в Berry - на галочках, не решили еще.



  • @Alexulik:

    Подскажите, как запустить сценарий из сценария?

    В настоящий момент это не реализовано.
    @intrapro:

    сейчас идет переработка API сценариев

    Там будет возможность запускать сценарии из сценариев.



  • Всем Доброе утро!

    Подскажите пожалуйста как решить одну проблемку!

    Имеется система отопления, прекрасно управляемая IH. Котел, обогрев трубы ввода воды получают информацию от датчиков, подключенных по шине 1W через контроллер MegaD 2560. Ну и все остальное тоже управляется данными контроллерами. В общем я просто решил активировать режим "авто" и доверить автоматике управлять температурой в комнатах раздельно. Ранее все было нормально, а неделю назад при включении этого режима начали мигать иконки переключаясь с вкл на выкл и так далее в цикле. Реле также отрабатывает эти команды. Неделю пытался экспериментальным путем найти причину, остановился на том, что команду эту все таки дает именно сценарий. Хотя подогрев ввода и Котел работают отлично, в автоматическом режиме.
    1.jpeg
    2.jpeg



  • @intrapro:

    А почему частичное? Вроде задача решается - один мультсценарий, к которому привязываете датчики, которые должны по режимам переключаться - 14 штук :), а уставки - у каждого свои

    Да, Вы правы - с таким мультисценарием логика работает как надо - по всем 14 зонам. Осталось подключить железо к iH и проверить как работает в реальности.



  • @sergeyygr:

    Всем Доброе утро!

    Подскажите пожалуйста как решить одну проблемку!

    Имеется система отопления, прекрасно управляемая IH. Котел, обогрев трубы ввода воды получают информацию от датчиков, подключенных по шине 1W через контроллер MegaD 2560. Ну и все остальное тоже управляется данными контроллерами. В общем я просто решил активировать режим "авто" и доверить автоматике управлять температурой в комнатах раздельно. Ранее все было нормально, а неделю назад при включении этого режима начали мигать иконки переключаясь с вкл на выкл и так далее в цикле. Реле также отрабатывает эти команды. Неделю пытался экспериментальным путем найти причину, остановился на том, что команду эту все таки дает именно сценарий. Хотя подогрев ввода и Котел работают отлично, в автоматическом режиме.

    Похоже, проблема с инверсными выходами в автоматическом режиме. Проверим.

    У вас в сценарии используются команды aon-aoff?

    Можно текст сценария?



  • @intrapro:

    @sergeyygr:

    Всем Доброе утро!

    Подскажите пожалуйста как решить одну проблемку!

    Имеется система отопления, прекрасно управляемая IH. Котел, обогрев трубы ввода воды получают информацию от датчиков, подключенных по шине 1W через контроллер MegaD 2560. Ну и все остальное тоже управляется данными контроллерами. В общем я просто решил активировать режим "авто" и доверить автоматике управлять температурой в комнатах раздельно. Ранее все было нормально, а неделю назад при включении этого режима начали мигать иконки переключаясь с вкл на выкл и так далее в цикле. Реле также отрабатывает эти команды. Неделю пытался экспериментальным путем найти причину, остановился на том, что команду эту все таки дает именно сценарий. Хотя подогрев ввода и Котел работают отлично, в автоматическом режиме.

    Похоже, проблема с инверсными выходами в автоматическом режиме. Проверим.

    У вас в сценарии используются команды aon-aoff?

    Можно текст сценария?

    const bat = Device("ActorD", "Батарея");

    const dt = Device("SensorA", "Датчик температуры");

    const script = {

    check() {

    return bat.auto && ( (!bat.dval)&&(dt.aval <= dt.defval-0.5) || (bat.dval)&&(dt.aval >= dt.defval));

    },

    start() {

    if (!bat.dval) {

    this.do(bat, "aon");

    } else {

    this.do(bat, "aoff");

    }

    }

    };

    Ммм… Только обогрев ввода тоже с инверсией и глюка такого не наблюдается. Правда сценарий там немного другой. Сейчас попробовал, актуатор отопления переподключил на "работающий" сценарий и результат тот же. Правда заметил то, что произвольное переключение актуатора прекращается при достижении показания датчика более 10 ти градусов (radiator100_1 переключаться прекратил. Подожду пока температура поднимется в другой комнате и проверю.
    3.jpeg



  • @sergeyygr:

    Ммм… Только обогрев ввода тоже с инверсией и глюка такого не наблюдается. Правда сценарий там немного другой. Сейчас попробовал, актуатор отопления переподключил на "работающий" сценарий и результат тот же. Правда заметил то, что произвольное переключение актуатора прекращается при достижении показания датчика более 10 ти градусов (radiator100_1 переключаться прекратил. Подожду пока температура поднимется в другой комнате и проверю.

    А случайно для датчика температуры не выставлен диапазон от 10 градусов?

    С установкой флага ошибки меньше 10?

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



  • @intrapro:

    @sergeyygr:

    Ммм… Только обогрев ввода тоже с инверсией и глюка такого не наблюдается. Правда сценарий там немного другой. Сейчас попробовал, актуатор отопления переподключил на "работающий" сценарий и результат тот же. Правда заметил то, что произвольное переключение актуатора прекращается при достижении показания датчика более 10 ти градусов (radiator100_1 переключаться прекратил. Подожду пока температура поднимется в другой комнате и проверю.

    А случайно для датчика температуры не выставлен диапазон от 10 градусов?

    С установкой флага ошибки меньше 10?

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

    4.jpeg
    5.jpeg



  • И еще интервалы показаний датчиков не получается задать в плагине. Датчики передают показания как вздумается. По шине I2C может меняться 2 раза в секунду при установке интервала опроса 15 секунд. По шине 1W - один раз в 25-30 секунд при установке 5 секунд. И изменить не получается. Может плагин виноват? (или мои кривые руки))))



  • Если ошибки нет, тогда зацикливание с датчиком температуры скорее всего не связано.

    Попробуйте так:

    check() {
    return bat.auto && ( (bat.dval == 0)&&(Number(dt.aval) <= Number(dt.defval)-0.5) || (bat.dval == 1)&&(Number(dt.aval) >= Number(dt.defval) ) );
    },
    
    start() {
    	if (bat.dval == 0) {
    		this.do(bat, "aon");
    	} else {
    		this.do(bat, "aoff");
    	}
    }	
    
    
    

    @sergeyygr:

    И еще интервалы показаний датчиков не получается задать в плагине. Датчики передают показания как вздумается. По шине I2C может меняться 2 раза в секунду при установке интервала опроса 15 секунд. По шине 1W - один раз в 25-30 секунд при установке 5 секунд. И изменить не получается. Может плагин виноват? (или мои кривые руки))))

    Руки вероятно не виноваты 🙂

    По 1W через MegaD помнится есть минимальное время отклика как раз порядка 20-25 сек. Там же последовательный опрос цепочки датчиков

    По шине I2C - нужно посмотреть лог, скиньте, пригодится, когда будем плагин переделывать



  • @intrapro:

    Если ошибки нет, тогда зацикливание с датчиком температуры скорее всего не связано.

    Попробуйте так:

    > check() {
    > return bat.auto && ( (bat.dval == 0)&&(Number(dt.aval) <= Number(dt.defval)-0.5) || (bat.dval == 1)&&(Number(dt.aval) >= Number(dt.defval) ) );
    > },
    > 
    > start() {
    > 	if (bat.dval == 0) {
    > 		this.do(bat, "aon");
    > 	} else {
    > 		this.do(bat, "aoff");
    > 	}
    > }	
    > 
    > 
    

    @sergeyygr:

    И еще интервалы показаний датчиков не получается задать в плагине. Датчики передают показания как вздумается. По шине I2C может меняться 2 раза в секунду при установке интервала опроса 15 секунд. По шине 1W - один раз в 25-30 секунд при установке 5 секунд. И изменить не получается. Может плагин виноват? (или мои кривые руки))))

    Руки вероятно не виноваты 🙂

    По 1W через MegaD помнится есть минимальное время отклика как раз порядка 20-25 сек. Там же последовательный опрос цепочки датчиков

    По шине I2C - нужно посмотреть лог, скиньте, пригодится, когда будем плагин переделывать

    Такой вариант сценария пробовал, не помогло(((



  • @sergeyygr:

    Такой вариант сценария пробовал, не помогло(((

    А в отладчике что? В рабочих сценариях конкретно по этому сценарию?

    Еще можно временно добавить логирование :

    start() {
      if (bat.dval == 0) {
         this.log('Температура '+dt.aval+'  уставка '+dt.defval+'  Батарея '+bat.dval+' -> ВКЛЮЧАЕМ');
         this.do(bat, "aon");
      } else {
        this.log('Температура '+dt.aval+'  уставка '+dt.defval+'  Батарея '+bat.dval+' -> ВЫКЛЮЧАЕМ');
       this.do(bat, "aoff");
     }
    }
    
    


  • @intrapro:

    @sergeyygr:

    Такой вариант сценария пробовал, не помогло(((

    А в отладчике что? В рабочих сценариях конкретно по этому сценарию?

    Еще можно временно добавить логирование :

    > start() {
    >   if (bat.dval == 0) {
    >      this.log('Температура '+dt.aval+'  уставка '+dt.defval+'  Батарея '+bat.dval+' -> ВКЛЮЧАЕМ');
    >      this.do(bat, "aon");
    >   } else {
    >     this.log('Температура '+dt.aval+'  уставка '+dt.defval+'  Батарея '+bat.dval+' -> ВЫКЛЮЧАЕМ');
    >    this.do(bat, "aoff");
    >  }
    > }
    > 
    

    При температуре в помещении 10 градусов все нормально, режим авто работает, уставку датчика делаешь больше 10 ти - нормально, актуатор включается. Сейчас температура в помещении упала ниже 9,28 - началась "чихарда" с актуатором.

    лог сценария высылаю
    лог сценария.zip



  • @sergeyygr:

    При температуре в помещении 10 градусов все нормально, режим авто работает, уставку датчика делаешь больше 10 ти - нормально, актуатор включается. Сейчас температура в помещении упала ниже 9,28 - началась "чихарда" с актуатором.

    лог сценария высылаю

    Чудеса 🙂 А так?

    start() {
      this.log('Температура '+dt.aval+' уставка '+dt.defval+'  Батарея '+bat.dval);
    
      if (bat.dval == 0 && (Number(dt.aval) < Number(dt.defval))) {
         this.log(dt.aval+' < '+dt.defval+ ' -> ВКЛЮЧАЕМ');
         this.do(bat, "aon");
      } 
    
      if (bat.dval == 1 && (Number(dt.aval) > Number(dt.defval))) {
         this.log(dt.aval+' > '+dt.defval+ ' -> ВЫКЛЮЧАЕМ');
       this.do(bat, "aoff");
     }
    }
    
    


  • @intrapro:

    @sergeyygr:

    При температуре в помещении 10 градусов все нормально, режим авто работает, уставку датчика делаешь больше 10 ти - нормально, актуатор включается. Сейчас температура в помещении упала ниже 9,28 - началась "чихарда" с актуатором.

    лог сценария высылаю

    Чудеса 🙂 А так?

    > start() {
    >   this.log('Температура '+dt.aval+' уставка '+dt.defval+'  Батарея '+bat.dval);
    >   
    >   if (bat.dval == 0 && (Number(dt.aval) < Number(dt.defval))) {
    >      this.log(dt.aval+' < '+dt.defval+ ' -> ВКЛЮЧАЕМ');
    >      this.do(bat, "aon");
    >   } 
    >   
    >   if (bat.dval == 1 && (Number(dt.aval) > Number(dt.defval))) {
    >      this.log(dt.aval+' > '+dt.defval+ ' -> ВЫКЛЮЧАЕМ');
    >    this.do(bat, "aoff");
    >  }
    > }
    > 
    

    Работает!!!



  • @sergeyygr:

    @intrapro:

    @sergeyygr:

    При температуре в помещении 10 градусов все нормально, режим авто работает, уставку датчика делаешь больше 10 ти - нормально, актуатор включается. Сейчас температура в помещении упала ниже 9,28 - началась "чихарда" с актуатором.

    лог сценария высылаю

    Чудеса 🙂 А так?

    > > start() {
    > >   this.log('Температура '+dt.aval+' уставка '+dt.defval+'  Батарея '+bat.dval);
    > >   
    > >   if (bat.dval == 0 && (Number(dt.aval) < Number(dt.defval))) {
    > >      this.log(dt.aval+' < '+dt.defval+ ' -> ВКЛЮЧАЕМ');
    > >      this.do(bat, "aon");
    > >   } 
    > >   
    > >   if (bat.dval == 1 && (Number(dt.aval) > Number(dt.defval))) {
    > >      this.log(dt.aval+' > '+dt.defval+ ' -> ВЫКЛЮЧАЕМ');
    > >    this.do(bat, "aoff");
    > >  }
    > > }
    > > 
    

    Работает!!!

    И так тоже работает

    const script = {

    check() {

    return bat.auto && ((!bat.dval)&&(Number(dt.aval) <= Number(dt.defval)-0.5) || (bat.dval)&&(Number(dt.aval) >= Number(dt.defval)));

    },

    start() {

    this.log('Температура '+dt.aval+' уставка '+dt.defval+' Батарея '+bat.dval);

    if (!bat.dval && (Number(dt.aval) < Number(dt.defval))) {

    this.log(dt.aval+' < '+dt.defval+ ' -> ВКЛЮЧАЕМ');

    this.do(bat, "aon");

    }

    if (bat.dval && (Number(dt.aval) > Number(dt.defval))) {

    this.log(dt.aval+' > '+dt.defval+ ' -> ВЫКЛЮЧАЕМ');

    this.do(bat, "aoff");

    }

    }

    };



  • @sergeyygr:

    Работает!!!

    Постараемся исправить. Спасибо вам за тестирование 🙂



  • Добрый день!

    После сохранения отредактированного сценария теперь не могу зайти в список сценариев. Восстановление проекта из резервной копии не помогло. Список рабочих сценариев открывается. Как это лечится???
    Снимок.GIF


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