Сценарии пользователей



  • Все вроде хорошо. Но когда сидишь в ванной желательно чтобы вентилятор не включался. Продует :roll:

    В ванной сидим со светом. Возьмем в качестве дополнительного условия включения вентилятора - свет выключен.

    То есть пусть помещение вентилируется когда нас нет 😉
    scenvent401.jpg
    Возникла еще проблема. Вентилятор шумит и мешает спать :evil:

    Добавим условие включения вентилятора. Пусть включается только днем с 7-00 до 23-00:
    scenvent501.jpg
    Вот теперь нормально 😄



  • @intrahouse:

    Вот теперь нормально 😄

    Зачётный блокли получился! Особенно A



  • А можно сделать так, чтобы в пользовательском интерфейсе на вкладке "Параметры" можно было задавать время когда вентилятор не работает?



  • @gis:

    А можно сделать так, чтобы в пользовательском интерфейсе на вкладке "Параметры" можно было задавать время когда вентилятор не работает?

    На данный момент такой возможности нет.



  • @gis:

    Спасибо за разъяснение, но так как часто бывают перебои с электричеством, и время заката/восхода может быть пропущено, поэтому приходится делать сценарий. Вообще хорошо бы доработать запуск по времени, таким образом, чтобы при загрузке системы проверять, какие задания должны выполнятся и запускать их. Можно добавить для этого переключатель "запускать задание, если он вовремя не запущено". Это значительно повысило бы надежность малыми средствами, так как организация бесперебойного питания дело довольно хлопотное и затратное. Из-за отсутствия такой возможности, например, я практически не использую Cron в MegaD.

    Это достаточно спорный вопрос. Если при запуске сервера запускать пропущенные сценарии, то можно получить другие проблемы. Если сценарий вовремя не отработал, не факт что его нужно запускать в другое время.



  • Да, случаи могут быть разные - для этого можно данную возможность реализовать опцией - по умолчанию данная возможность отключена, а кому нужно - включит (при загрузке система будет проверять и нужные сценарии запустит).



  • Не хватает возможности для скриптов "запускать каждые …" например, когда нужно запускать скрипт каждые 5 секунд



  • @homa:

    Не хватает возможности для скриптов "запускать каждые …" например, когда нужно запускать скрипт каждые 5 секунд

    Можно сделать так. Установить плагин Sensor Emulator https://ih-systems.com/ru/product/plugin-sensors-emulator/

    В нем запускать какой нибудь виртуальный дискретный датчик с периодом 5 сек.

    А в сценарии этот датчик поставить как триггер запуска сценария.



  • @gis:

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

    В принципе согласен. Этот функционал не лишний. Надо думать по реализации



  • Коллеги, у меня каждый день по расписанию утром (-3 час от рассвета) и вечером (-0 час от заката) запускается скрипт тупо переключающий режим отопления - если ночь, то день, если день, то ночь. Но с 16.01.19 по вечерам он стал запускаться по два раза… В чем может быть дело?

    /** 
    * @name Переключение режимов отопления  
    * @desc При запуске включается День, если была Ночь или Ночь, если был День 
    * @version 4  
    */
    
    const mode = Device("SWITCH_HEATING");
    
    script({
        start() {
          if(mode.value == 1) {
            mode.setValue(2);
          }
          else {
            if(mode.value == 2)
            mode.setValue(1);
          }
          this.log("Режим отопления - " +mode.stateName);
        } 
    });
    
    

    Расписание_вечером_срабатывает_два_раза.png



  • @Alex_Jet:

    Коллеги, у меня каждый день по расписанию утром (-3 час от рассвета) и вечером (-0 час от заката) запускается скрипт тупо переключающий режим отопления - если ночь, то день, если день, то ночь. Но с 16.01.19 по вечерам он стал запускаться по два раза… В чем может быть дело?

    > /** 
    > * @name Переключение режимов отопления  
    > * @desc При запуске включается День, если была Ночь или Ночь, если был День 
    > * @version 4  
    > */
    > 
    > const mode = Device("SWITCH_HEATING");
    > 
    > script({
    >     start() {
    >       if(mode.value == 1) {
    >         mode.setValue(2);
    >       }
    >       else {
    >         if(mode.value == 2)
    >         mode.setValue(1);
    >       }
    >       this.log("Режим отопления - " +mode.stateName);
    >     } 
    > });
    > 
    

    Расписание_вечером_срабатывает_два_раза.png

    Было такое, но в позапрошлой по-моему версии исправили. У Вас актуальная версия?



  • @homa:

    Было такое, но в позапрошлой по-моему версии исправили. У Вас актуальная версия?

    Да, конечно, версия самая последняя - 4.4.11. Может что-то ещё делали? Расписание заново сделать?



  • @Alex_Jet:

    @homa:

    Было такое, но в позапрошлой по-моему версии исправили. У Вас актуальная версия?

    Да, конечно, версия самая последняя - 4.4.11. Может что-то ещё делали? Расписание заново сделать?

    Тогда ждём что скажут разработчики. У меня после обновления все стало работать



  • @intrahouse:

    @homa:

    Не хватает возможности для скриптов "запускать каждые …" например, когда нужно запускать скрипт каждые 5 секунд

    Можно сделать так. Установить плагин Sensor Emulator https://ih-systems.com/ru/product/plugin-sensors-emulator/

    В нем запускать какой нибудь виртуальный дискретный датчик с периодом 5 сек.

    А в сценарии этот датчик поставить как триггер запуска сценария.

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



  • @homa:

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

    На оба вопроса ответ нет.

    Но если вы опишите задачу подробнее, вероятно это можно будет реализовать сценарием.



  • @intrahouse:

    @homa:

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

    На оба вопроса ответ нет.

    Но если вы опишите задачу подробнее, вероятно это можно будет реализовать сценарием.

    Настроил замер "мгновенной нагрузки", которая вычисляется по среднему значению за минуту, решил что минута долго и нужно сделать за полминуты, получается нужно изменить код плагина и настройки виртуального сенсора. Вот когда начал менять и подумал, что было бы удобнее через интерфейс это поменять один раз и пользоваться переменной. Вообще использовать глобальные переменные было бы удобно/

    Еще хотелось бы выводить таймер на мнемосхему. Например есть сценарий, который ставит квартиру на охрану через 90секунд (время через которое выключится свет и устройства безопасности будут реагировать на изменения). Хочется видеть сколько еще осталось



  • @sergeyygr:

    @sergeyygr:

    Добрый день! Подскажите пожалуйста каким образом можно реализовать счётчик моточасов? И как в сценарии при передаче сообщения о срабатывании датчика движения кроме передачи имени датчика, зоны срабатывания передать и время его срабатывания?

    Первый вопрос реализовал сценарием (помогла идея по использованию плагина эмулятора). Вроде работает нормально (в эмуляторе устройство изменяет свое состояние 1 раз в 60 секунд).

    А вот по второму вопросу все таки прошу помочь 🙂

    Добрый день!

    Отлично, что придумали реализацию, пока мы не сделали циклический запуск по расписанию 🙂

    По второму вопросу - вы хотите передать время срабатывания датчика в сценарии, который вызван при сработке? То есть текущую дату и время?

    	let dt = new Date(); // это текущее время 
    	this.log('Время  '+dt.toLocaleString()) ;  // 'Время  2019-1-29 11:25:13', 
    
    
    


  • @sergeyygr:

    Спасибо! Но надо только время, без даты.

    Тогда можно так:

    let dt = new Date(); 
    this.log('Время  '+dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds() );
    
    
    

    Или так:

    let dt = new Date(); 
    this.log('Время  '+dt.toLocaleString().substr(10))
    
    


  • Задача - Если насос/котел/кран не менял свое состояние (не включался) больше некоторого времени, то включить его на 5 минут и затем выключить. Сам скрипт оказался не таким сложным. Но понадобилось время чтобы в json-конфигах сервера разыскать параметр устройства под названием "lastts" - это время последнего изменения состояния (ON/OFF/TOGGLE) устройства в мс. Параметры устройств нигде не опубликованы, о чем я сожалею. Однако если скрипт оставлять в таком виде, в котором я его привел, то нужно запускать его по расписанию в "cron". Может быть кто-нибудь подскажет - можно ли что-то сделать со StartOnChange или Listener - чтобы сценарий самостоятельно запускался каждую минуту/10 минут/час/день/неделю?

    /** 
    * @name Включение устройств на время 
    * @desc Если прошло больше времени с момента последнего включения чем задано в сценарии, то включаем устройство на некоторое время 
    * @version 4 
    */
    
    const dev = Device("PUMP1"); 
    
    script({
        start() {
          let TurnOnDur = 300;  //Длительность работы в секундах
          let timer = 4;        //Таймер отсчета в часах
          let nowtime = Date.now(); // Текущее время в мс
          let lasttime = dev.getParam('lastts'); //Время изменения состояния в мс
          let diftime = nowtime - lasttime; //Разница в мс
          let dif = diftime/(1000*60*60); //Разница в часах
          let hours = Math.floor(dif);
          let minutes = Math.round((dif-hours)*60);
    
          //this.log(nowtime+ " - " +lasttime+ " = " +diftime);
    
          if(dev.isOff() && dif > timer) {
            this.log(dev.name+ " last ON = " +((hours < 10) ? "0" : "")+hours+ ":" +((minutes < 10) ? "0" : "")+minutes+ " ago > " +timer+ " -> TurnOn by " +TurnOnDur/60+ "min");
            dev.on();
            this.startTimer("T1", TurnOnDur, "TurnOffDev");
          }
          else if(dev.isOn()) {
            this.log(dev.name+ " is ON ~ " +((hours < 10) ? "0" : "")+hours+ ":" +((minutes < 10) ? "0" : "")+minutes+ " -> exit");
          }
          else {
            this.log(dev.name+ " last ON = " +((hours < 10) ? "0" : "")+hours+ ":" +((minutes < 10) ? "0" : "")+minutes+ " ago < " +timer+ " -> exit");
          }
        },
    
        TurnOffDev() {
          dev.off();
          dev.setAuto('True');
        }
    });
    
    
    

    Если это будут читать разработчики iH, то ответьте на мои вопросы: тут и тут.



  • @Alex_Jet:

    Задача - Если насос/котел/кран не менял свое состояние (не включался) больше некоторого времени, то включить его на 5 минут и затем выключить. Сам скрипт оказался не таким сложным. Но понадобилось время чтобы в json-конфигах сервера разыскать параметр устройства под названием "lastts" - это время последнего изменения состояния (ON/OFF/TOGGLE) устройства в мс. Параметры устройств нигде не опубликованы, о чем я сожалею. Однако если скрипт оставлять в таком виде, в котором я его привел, то нужно запускать его по расписанию в "cron". Может быть кто-нибудь подскажет - можно ли что-то сделать со StartOnChange или Listener - чтобы сценарий самостоятельно запускался каждую минуту/10 минут/час/день/неделю?

    > /** 
    > * @name Включение устройств на время 
    > * @desc Если прошло больше времени с момента последнего включения чем задано в сценарии, то включаем устройство на некоторое время 
    > * @version 4 
    > */
    > 
    > const dev = Device("PUMP1"); 
    > 
    > script({
    >     start() {
    >       let TurnOnDur = 300;  //Длительность работы в секундах
    >       let timer = 4;        //Таймер отсчета в часах
    >       let nowtime = Date.now(); // Текущее время в мс
    >       let lasttime = dev.getParam('lastts'); //Время изменения состояния в мс
    >       let diftime = nowtime - lasttime; //Разница в мс
    >       let dif = diftime/(1000*60*60); //Разница в часах
    >       let hours = Math.floor(dif);
    >       let minutes = Math.round((dif-hours)*60);
    >       
    >       //this.log(nowtime+ " - " +lasttime+ " = " +diftime);
    >       
    >       if(dev.isOff() && dif > timer) {
    >         this.log(dev.name+ " last ON = " +((hours < 10) ? "0" : "")+hours+ ":" +((minutes < 10) ? "0" : "")+minutes+ " ago > " +timer+ " -> TurnOn by " +TurnOnDur/60+ "min");
    >         dev.on();
    >         this.startTimer("T1", TurnOnDur, "TurnOffDev");
    >       }
    >       else if(dev.isOn()) {
    >         this.log(dev.name+ " is ON ~ " +((hours < 10) ? "0" : "")+hours+ ":" +((minutes < 10) ? "0" : "")+minutes+ " -> exit");
    >       }
    >       else {
    >         this.log(dev.name+ " last ON = " +((hours < 10) ? "0" : "")+hours+ ":" +((minutes < 10) ? "0" : "")+minutes+ " ago < " +timer+ " -> exit");
    >       }
    >     },
    >     
    >     TurnOffDev() {
    >       dev.off();
    >       dev.setAuto('True');
    >     }
    > });
    > 
    > 
    

    Если это будут читать разработчики iH, то ответьте на мои вопросы: тут и тут.

    Это можно делать используя эмулятор сенсора. В настройках плагина задается период изменения, а сценарий выполняется по признаку startOnChange(sensor_name), либо это не чаще раза в день, то можно запускать сценарий в определенное время каждый день\день месяца\дни недели


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