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



  • @Sergeus, вставьте в конец сценария функцию:

      //Функция возвращает цифровое значение периода дня
      GetPeriodDay() {
        let date = new Date();
        let hour = date.getHours();
        let period = 0;
        
        if(hour > 6 && hour < 10)       period = 0; // Период 7-9
        else if(hour > 9 && hour < 20)  period = 1; // Период 10-19
        else if(hour > 19 && hour < 23) period = 2; // Период 20-22
        else                            period = 3; // Период 23-6
        
        return period;
      },
    

    А в start обращайтесь к ней так:

    if(this.GetPeriodDay() != 3) {
       //Тут выполняем то что нужно выполнять с утра и до самого вечера
    };
    

    Или еще проще просто в start:

    let date = new Date();
    
    if(date.getHours() > 7 || date.getHours() < 23) {
       //Тут выполняем то что нужно выполнять с утра и до самого вечера
    }
    


  • @Alex_Jet Первый вариант будет поинтересней. Спасибо!



  • Это сообщение удалено!


  • Вам лучше чем нибудь гуманитарным заниматься. Катастрофами, например. 🙂

    Добрый день
    Подскажите пожалуйста?
    Когда рулет присылает значения 105 это значит 0%
    А когда больше 105 то ничего не присылает так как в устройстве стоит ограничение по минимальным и максимальным значениям 20 и 105
    Проблема в том что датчик не всегда присылает точные данные и бывают редко глюки и из за этого получается такая херь
    Воды 0% и даже меньше, датчик присылает один раз глючные данные, ну например что воды 5%
    А потом присылает нормальные данные, но так как воды уже меньше чем 105, эти данные не учитываются и всегда висит 5%
    Можно сделать так что бы 0% было когда датчик присылает 105 и больше? Ну и когда 20 и меньше это 100%

    Просто когда воды в баке остаётся меньше 2% у меня выключается насос повышающий давления, что бы он в холостую не работал и когда случается такой глюк он постоянно работает а воды нету



  • Пользователь @dre12007 написал в Сценарии пользователей:

    Можно сделать так что бы 0% было когда датчик присылает 105 и больше? Ну и когда 20 и меньше это 100%

    Добрый день. Да, можно:

    (value>=20 && value<= 105) ? Math.round(100 - (Number(value) - 20)*100/85) : (value <20 ? 100 : 0)
    

    Это тернарный оператор: условие ? значение_если_да : значение_если_нет

    • первая скобка - проверяем, что значение в диапазоне от 20 до 105 включительно
    • если да - выполняется расчет и округляется до целых (0-100 %)
    • если нет - сработает часть после двоеточия - второй тернарный оператор

    Если у вас прописана формула в канале, просто скопируйте ее
    Если в сценарии - нужно присвоить



  • @intrapro
    Спасибо огромнейшее



  • Добрый день.
    В сценарии можно использовать метки и операторы перехода типа break и т.п. для перехода в нужную часть кода ?



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

    Добрый день.
    В сценарии можно использовать метки и операторы перехода типа break и т.п. для перехода в нужную часть кода ?

    Добрый день, break и continue в цикле конечно работает, label в принципе должно работать, система использует стандартный движок JS.
    Мы не используем label, такой стиль не считается хорошей практикой: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/label

    mdn_label.png

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



  • У меня проблемка: в сценарии IH срабатівает 2 действия одновременно. Помогите разобратся:

    /** 
    * @name Виключення насоса тепла підлога 
    * @desc  
    * @version 4 
    */
    const water_pump = Device("water_pump_for_hot_water");
    const radiator8 = Device("RADIATOR8");
    const radiator9 = Device("RADIATOR9");
    const radiator10 = Device("RADIATOR10");
    
    startOnChange([radiator8,radiator9,radiator10]); 
    
    script({
        start() {
          // if(radiator10.isOn()){
          //   this.log('radiator10 is On');
          // }else{
          //   this.log('radiator10 is Off');
          // }
          if(radiator8.isOff()||radiator9.isOff()||radiator10.isOff()){
            this.log('start timer water_pump');
            this.startTimer("T1",300,"onTimerT1");
          }
          if(radiator8.isOn()&&radiator9.isOn()&&radiator10.isOn()){
            this.log('off water_pump');
            water_pump.turnOffSaveAuto();
          }
        },
        onTimerT1(){
          water_pump.turnOnSaveAuto();
        } 
    });
    
    

    alt text
    При открытии заслонки теплого пола в плашине MegaD продалает статус устройства, пришет "-". В сценарии у меня on это закрыто а off это открыто. 1 принимает коректно а 0 пишет "-"



  • @amgstone
    По логике вашего сценария у вас получается, что когда хотяб один клапан открыт, то включается таймер, а когда все клапаны закрыты, то насос выключается. Когда выключается насос, вам нужно добавить еще выключение таймера, иначе у вас насос включиться когда все клапаны уже закрыты. Команда на выключение this.stopTimer(‘T1’). Добавьте ее после this.log('off water_pump');



  • Пользователь @goodspeed1986 написал в Сценарии пользователей:

    this.stopTimer(‘T1’)

    /** 
    * @name Виключення насоса тепла підлога 
    * @desc  
    * @version 4 
    */
    const water_pump = Device("water_pump_for_hot_water");
    const radiator8 = Device("RADIATOR8");
    const radiator9 = Device("RADIATOR9");
    const radiator10 = Device("RADIATOR10");
    
    startOnChange([radiator8,radiator9,radiator10]); 
    
    script({
        start() {
          // if(radiator10.isOn()){
          //   this.log('radiator10 is On');
          // }else{
          //   this.log('radiator10 is Off');
          // }
          if(radiator8.isOff()||radiator9.isOff()||radiator10.isOff()){
            this.log('start timer water_pump');
            this.startTimer("T1",300,"onTimerT1");
          }
          if(radiator8.isOn()&&radiator9.isOn()&&radiator10.isOn()){
            this.log('off water_pump');
            this.stopTimer(‘T1’);
            water_pump.turnOffSaveAuto();
          }
        },
        onTimerT1(){
          water_pump.turnOnSaveAuto();
        } 
    });
    

    Выдает ошибку: http://joxi.ru/82Q4bdkuwknbKm



  • @amgstone а то что значение с канала выдает "-" сможете поправить баг. На другом объекте у меня такая же проблема.
    Поправил: this.stopTimer("T1"); ошибка ушла но насос дальше не выключает после етого как все сервопривода закрыты (On).


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