В связи с выходом крупного обновления 5.9.х, приглашаем вас принять участие в вебинаре 09.06.2022 в 15:00. Участвовать

Запуск сценария по кнопке



  • Участник @intrapro написал в Запуск сценария по кнопке:

    @gewer, предыдущий пост получился довольно длинным в попытке прояснить событийный механизм сценариев.
    Возможно, мы вашу задачу не совсем правильно поняли. Пробуйте и задавайте вопросы дальше 🙂

    Спасибо, ближе к выходным буду пытаться разобраться. До момента написания сценариев всё прошло довольно гладко, на самом интересном становится сложнее, но думаю что осилю)



  • На сайте есть статья управление теплыми полами
    Возможно, она поможет решить вашу задачу
    Там есть мультисценарий, который можно использовать.



  • Участник @intrahouse написал в Запуск сценария по кнопке:

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

    Это то что нужно!

    В статье есть следующее:

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

    В данном случае уставку можно будет поменять для каждого датчика отдельно, верно? Или она будет меняться для всех сразу? В разных помещениях нужна разная температура тёплых полов (в ванной теплее, в неиспользуемых спальнях вообще отключить и т.д.).



  • Участник @gewer написал в Запуск сценария по кнопке:

    В данном случае уставку можно будет поменять для каждого датчика отдельно, верно?

    Да, это так.



  • Участник @intrahouse написал в Запуск сценария по кнопке:

    Да, это так.

    Супер. Тогда это идеально мне подходит.
    Несколько дней курения мануалов и ваша помощь сэкономили нехилую сумму на автоматике для водяных полов) Спасибо!



  • Можно все же поднять еще раз вопрос?
    Итак имеем один сценарий (мультисценарий) - работа батарей в зависимости от датчиков температуры и уставки на датчике.
    Возможен другой сценарий - работа батарей в зависимости от значения датчика температуры и определенной температуре "антизамерзания"
    Хочется что бы при включении отопления работал первый сценарий а при выключении - второй. Вопрос: как из одного сценария заблокировать/разблокировать выполнение другого?



  • Участник @alesle написал в Запуск сценария по кнопке:

    Можно все же поднять еще раз вопрос?
    Итак имеем один сценарий (мультисценарий) - работа батарей в зависимости от датчиков температуры и уставки на датчике.
    Возможен другой сценарий - работа батарей в зависимости от значения датчика температуры и определенной температуре "антизамерзания"
    Хочется что бы при включении отопления работал первый сценарий а при выключении - второй. Вопрос: как из одного сценария заблокировать/разблокировать выполнение другого?

    Сделайте актуатор на 2 состояния. 1 состояние для включенного отопления, второе - для выключенного.
    В обоих мультисценариях, которые у вас запускаются при изменении показаний датчика температуры, добавьте для запуска проверку условия соответствия этого актуатора нужному положению. Первый мультисценарий запускайте, если он в положении "отопление включено", второй - в положении "отопление выключено.

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

    /** 
    * @name Свет в комнате по движению  
    * @desc  
    * @version 4  
    */
    
    const Lamp = Device("ActorD", "Светильник");
    const Sw = Device("SensorD", "Выключатель");
    const Motion = Device("SensorD", "Датчик движения"); 
    const SAF = Device("ActorD","Охрана"); 
    const Last = Device("ActorA","Последнее движение");
    
    // Запустим сценарий при сработке датчика движения, если светильник не горит, режим охраны отключен, выключатель выключен. 
    startOnChange([Motion], Motion.isOn() && Lamp.isOff() && Sw.isOff() && SAF.isOff());
    
    script({
        start() {
             Lamp.on();
             Last.setValue(`Последнее движение ${new Date().toLocaleString()}.  ${Motion.zoneName}`);
             // взводим таймер, чтобы отключить 
             this.startTimer("T1", 180, "turnOff");       
            
            // Добавляем слушателей - следим за датчиком движения и светильником
            this.addListener(Motion, "onMotion");
            this.addListener(Lamp, "onLamp");
            this.addListener(Sw, "onSw");
        },
        
        onMotion() {
          // Если движение возобновилось - сбрасываем таймер
          if (Motion.isOn() )  {
            this.stopTimer("T1");
          }  
           // Если движение прекратилось - взводим таймер (после повторных движений)
          if (Motion.isOff() && this.timer.T1 == "off")  {
            this.startTimer("T1",  180, "turnOff");
          }  
        },
        
         onLamp() {
          // Светильник выключили другим способом - выходим
           if (Lamp.isOff()) this.exit();
         },
         
         onSw() {
          // Светильник выключили другим способом - выходим
            if (Sw.isOn() )  {
            this.stopTimer("T1");
          this.exit();
            }
         },
    
        // Функция, которая сработает, когда таймер досчитает - отключаем и выходим
        turnOff() {
          Lamp.off();
          this.exit(); // Здесь exit нужен, так как есть активные слушатели и сценарий сам не завершится
        }
    });
    

    Второй

    /** 
    * @name Движение в комнате 
    * @desc  
    * @version 4  
    */
    
    const motion = Device("SensorD", "Датчик движения"); 
    const SAF = Device("ActorD","Охрана"); 
    const Last = Device("ActorA","Последнее движение");
    
    startOnChange([motion], motion.isOn()); 
    
    script({
      start() { 
        if ((motion.isOn())) {
          Last.setValue(`Последнее движение ${new Date().toLocaleString()}.  ${motion.zoneName}`);
        }
        if ((SAF.isOn()) && (motion.isOn())) {
          this.info("pushnotification","OWNER",`Движение в комнате!!!!`);
        }
      }
    });
    


  • Спасибо, так я и сделал, в конце концов.



  • Помогите советом. Хочу на одном из экранов сделать кнопку, при нажатии чтобы меня перекидывало на настройку проекта ( http://192.168.0.7:8088/pm/ )



  • @DM19, на текущий момент такой возможности нет (надо добавить в "Системные команды"). Только если использовать не кнопку, а html-виджет и в нем прописать прямой адрес с типом открытия в новом окне.


Log in to reply