Сценарий для переключения чего-либо по расписанию и с помощью кнопок в веб-интерфейсе



  • Задача: переключать режимы отопления "Эконом", "День", "Ночь" кнопками виджета "Режимы отопления", а также по расписанию. Вроде бы все просто, однако по расписанию отопление нужно переводить только в два режима - "День" (утром) и "Ночь" (вечером), а если пользователь принудительно установил режим "Эконом", то расписание не должно срабатывать!

    Вообще режимы отопления (3 режима) и вентиляции (5 режимов) у меня выбираются с помощью устройства "Переключатель", у которого можно сделать несколько позиций и конечно же визуализировать его на экране/мнемосхеме/виджете так как захочется. Вот только отдельные горизонтальные кнопки у меня не получилось сделать, только с вертикальным расположением:
    Сценарий_Переключения_Переключатели_Систем.png

    Поэтому было решено сделать виджет, который состоит из кнопок, принимающих любое положение или форму благодаря развитым средствам визуализации intraHouse.

    Сценарий, который обрабатывает нажатие кнопок изменения режима работы отопления и команды из расписания имеет следующий вид:

    /** 
    * @name Отопление - переключение режимов
    * @desc Параметр имеет вид {"type":"button/sсhedule", "value":"0...2"}
    * @version 4  
    */
    
    const mode = Device("SWITCH_HEATING");
    
    script({
      start(param) {
        if(param !== undefined) {
          const obj = this.ParseJSON(param);
          //Вывод в журнал для отладки
          //this.log("Тип - " +obj.type+ "; Значение = " +obj.value);
          
          //Если команда от кнопки виджета, то переключаем режим
          if(obj.type == "button") {
            mode.setValue(obj.value);
          }
          //Если команда от задания в расписании и режим День/Ночь, то переключаем режим
          else if(obj.type == "sсhedule" && mode.value > 0) {
            mode.setValue(obj.value);
          }
          //Иначе выходим (сохраняем режим "Эконом")
          else this.exit();
        }
        else this.exit();
      },
      
      //Функция парсинга входного параметра
      ParseJSON(param) {
          try {
            return JSON.parse(param);
          }
          catch (e) {
            let text = e instanceof SyntaxError;
            this.log("SyntaxError - " +text+ "; param - " +param);
          }
      }
    });
    

    Чтобы сценарий работал нужно в параметрах кнопок виджета выбрать "Запуск сценария", имя сценария (в моем случае - "Отопление - переключение режимов") и в качестве Команды/Дополнительного параметра вписать строку в формате JSON, например:

    1. {"type":"button", "value":"0"} - означает что команда на переключение отдается кнопкой со значением 0. В моем случае - это включение режима отопления "Эконом".
      Сценарий_Переключения_по_Кнопке.png

    2. {"type":"sсhedule", "value":"2"} - означает что команда на переключение отдается заданием из расписания со значением 2. В моем случае - это включение режима отопления "День"
      Сценарий_Переключения_по_Расписанию.png

    Собственно такую структуру управления - с помощью кнопок в веб-интерфейсе и заданий расписания iH - можно применить к любому устройству, соответственным образом переписав сценарий.


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