Сценарии в intraHouse Cherry



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

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

    Имеется система отопления, прекрасно управляемая 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



  • Попробуйте сделать так. Найти папку /var/lib/intrahouse-c/projects/<имя проекта>/scenes/script/

    В этой папке хранятся файлы сценариев с расширением js

    Удалите последний редактированный сценарий. Или перенесите его себе, чтобы сохранить.

    После удаления, сервер надо перезагрузить.



  • @sergeyygr:

    Добрый день!

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

    Помогло! Спасибо!



  • @intrahouse:

    Попробуйте сделать так. Найти папку /var/lib/intrahouse-c/projects/<имя проекта>/scenes/script/

    В этой папке хранятся файлы сценариев с расширением js

    Удалите последний редактированный сценарий. Или перенесите его себе, чтобы сохранить.

    После удаления, сервер надо перезагрузить.

    Помогло! Спасибо!!!



  • Тема закрыта в связи с выходом новой версии API сценариев.


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